CUDA计算精度问题

程序峰峰 2018-06-24 10:32:21
为什么程序用CUDA并行计算得到的结果和在CPU上得到的结果有一定的差异(虽然不大),而且多次调用核函数后用CUDA得到的结果是一堆0,求大佬们指点
...全文
1202 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
YCMyTot 2018-07-05
  • 打赏
  • 举报
回复
寄存器或者共享内存不够用,试下多卡+openmp?
程序峰峰 2018-06-29
  • 打赏
  • 举报
回复
谢谢各位大佬,问题解决了,原因是核函数里面直接定义了一个大数组,导致寄存器不够用,我把数组定义为设备的全局变量就可以了,而且误差就没了。。但是计算速度受到了影响。请问如果寄存器不够用(共享内存也不够用)的话,有没有好的处理方法? CUDA新手,求大佬们指导
xinxin0998 2018-06-28
  • 打赏
  • 举报
回复
在申请内存的时候要注意根据类型大小申请,例如sizeof(int)*N,sizeof(float)*N或者sizeof(double)*N,一定要和你使用的类型一一对应,在核函数中进行引用的时候,如果传入的指针类型是float,那就按照1个float数来计算地址偏移,如果传入的类型是void*或者char*,要按照4个字节数计算偏移
xinxin0998 2018-06-28
  • 打赏
  • 举报
回复
看看是否存在地址超出范围的情况
ywx20170810 2018-06-27
  • 打赏
  • 举报
回复
差异肯定会有点,一般都自动四舍五入了
程序峰峰 2018-06-27
  • 打赏
  • 举报
回复
改成double还是有差异 然后我发现增大传入到GPU的数据大小后,核函数就不执行了,导致数据全是0,必须减小导入到GPU里的数据大小才能正常运行,这是什么原因呀,我导入的数据大小还不到10M,但是显存是4G(程序在linux里跑的)
YCMyTot 2018-06-26
  • 打赏
  • 举报
回复
试下double?

579

社区成员

发帖
与我相关
我的任务
社区描述
CUDA™是一种由NVIDIA推出的通用并行计算架构,该架构使GPU能够解决复杂的计算问题。 它包含了CUDA指令集架构(ISA)以及GPU内部的并行计算引擎。
社区管理员
  • CUDA编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧