gpt4 book ai didi

c++ - Thrust 对主机上运行的自定义仿函数的结果不正确

转载 作者:行者123 更新时间:2023-11-28 07:28:22 25 4
gpt4 key购买 nike

当我尝试实现任何仿函数时,我得到了不好的结果。例如,我尝试了一个类似于 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。

谢谢

最佳答案

如果我编译并运行您的代码(仅修改以添加 thrust::transform 调用结果的打印):

#include <thrust/transform.h>
#include <thrust/functional.h>

struct NegateFunctor{
__host__ __device__
int operator()(const int &val) const {
return -val;
}
};

int main(int argc, char** argv){
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, NegateFunctor());
for(int i=0; i<10; i++) {
std::cout << data[i] << " " << out[i] << std::endl;
}

return 0;
}

我明白了(操作系统 10.6.7 上的 CUDA 5.0):

$ nvcc thrust_neg2.cu 
$ ./a.out
-5 5
0 0
2 -2
-3 3
2 -2
4 -4
0 0
-1 1
2 -2
8 -8

这似乎是正确的。如果您没有看到相同的结果,那么这是您使用的工具链的特定问题,或者您没有告诉我们的其他原因导致了问题。

编辑:从您在 Debug模式下使用 nvcc 构建的评论中可以看出,众所周知,这不适用于 Thrust。我建议只构建发布代码。如果问题仍然存在,这可能是给 Thrust 开发人员的错误报告,而不是 Stack Overflow 问题。

关于c++ - Thrust 对主机上运行的自定义仿函数的结果不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18287249/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com