2

我正在使用推力来查找数组的总和,c,但我不断收到编译器错误“错误:表达式必须具有类类型”

float tot = thrust::reduce(c.begin(), c.end());

这是不起作用的代码行,c 是一个浮点数组,是其他 2 个数组的元素总和。

干杯

4

3 回答 3

5

可以将指针传递给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
于 2012-04-16T20:33:56.653 回答
4

c 应该是一个thrust类型,例如thrust::host_vectoror thrust::device_vector

于 2012-04-16T16:35:32.623 回答
3

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;
}
于 2012-04-16T16:48:27.453 回答