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()?;