1

我有一个简单的问题,例如,如果我想使用我在推力矢量上编写的 cuda 内核,我必须将我的 device_vector 转换为常规指针类型吗?还是有其他方法?

哦,另一件事,关于 device_vector 构造,如果我在 GPU 上分配了一个指针,是否有一个快速的 device_vector 接受该指针,或者我应该先将所有内容传输到 CPU,然后才用适当的参数声明我的 device_vector (CPU 分配的变量) ?

谢谢,伊格尔!

4

1 回答 1

1

我想使用我在推力矢量上编写的 cuda 内核,我必须将我的 device_vector 转换为常规指针类型吗?

您有 2 个选项:

  1. 您可以使用函子和通用算法。手册中的详细信息(第 18-22 页)。我也可以建议看看接近zip_iterator
  2. 如果您有一个非标准算法或者您已经有一个内核,那么将向量转换为raw_pointer手册第 11 页)会更简单

如果我在 GPU 上分配了一个指针,是否有一个快速的 device_vector 接受该指针

要使用标准算法,您可以包装指向类 device_ptr 的指针。然后您可以使用与 device_vector 相同的对象。

int N = 10;
// raw pointer to device memory
int * raw_ptr;
cudaMalloc((void **) &raw_ptr, N * sizeof(int));
// wrap raw pointer with a device_ptr
thrust::device_ptr<int> dev_ptr(raw_ptr); // use device_ptr in thrust algorithms
thrust::fill(dev_ptr, dev_ptr + N, (int) 0); // access device memory through device_ptr
dev_ptr[0] = 1;
// free memory
cudaFree(raw_ptr);

手册页中的代码。12.

于 2011-11-06T09:06:50.243 回答