从C ++访问device_vector的最佳方法

时间:2014-01-30 12:13:10

标签: c++ cuda thrust nvcc

我想知道从主机c ++代码访问推力device_vector的最佳方法是什么?我编写了一个cuda API来做基本矢量代数,因为我想构建一个解释器,类似于Matlab / Octave,其中向量存储在GPU上,可以轻松地进行计算,如reduce,reduce_by_key等。

我正在考虑从device_vector的分配中获取原始指针,并将其存储在具有关联变量名称的哈希表中,但是想知道是否有更好的解决方案。

1 个答案:

答案 0 :(得分:1)

如果您对性能感兴趣,则不应尝试直接从主机代码访问thrust::device_vector。首先将其复制到主变量。

如果您确实直接使用主机代码中的device_vector,那么它是合法的,但会在generate a device->host copy operation"引导下“#34}。启用此功能。批发数据访问速度非常慢。

推送原始指针没用,因为在主机代码中取消引用这些指针会产生seg错误。

虽然与您的问题没有直接关系,但您可能会在newton中找到一些有趣的代码,这是一组用于推力的表达模板。