问题 Thrust:如何从主机阵列创建device_vector?


我从主机上的库中获取一些数据作为指向数组的指针。如何创建在设备上保存此数据的device_vector?

int* data;
int num;
get_data_from_library( &data, &num );

thrust::device_vector< int > iVec; // How to construct this from data?

9571
2018-02-29 08:13


起源

可能重复 是否有更好,更快的方法使用推力从CPU内存复制到GPU? - talonmies


答案:


按照 这个答案, 所有你需要的是:

int* data;
int num;
get_data_from_library( &data, &num );

thrust::device_vector< int > iVec(data, data+num);

12
2018-02-29 08:37



Talonmies:谢谢!我不知道Thrust可以检测给定指针是否位于主机或设备空间中并且必要时起作用。 - Ashwin Nanjappa
@Ashwin:不可以。如果要将设备内存中的指针传递给thrust :: vector构造函数,则需要使用thrust :: device_ptr。这就是设备和主机指针在Thrust中的区别。 - talonmies
Talonmies:但是,你上面给出的答案并没有使用device_ptr而我尝试了它并且它工作正常。 - Ashwin Nanjappa
@Ashwin:是的,因为你的指针是 主办 指针。如果,在你的例子中, data 是一个设备指针,它会失败。在这种情况下,您需要将设备指针包装在一个 thrust::device_ptr 和构造函数 device_vector 接着就,随即。构造函数假设裸指针在主机内存中,并且a device_pointer 在设备内存中。这里没有魔力。 - talonmies
Talonmies:啊,我明白了。我在想什么 魔法 它用来区分这两者。谢谢! :-) - Ashwin Nanjappa