如何解决关于推力 remove_if 的问题
我有一些关于如何使用推力的 remove_if 的重要问题
然后我删除 0
int *new_end = thrust::remove_if(A,A + N,is_zero());
我应该得到 {1,3}
但我怎么知道结果有 4 个元素?
-
我尝试使用
thrust::remove_if(d_data,d_data+6,is_zero<int>());
其中 d_data
是 int * d_data;
但内存分配在设备内存中(使用 cudamalloc
但它给出了分段错误。这通常发生在尝试从主机访问设备内存时. 所以这让我想到。我试图将每个操作都保留在设备内存中(最后只是下载到主机)。推力::remove_if 是否首先将数据下载到主机?
编辑: 在这个
int * d_data;
cudamalloc((void**)&d_data,6 * sizeof(int));
cudamemcpy(d_data,h_data,6 * sizeof(int),cudamemcpyHostToDevice);
thrust::device_ptr<int> dev_ptr(d_data);
thrust::remove_if(dev_ptr,dev_ptr+6,is_zero<int>());
//thrust::remove_if(d_data,is_zero<int>()); //--> segmentation fault
你可以看到我用 d_data
包裹了 device_ptr
。如果我这样做,它可以正常工作,但是如果我尝试在 d_data
本身上使用 remove_if,它会崩溃
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。