CUDA:cpu和gpu之间的不同答案减少

用户名

我收到了这个非常奇怪的错误。我使用推力缩减对矩阵中的所有元素求和。对于大多数数据来说,它运行得很好,但是在一组数据上却出错了。

码:

  lbfgsfloatval_t sum(const DeviceVector& A){
    thrust::device_ptr<lbfgsfloatval_t> ptr(A.getPtr());
    thrust::device_vector<double> A_p(ptr, ptr + A.rows()*A.cols());
    lbfgsfloatval_t sums = 0.0;

    // reduce on host
    for(int i = 0; i < A.rows()*A.cols();i++)
        sums += A_p[i];
    // reduce on device
    lbfgsfloatval_t res = thrust::reduce(A_p.begin(), A_p.end());
    cout << "cpu: " << sums << endl; 
    cout << "gpu: " << res  << endl;  
    return res;
 }

注意第二组出了错。

输出:

cpu: -568.691
gpu: -568.691

cpu: 3.4972e-14
gpu: 1.40998e-14

cpu: 0.234375
gpu: 0.234375

我还尝试过不构建推力:: device_vector,而是改用原始指针。输出相同。我也尝试了cublas dot产品。输出相同。

我使用matlab确认上述cpu结果正确。

发生了什么事?这是GPU上的下溢吗?谢谢!

我只能推测出可能出问题的地方,但我会认为这是下溢(或者具体地说,CPU和GPU处理IEEE-754非规范化数字的方式不同)

http://en.wikipedia.org/wiki/Denormal_number

基本上,CPU按照IEEE-754标准对其进行处理,尽管效率很低。

另一方面,GPU通常将它们等于0。我不知道是否有CUDA方式强制CPU也出于开发目的而刷新非规范化的数字(我主要使用OpenCL),但是C / C ++方式通常是

_MM_SET_FLUSH_ZERO_MODE(_MM_FLUSH_ZERO_ON);

或者,在gcc中,使用进行编译-ffast-math

请检查以下SO问题:为什么将0.1f更改为0会使性能降低10倍?

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

GPU和CPU之间的区别

来自分类Dev

Theano对CPU和GPU的不同结果

来自分类Dev

为什么cpu和gpu的结果不同?

来自分类Dev

CUDA对CPU和GPU具有相同功能

来自分类Dev

CUDA对于CPU和GPU具有相同的功能

来自分类Dev

@ cuda.jit和@jit之间的区别(target ='gpu')

来自分类Dev

在CPU和GPU之间同步静态分配的结构实例

来自分类Dev

在CPU和GPU之间以纹理形式传递数据

来自分类Dev

PyTorch渐变对于CUDA和CPU具有不同的形状

来自分类Dev

CUDA C-使用clock()和cudaEvent的CPU和GPU执行时间,对吗?

来自分类Dev

CPU和GPU的差异

来自分类Dev

CPU和北桥之间以不同的时钟速度进行通信?

来自分类Dev

cuda: different answer between cpu and gpu reduce

来自分类Dev

cuda cpu函数-gpu内核重叠

来自分类Dev

在Numpy和手动计算之间获得不同的答案

来自分类Dev

用于CUDA计算的工作站GPU和台式机GPU之间的性能差异是什么?

来自分类Dev

使用CUDA在与GPU之间复制BIG数据

来自分类Dev

CPU SIMD和GPU SIMD?

来自分类Dev

为什么在CPU和GPU内存之间的数据交换这么慢?

来自分类Dev

对于tensorflow 2.x,如何在CPU和GPU版本之间切换?

来自分类Dev

为什么在CPU和GPU内存之间的数据交换这么慢?

来自分类Dev

异步CPU读取和GPU + CPU计算

来自分类Dev

XCode预编译的OpenCL在不同的Mac OS版本和交替的CPU / GPU上崩溃

来自分类Dev

XCode预编译的OpenCL在不同的Mac OS版本和交替的CPU / GPU上崩溃

来自分类Dev

减少CUDA

来自分类Dev

是否有针对CUDA-GPU或MPI-CPU + CUDA-GPU的基准?

来自分类Dev

Cuda:将一维数组从 CPU 复制到 GPU

来自分类Dev

CUDA中不同内核之间的设备变量

来自分类Dev

减少基线和editText底部之间的空间

Related 相关文章

热门标签

归档