在推力矢量类型上创建常规CUDA内核

时间:2011-11-06 06:32:12

标签: cuda thrust

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

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

谢谢,igal!

1 个答案:

答案 0 :(得分:1)

  

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

您有两个选择:

  1. 您可以使用仿函数和通用算法。详情in manual(pp 18-22)。我也可以建议看近zip_iterator
  2. 如果你有非标准算法,或者你已经有了 内核,然后将矢量转换为raw_pointermanual第11页)将更加简单。
  3.   

    如果我在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);
    

    来自manual的代码。 12。