当我尝试实现任何仿函数时,我得到了不好的结果。例如,我尝试了一个类似于thrust::negate<T>
以下的否定函子,这是一个使用内置否定函子产生良好结果的示例代码:
int data[10] = {-5, 0, 2, -3, 2, 4, 0, -1, 2, 8};
int out[10];
thrust::negate<int> op;
thrust::transform(data, data + 10, out, op);
out
变量变成{5, 0, -2, 3, -2, -4, 0, 1, -2, -8}
了,但是当我实现我自己的仿函数时
struct NegateFunctor{
__host__ __device__
int operator()(const int &val) const {
return -val;
}
};
并将其称为thrust::transform(data, data + 10, out, NegateFunctor())
out
包含{-858993460, -858993460, -858993460, -858993460, -858993460, -858993460, -858993460, -858993460, -858993460, -858993460}
我在 64 位机器上使用 Visual Studio 2010、5.0 CUDA。
谢谢