faiss::gpu::StackDeviceMemory 类

class StackDeviceMemory

设备内存管理器,用于从单个设备的内存区域中提供临时内存分配

公共函数

StackDeviceMemory(GpuResources *res, int device, size_t allocPerDevice)

分配一个新的我们管理的内存区域。

StackDeviceMemory(int device, void *p, size_t size, bool isOwner)

管理特定设备的内存区域,无论是否拥有所有权

~StackDeviceMemory()
int getDevice() const
void *allocMemory(cudaStream_t stream, size_t size)

所有请求的分配都应该是 16 字节的倍数。

void deallocMemory(int device, cudaStream_t, size_t size, void *p)
size_t getSizeAvailable() const
std::string toString() const

保护属性

int device_

我们的设备。

Stack stack_

内存栈。

struct Range

先前的分配范围和需要同步的流

公共函数

inline Range(char *s, char *e, cudaStream_t str)

公共成员

char *start_
char *end_
cudaStream_t stream_
struct Stack

公共函数

Stack(GpuResources *res, int device, size_t size)

构造函数,通过 cudaMalloc 分配内存。

~Stack()
size_t getSizeAvailable() const

返回在不调用 cudaMalloc 的情况下,有多少大小可用于分配。

char *getAlloc(size_t size, cudaStream_t stream)

获取一个分配;保证所有分配都是 16 字节对齐的。

void returnAlloc(char *p, size_t size, cudaStream_t stream)

返回一个分配。

std::string toString() const

返回堆栈状态。

公共成员

GpuResources *res_

我们的 GpuResources 对象。

int device_

此分配所在的设备。

char *alloc_

我们的临时内存缓冲区分配在何处;我们从此缓冲区偏移 16 字节开始分配。

size_t allocSize_

我们分配的总大小。

char *start_

我们的临时内存区域;[start_, end_) 是有效的。

char *end_
char *head_

Stack 在 [start, end) 内的头部。

std::list<Range> lastUsers_

堆栈上先前最后使用分配的用户的列表,用于可能的同步目的。

size_t highWaterMemoryUsed_

从临时缓冲区中使用的内存的高水位线是什么?