主机上运行的自定义函数的Thrust结果不正确
Incorrect results from Thrust for custom functor run on host
当我试图实现任何函子时,都会得到糟糕的结果。例如,我尝试了一个类似于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
这似乎是正确的。如果您没有看到相同的结果,那么这要么是您正在使用的工具链的特定问题,要么是您没有告诉我们的其他事情导致了问题。
编辑:它出现在您在调试模式下使用nvcc构建的注释中,众所周知,这不适用于Thrust。我建议只发布构建代码。如果问题仍然存在,这可能是给Thrust开发人员的错误报告,而不是堆栈溢出问题。
相关文章:
- 密码登录程序将永远循环并显示不正确的结果
- 特征 LLT 模块给出不正确的结果?
- 计算幂级数的数学结果不正确
- wcslen() 在使用编译指示包时返回不正确的结果
- 使用动态分配的数组进行矩阵乘法;结果不正确
- CMake 查找特征不正确的结果
- 将函数的地址转换为UINTPTR_T给我不正确的结果
- 使用 C++ 中的运算符重载显示不正确的结果
- 简单的程序比较阵列运行但给出不正确的结果
- 为什么隐式类型转换在此代码中结果不正确
- 使用Boost Polygon的减法结果不正确
- 使用SSE内在时的结果不正确
- 嵌套循环语句结果不正确
- 由于 istream 中的杂散 导致 get () 的结果不正确,但 scanf() 或 cin 则不然
- 主机上运行的自定义函数的Thrust结果不正确
- 使用cblas_dgemv()计算矩阵向量乘积的结果不正确
- 数学库三角函数C++结果不正确
- GLSL -从阴影立方体图中检索值时结果不正确
- 当 T 声明 T::T(T&) 时,std::is_trivially_constructible<T、T&>::value 的结果不正确
- 对于循环数组迭代,if循环测试索引是否为真/假,计算结果不正确