我正在使用推力来查找数组的总和,c,但我不断收到编译器错误“错误:表达式必须具有类类型”
float tot = thrust::reduce(c.begin(), c.end());
这是不起作用的代码行,c 是一个浮点数组,是其他 2 个数组的元素总和。
干杯
我正在使用推力来查找数组的总和,c,但我不断收到编译器错误“错误:表达式必须具有类类型”
float tot = thrust::reduce(c.begin(), c.end());
这是不起作用的代码行,c 是一个浮点数组,是其他 2 个数组的元素总和。
干杯
可以将指针传递给thrust::reduce
. 如果你有一个指向主机内存中数组的指针,你可以这样做:
float tot = thrust::reduce(c, c + N); // N is the length of c in words
如果您的指针指向设备内存中的数组,则需要将其转换为thrust::device_ptr
第一个:
thrust::device_ptr<float> cptr = thrust::device_pointer_cast(c);
float tot = thrust::reduce(cptr, cptr + N); // N is the length of c in words
c 应该是一个thrust
类型,例如thrust::host_vector
or thrust::device_vector
。
Thrust github 页面上有一个关于thrust::reduce 的示例。您不能在普通的旧数组上调用 .begin() ,因为它不是对象的实例,即它没有意义。例如,就像在下面的代码中对数组“b”调用 .begin() 一样。
int main(void)
{
thrust::host_vector<float> a(10);
float b[10];
thrust::fill(a.begin(), a.end(), 1.0);
thrust::fill(b, b+10, 2.0);
cout << "a: " << thrust::reduce(a.begin(), a.end()) << endl;
cout << "b: " << thrust::reduce(b, b+10) << endl;
return 0;
}