【发布时间】:2021-02-04 10:42:37
【问题描述】:
我正在尝试使用指针将数组的非零元素复制到不同的数组。我尝试在thrust copy_if: incomplete type is not allowed 中实现该解决方案,但结果数组中的值为零。这是我的代码: 这是谓词函子:
struct is_not_zero
{
__host__ __device__
bool operator()( double x)
{
return (x != 0);
}
};
这就是使用copy_if函数的地方:
double out[5];
thrust::device_ptr<double> output = thrust::device_pointer_cast(out);
double *test1;
thrust::device_ptr<double> gauss_res(hostResults1);
thrust::copy_if(thrust::host,gauss_res, gauss_res+3,output, is_not_zero());
test1 = thrust::raw_pointer_cast(output);
for(int i =0;i<6;i++) {
cout << test1[i] << " the number " << endl;
}
其中 hostresult1 是内核的输出数组。
【问题讨论】:
-
将
device_ptr与thrust::host执行策略一起使用是没有意义的。 -
@RobertCrovella 当我删除推力::主机时出现此错误:在抛出 'thrust::system::system_error what() 的实例后调用终止:copy_if 无法同步:非法内存访问遇到了
-
您无法使用主机数据创建
device_ptr,因此您显示的前两行代码已损坏:double out[5]; thrust::device_ptr<double> output = thrust::device_pointer_cast(out);不要混淆主机数据和主机算法,带有设备数据和设备算法。 -
@RobertCrovella 那么我应该在创建设备指针之前执行 cudaMalloc((void**)output) 吗?
-
当您提供不完整的代码时,我只能猜测您要做什么。看看答案猜一猜。