thrust::mr::disjoint_synchronized_pool_resource#

template<typename Upstream, typename Bookkeeper>
struct disjoint_synchronized_pool_resource : public thrust::mr::memory_resource<Upstream::pointer>#

A mutex-synchronized version of disjoint_unsynchronized_pool_resource. Uses std::mutex, and therefore requires C++11.

Template Parameters:
  • Upstream – the type of memory resources that will be used for allocating memory blocks to be handed off to the user

  • Bookkeeper – the type of memory resources that will be used for allocating bookkeeping memory

Public Types

using unsync_pool = disjoint_unsynchronized_pool_resource<Upstream, Bookkeeper>#
using lock_t = std::lock_guard<std::mutex>#
using void_ptr = typename Upstream::pointer#
using pointer = Upstream::pointer#

Alias for the template parameter.

Public Functions

inline disjoint_synchronized_pool_resource(
Upstream *upstream,
Bookkeeper *bookkeeper,
pool_options options = get_default_options(),
)#

Constructor.

Parameters:
  • upstream – the upstream memory resource for allocations

  • bookkeeper – the upstream memory resource for bookkeeping

  • options – pool options to use

inline disjoint_synchronized_pool_resource(
pool_options options = get_default_options(),
)#

Constructor. Upstream and bookkeeping resources are obtained by calling get_global_resource for their types.

Parameters:

options – pool options to use

inline void release()#

Releases all held memory to upstream.

inline virtual void_ptr do_allocate(
std::size_t bytes,
std::size_t alignment = THRUST_MR_DEFAULT_ALIGNMENT,
) override#

Allocates memory of size at least bytes and alignment at least alignment.

Parameters:
  • bytes – size, in bytes, that is requested from this allocation

  • alignment – alignment that is requested from this allocation

Throws:

thrust::bad_alloc – when no memory with requested size and alignment can be allocated.

Returns:

A pointer to void to the newly allocated memory.

inline virtual void do_deallocate(
void_ptr p,
std::size_t n,
std::size_t alignment = THRUST_MR_DEFAULT_ALIGNMENT,
) override#

Deallocates memory pointed to by p.

Parameters:
  • p – pointer to be deallocated

  • bytes – the size of the allocation. This must be equivalent to the value of bytes that was passed to the allocation function that returned p.

  • alignment – the size of the allocation. This must be equivalent to the value of alignment that was passed to the allocation function that returned p.

inline pointer allocate(
std::size_t bytes,
std::size_t alignment = THRUST_MR_DEFAULT_ALIGNMENT,
)#

Allocates memory of size at least bytes and alignment at least alignment.

Parameters:
  • bytes – size, in bytes, that is requested from this allocation

  • alignment – alignment that is requested from this allocation

Throws:

thrust::bad_alloc – when no memory with requested size and alignment can be allocated.

Returns:

A pointer to void to the newly allocated memory.

inline void deallocate(
pointer p,
std::size_t bytes,
std::size_t alignment = THRUST_MR_DEFAULT_ALIGNMENT,
) noexcept#

Deallocates memory pointed to by p.

Parameters:
  • p – pointer to be deallocated

  • bytes – the size of the allocation. This must be equivalent to the value of bytes that was passed to the allocation function that returned p.

  • alignment – the alignment of the allocation. This must be equivalent to the value of alignment that was passed to the allocation function that returned p.

inline bool is_equal(const memory_resource &other) const noexcept#

Compares this resource to the other one. The default implementation uses identity comparison, which is often the right thing to do and doesn’t require RTTI involvement.

Parameters:

other – the other resource to compare this resource to

Returns:

whether the two resources are equivalent.

inline virtual bool do_is_equal(
const memory_resource &other,
) const noexcept#

Compares this resource to the other one. The default implementation uses identity comparison, which is often the right thing to do and doesn’t require RTTI involvement.

Parameters:

other – the other resource to compare this resource to

Returns:

whether the two resources are equivalent.

Public Static Functions

static inline pool_options get_default_options()#

Get the default options for a disjoint pool. These are meant to be a sensible set of values for many use cases, and as such, may be tuned in the future. This function is exposed so that creating a set of options that are just a slight departure from the defaults is easy.