我推荐您访问以下页面http://code.google.com/p/thrust/wiki/QuickStartGuide#Vectors。请看第二段说明
另请注意,可以访问device_vector的各个元素 使用标准括号表示法。但是,因为每一个 访问需要调用cudaMemcpy,它们应该谨慎使用。 我们稍后会看一些更有效的技术。
我搜索了整个文档,但我找不到更有效的技术。有谁知道最快的方法吗?即如何最快地访问主机上的设备向量/设备指针?
答案 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;