Utilities#
RAFT contains numerous utility functions and primitives that are easily usable. This page provides C++ API references for the publicly-exposed utility functions.
Memory Pool#
#include <raft/utils/memory_pool.cuh>
namespace raft
-
std::unique_ptr<rmm::mr::device_memory_resource> get_pool_memory_resource(rmm::mr::device_memory_resource *&mr, size_t initial_size)#
Get a pointer to a pooled memory resource within the scope of the lifetime of the returned unique pointer.
This function is useful in the code where multiple repeated allocations/deallocations are expected. Use case example:
Here, the new memory resource would be created within the function scope if the passedvoid my_func(..., size_t n, rmm::mr::device_memory_resource* mr = nullptr) { auto pool_guard = raft::get_pool_memory_resource(mr, 2 * n * sizeof(float)); if (pool_guard){ RAFT_LOG_INFO("Created a pool"); } else { RAFT_LOG_INFO("Using the current default or explicitly passed device memory resource"); } rmm::device_uvector<float> x(n, stream, mr); rmm::device_uvector<float> y(n, stream, mr); ... }
mr
is null and the default resource is not a pool. After the call,mr
contains a valid memory resource in any case.- Parameters:
mr – [inout] if not null do nothing; otherwise get the current device resource and wrap it into a
pool_memory_resource
if necessary and return the pointer to the result.initial_size – if a new memory pool is created, this would be its initial size (rounded up to 256 bytes).
- Returns:
if a new memory pool is created, it returns a unique_ptr to it; this managed pointer controls the lifetime of the created memory resource.