【问题标题】:Thrust: How to create device_vector from host array? [duplicate]推力:如何从主机阵列创建 device_vector? [复制]
【发布时间】:2012-03-18 17:32:43
【问题描述】:

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

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

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

【问题讨论】:

    标签: cuda thrust


    【解决方案1】:

    根据this answer,您只需要:

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

    【讨论】:

    • Talonmies:谢谢!我不知道 Thrust 可以检测给定指针是否位于主机或设备空间中并根据需要采取行动。
    • @Ashwin:不能。如果要将设备内存中的指针传递给thrust::vector 构造函数,则需要使用thrust::device_ptr。这就是 Thrust 中设备指针和主机指针的区别。
    • Talonmies:但是,你上面给出的答案没有使用 device_ptr,我试过了,效果很好。
    • @Ashwin:是的,因为您的指针是 host 指针。如果在您的示例中,data 是设备指针,它将失败。在这种情况下,您需要将设备指针包装在 thrust::device_ptr 中,并用它构造 device_vector。构造函数假定裸指针在主机内存中,而device_pointer 在设备内存中。这里没有魔法。
    • Talonmies:啊,我明白了。我想知道它用什么 magic 来区分这两者。谢谢! :-)
    猜你喜欢
    • 2019-03-18
    • 2013-01-04
    • 2018-11-25
    • 2020-10-18
    • 2015-05-11
    • 2020-12-09
    • 2016-10-29
    • 2023-01-19
    相关资源
    最近更新 更多