Dlpack 互操作#

group DLPack

函数

std::unique_ptr<table> from_dlpack(DLManagedTensor const *managed_tensor, rmm::cuda_stream_view stream = cudf::get_default_stream(), rmm::device_async_resource_ref mr = cudf::get_current_device_resource_ref())#

将 DLPack DLTensor 转换为 cudf 表。

DLTensor 的 device_type 必须是 kDLCPUkDLCudakDLCUDAHost,并且 device_id 必须与当前设备匹配。ndim 必须设置为 1 或 2。dtype 必须有 1 个通道,并且位大小必须与支持的 cudf::data_type 匹配。

注意

此函数不会删除托管张量。

抛出:

cudf::logic_error – 如果 DLTensor 的任何字段不受支持

参数:
  • managed_tensor – 一个 1D 或 2D 列主序(Fortran 顺序)张量

  • stream – 用于设备内存操作和内核启动的 CUDA 流

  • mr – 用于分配返回表的设备内存的设备内存资源

返回:

包含张量数据副本的表

DLManagedTensor *to_dlpack(table_view const &input, rmm::cuda_stream_view stream = cudf::get_default_stream(), rmm::device_async_resource_ref mr = cudf::get_current_device_resource_ref())#

将 cudf 表转换为 DLPack DLTensor。

所有列必须具有相同的数据类型,且此类型必须是数值类型。列可以是可空类型,但空值数量必须为零。如果输入表为空或行数为零,结果将为 nullptr。

注意

必须使用返回的 DLManagedTensordeleter 方法来释放为张量分配的内存。

抛出:

cudf::logic_error – 如果数据类型不相等或不是数值类型,或者任何列的空值数量非零

参数:
  • input – 要转换为 DLPack 的表

  • stream – 用于设备内存操作和内核启动的 CUDA 流

  • mr – 用于分配返回的 DLPack 张量设备内存的设备内存资源

返回:

包含表数据副本的 1D 或 2D DLPack 张量,或 nullptr