CUDA 封装器

模块: polygraphy.cuda

class MemcpyKind[source]

基类: object

枚举不同类型的复制操作。

HostToHost = c_int(0)

从主机内存复制到主机内存

HostToDevice = c_int(1)

从主机内存复制到设备内存

DeviceToHost = c_int(2)

从设备内存复制到主机内存

DeviceToDevice = c_int(3)

从设备内存复制到设备内存

class Cuda[source]

基类: object

注意:不要手动构造此类。请使用 wrapper() 函数来获取全局封装器。

封装器,用于公开底层 CUDA 功能。

malloc(nbytes)[source]

在 GPU 上分配内存。

参数:

nbytes (int) – 要分配的字节数。

返回:

已分配区域的内存地址,即设备指针。

返回类型:

int

抛出:

PolygraphyException – 如果在分配期间遇到错误。

free(ptr)[source]

释放 GPU 上分配的内存。

参数:

ptr (int) – 内存地址,即设备指针。

抛出:

PolygraphyException – 如果在释放期间遇到错误。

memcpy(dst, src, nbytes, kind, stream_ptr=None)[source]

在主机和设备内存之间复制数据。

参数:
  • dst (int) – 目标内存地址,即指针。

  • src (int) – 源内存地址,即指针。

  • nbytes (int) – 要复制的字节数。

  • kind (MemcpyKind) – 要执行的复制类型。

  • stream_ptr (int) – CUDA 流的内存地址,即指针。如果未提供,则执行同步复制。

抛出:

PolygraphyException – 如果在复制期间遇到错误。

wrapper()[source]

返回全局 Polygraphy CUDA 封装器。

返回:

全局 CUDA 封装器。

返回类型:

Cuda

class Stream[source]

基类: object

CUDA 流的高级封装器。

ptr

底层 CUDA 流的内存地址

类型:

int

__exit__(exc_type, exc_value, traceback)[source]

释放底层 CUDA 流。

free()[source]

释放底层 CUDA 流。

您还可以使用上下文管理器来管理流的生命周期。例如

with Stream() as stream:
    ...
synchronize()[source]

同步流。

class DeviceView(ptr, shape, dtype)[source]

基类: object

GPU 内存区域的只读视图。

参数:
  • ptr (int) – 指向内存区域的指针。

  • shape (Tuple[int]) – 区域的形状。

  • dtype (DataType) – 区域的数据类型。

ptr

底层 GPU 内存的内存地址

类型:

int

shape

设备缓冲区的形状

类型:

Tuple[int]

property dtype

设备缓冲区的数据类型

类型:

DataType

property nbytes

内存区域中的字节数。

copy_to(host_buffer, stream=None)[source]

从此设备缓冲区复制到提供的主机缓冲区。

参数:
  • host_buffer (Union[numpy.ndarray, torch.Tensor]) – 要复制到的主机缓冲区。缓冲区在内存中必须是连续的(参见 np.ascontiguousarray 或 torch.Tensor.contiguous),并且足够大以容纳设备缓冲区。

  • stream (Stream) – Stream 实例。如果未提供流,则执行同步复制。

返回:

主机缓冲区

返回类型:

np.ndarray

numpy()[source]

创建一个新的 NumPy 数组,其中包含此设备缓冲区的内容。

返回:

新创建的 NumPy 数组。

返回类型:

np.ndarray

class DeviceArray(shape=None, dtype=None)[source]

基类: DeviceView

GPU 上的数组。

参数:
  • shape (Tuple[int]) – 缓冲区的初始形状。

  • dtype (DataType) – 缓冲区的数据类型。

copy_to(host_buffer, stream=None)

从此设备缓冲区复制到提供的主机缓冲区。

参数:
  • host_buffer (Union[numpy.ndarray, torch.Tensor]) – 要复制到的主机缓冲区。缓冲区在内存中必须是连续的(参见 np.ascontiguousarray 或 torch.Tensor.contiguous),并且足够大以容纳设备缓冲区。

  • stream (Stream) – Stream 实例。如果未提供流,则执行同步复制。

返回:

主机缓冲区

返回类型:

np.ndarray

property dtype
property nbytes

内存区域中的字节数。

numpy()

创建一个新的 NumPy 数组,其中包含此设备缓冲区的内容。

返回:

新创建的 NumPy 数组。

返回类型:

np.ndarray

ptr

底层 GPU 内存的内存地址

类型:

int

shape

设备缓冲区的形状

类型:

Tuple[int]

static raw(shape=None)[source]

创建指定形状的无类型设备数组。

参数:

shape (Tuple[int]) – 缓冲区的初始形状,以字节为单位。例如,形状为 (4, 4) 将分配一个 16 字节的数组。

返回:

原始设备数组。

返回类型:

DeviceArray

resize(shape)[source]

调整数组大小或将其重塑为指定的形状。

如果已分配的内存区域足够大,则不会执行重新分配。

参数:

shape (Tuple[int]) – 新形状。

返回:

self

返回类型:

DeviceArray

__exit__(exc_type, exc_value, traceback)[source]

释放此 DeviceArray 的底层内存。

free()[source]

释放与此数组关联的 GPU 内存。

您还可以使用上下文管理器来确保内存被释放。例如

with DeviceArray(...) as arr:
    ...
copy_from(host_buffer, stream=None)[source]

从提供的主机缓冲区复制到此设备缓冲区。

参数:
  • host_buffer (Union[numpy.ndarray, torch.Tensor]) – 要从中复制的主机缓冲区。缓冲区在内存中必须是连续的(参见 np.ascontiguousarray 或 torch.Tensor.contiguous),并且不大于此设备缓冲区。

  • stream (Stream) – Stream 实例。如果未提供流,则执行同步复制。

返回:

self

返回类型:

DeviceArray

view(shape=None, dtype=None)[source]

从此 DeviceArray 创建只读 DeviceView。

参数:
  • shape (Sequence[int]) – 视图的所需形状。默认为此数组或视图的形状。

  • dtype (DataType) – 视图的所需数据类型。默认为此数组或视图的数据类型。

返回:

此数组在设备上的数据的视图。

返回类型:

DeviceView