直接在主机上访问设备矢量元素的最快方法

时间:2011-12-28 19:28:45

标签: cuda thrust

我推荐您访问以下页面http://code.google.com/p/thrust/wiki/QuickStartGuide#Vectors。请看第二段说明

  

另请注意,可以访问device_vector的各个元素   使用标准括号表示法。但是,因为每一个   访问需要调用cudaMemcpy,它们应该谨慎使用。   我们稍后会看一些更有效的技术。

我搜索了整个文档,但我找不到更有效的技术。有谁知道最快的方法吗?即如何最快地访问主机上的设备向量/设备指针?

2 个答案:

答案 0 :(得分:3)

指南提到的“更有效的技术”是Thrust算法。与访问单个元素相比,访问(或通过PCI-E总线复制)数百万个元素的效率更高,因为CPU / GPU通信的固定成本是分摊的。

没有比通过调用cudaMemcpy将数据从GPU复制到CPU更快的方法,因为这是CUDA程序员实现任务的最原始方式。

答案 1 :(得分:0)

如果您有一个需要进行更多处理的device_vector,请尝试将数据保留在设备上并使用Thrust算法或您自己的内核对其进行处理。如果您只需要从device_vector中读取一些值,只需使用括号表示法直接访问这些值。如果您需要访问多个值,请将device_vector复制到host_vector并从那里读取值。

thrust::device_vector<int> D;
...
thrust::host_vector<int> H = D;