cuVS API 基础#
内存管理#
集中式内存管理允许灵活配置分配策略,例如跨库边界共享相同的 CUDA 内存池。cuVS 使用 [RMM] 库,这减轻了在全球范围内为不同 GPU 加速库配置不同分配策略的负担。
RMM 目前提供 C++ 和 Python 的 API。
C++#
这是一个在 C++ 中配置 RMM 使用内存池分配器的示例(摘自 RMM 示例 此处)
rmm::mr::cuda_memory_resource cuda_mr;
// Construct a resource that uses a coalescing best-fit pool allocator
// With the pool initially half of available device memory
auto initial_size = rmm::percent_of_free_device_memory(50);
rmm::mr::pool_memory_resource<rmm::mr::cuda_memory_resource> pool_mr{&cuda_mr, initial_size};
rmm::mr::set_current_device_resource(&pool_mr); // Updates the current device resource pointer to `pool_mr`
rmm::mr::device_memory_resource* mr = rmm::mr::get_current_device_resource(); // Points to `pool_mr`
Python#
这是 Python 中的相应代码(摘自 RMM 示例 此处)
import rmm
pool = rmm.mr.PoolMemoryResource(
rmm.mr.CudaMemoryResource(),
initial_pool_size=2**30,
maximum_pool_size=2**32)
rmm.mr.set_current_device_resource(pool)
资源管理#
cuVS 使用来自 RAFT 库的 ML 和数据挖掘原语 API,以集中和重用昂贵的资源,例如内存管理。下面的代码示例演示了如何创建这些资源以便在本指南中全程使用。
有关更多信息,请参阅 RAFT 的资源 API 文档。
C#
#include <cuda_runtime.h>
#include <cuvs/core/c_api.h>
cuvsResources_t res;
cuvsResourcesCreate(&res);
// ... do some processing ...
cuvsResourcesDestroy(res);
C++#
#include <raft/core/device_resources.hpp>
raft::device_resources res;
Python#
import pylibraft
res = pylibraft.common.DeviceResources()
Rust#
let res = cuvs::Resources::new()?;