【问题标题】:Does exists some thrust::device_vector equivalent library, to use within CUDA kernel?是否存在一些推力::device_vector 等效库,可在 CUDA 内核中使用?
【发布时间】:2011-12-24 14:43:59
【问题描述】:

thrust::device_vector 的自动内存管理非常有用,唯一的缺点是无法在内核代码中使用它。

我在 Internet 上查看过,刚刚找到了诸如推力之类的向量库,它处理来自主机代码的设备内存。是否存在任何用于内核的向量库?如果没有,拥有这样的图书馆是不是一个坏主意?

【问题讨论】:

    标签: c++ vector cuda device thrust


    【解决方案1】:

    这样的库是可以写的,但是效率很低。

    实际上thrust::device_vector 与thrust::host_vector 或std::vector 的区别仅在于它在设备而不是主机上分配内存。大小调整算法相同,在主机上运行。

    调整大小的逻辑非常简单,但涉及分配/释放内存和复制数据。在多线程设置中,每次线程调整向量大小时,您都必须锁定整个向量 - 由于副本的原因,这可能会很长。

    在内核将元素附加到向量的情况下,同步机制实际上会序列化工作,因为一次只允许一个线程调整大小。因此,您的代码将以单个设备处理器的速度运行,减去(相当大的)同步开销。这可能会比 CPU 实现慢很多。

    【讨论】:

      【解决方案2】:

      Thrust 不能在内核中使用,但是,thrust::device_vector 可以用于与内核的接口。此时,可以将指向底层数据的指针传递给内核。例如:

      thrust::device_vector<int> my_int_vector;
      
      my_kernel<<<blocks, threads>>>(thrust::raw_pointer_cast(my_int_vector.data());
      

      根据您的情况,这可能仍然意味着 Thrust 库即使在实现您自己的内核时也很有用。

      【讨论】:

        猜你喜欢
        • 2013-01-04
        • 2015-05-11
        • 1970-01-01
        • 2013-06-08
        • 2018-07-22
        • 2020-10-18
        • 1970-01-01
        • 2012-05-14
        相关资源
        最近更新 更多