类 faiss::gpu::GpuResources

class GpuResources

GPU端资源提供程序的基类;隐藏了 cuBLAS 句柄、CUDA 流和所有设备内存分配的配置

faiss::gpu::StandardGpuResourcesImpl 继承

公共函数

virtual ~GpuResources()
virtual void initializeForDevice(int device) = 0

调用以为特定设备预先分配资源。 如果未调用此方法,则将在首次需要时分配资源

virtual bool supportsBFloat16(int device) = 0

给定的 GPU 是否支持 bfloat16?

virtual cublasHandle_t getBlasHandle(int device) = 0

返回我们用于给定设备的 cuBLAS 句柄。

virtual cudaStream_t getDefaultStream(int device) = 0

返回我们为给定设备订购所有计算的流

virtual void setDefaultStream(int device, cudaStream_t stream) = 0

将设备的默认流覆盖为用户提供的流。 资源对象不拥有此流(即,它不会销毁它)。

virtual std::vector<cudaStream_t> getAlternateStreams(int device) = 0

返回我们用于给定设备的备用流集。

virtual void *allocMemory(const AllocRequest &req) = 0

内存管理 从给定的内存空间返回一个分配,该分配相对于给定的流进行排序(即,第一个用户将是该流中的内核)。 所有分配都在内部调整大小,使其成为 16 字节的下一个最高倍数,并且保证返回的所有分配都为 16 字节对齐。

virtual void deallocMemory(int device, void *in) = 0

返回先前的分配。

virtual size_t getTempMemoryAvailable(int device) const = 0

对于 MemorySpace::Temporary,在没有 cudaMalloc 分配的情况下,有多少空间立即可用?

virtual std::pair<void*, size_t> getPinnedMemory() = 0

返回可用的 CPU 锁定内存缓冲区。

virtual cudaStream_t getAsyncCopyStream(int device) = 0

返回我们执行异步 CPU <-> GPU 复制的流。

bool supportsBFloat16CurrentDevice()

当前 GPU 是否支持 bfloat16?

默认提供的函数

cublasHandle_t getBlasHandleCurrentDevice()

使用当前设备调用 getBlasHandle。

cudaStream_t getDefaultStreamCurrentDevice()

使用当前设备调用 getDefaultStream。

size_t getTempMemoryAvailableCurrentDevice() const

使用当前设备调用 getTempMemoryAvailable。

GpuMemoryReservation allocMemoryHandle(const AllocRequest &req)

通过 RAII 对象返回临时内存分配。

void syncDefaultStream(int device)

将 CPU 与给定设备的默认流同步。

void syncDefaultStreamCurrentDevice()

为当前设备调用 syncDefaultStream。

std::vector<cudaStream_t> getAlternateStreamsCurrentDevice()

为当前设备调用 getAlternateStreams。

cudaStream_t getAsyncCopyStreamCurrentDevice()

为当前设备调用 getAsyncCopyStream。