gpu进行浮点运算的精度问题

zjx1020 2010-07-08 05:54:51
两个矩阵对应位置的数据相乘,然后把每个相乘的结果加起来,∑a(i,j)*b(i,j)
gpu得到的结果与CPU的结果相差很大啊
但是int型数据结果是一样的,这是写的程序问题还是gpu硬件问题?
如果是硬件问题,那这样的运算不是不适合拿gpu来做了?误差太大了。。。
...全文
700 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
a4825966 2011-04-22
  • 打赏
  • 举报
回复
用定点化将浮点数转为整型
meppp 2010-07-21
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 zjx1020 的回复:]

引用 7 楼 skfeng36 的回复:

两者有误差。

那不是大量浮点数据的运算不能用gpu运算了?
我观察了下,貌似7位数正确
8位数不一样
[/Quote]

那看来就是精度的问题,单精度浮点数有效数字位数是7个,双精度为13个左右。
beyond071 2010-07-16
  • 打赏
  • 举报
回复
浮点数累加误差可以使用Kahan summation algorithm算法来减小到可接受的范围
zjx1020 2010-07-12
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 skfeng36 的回复:]

两者有误差。
[/Quote]
那不是大量浮点数据的运算不能用gpu运算了?
我观察了下,貌似7位数正确
8位数不一样
  • 打赏
  • 举报
回复
两者有误差。
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 zjx1020 的回复:]
引用 7 楼 skfeng36 的回复:

两者有误差。

那不是大量浮点数据的运算不能用gpu运算了?
我观察了下,貌似7位数正确
8位数不一样
[/Quote]

要修改算法。注意计算误差。
关于计算误差的详细讨论可以看经典的《计算机程序设计艺术第二版第二卷》。
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 zjx1020 的回复:]
引用 1 楼 l7331014 的回复:

浮点精度问题?大家强制用单精度,看看差别是否很大.
CPU上浮点计算是80位的.而gpu上单精度才32位,双精度才64位.


就是float
差别很大
[/Quote]

限制cpu上的浮点数精度,再试试看。
zjx1020 2010-07-09
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 zenny_chen 的回复:]

上代码。
CPU的以及GPU上的求和乘法
[/Quote]

就是深入浅出cuda第一个例子
你把int改成float就得出结果了
zenny_chen 2010-07-09
  • 打赏
  • 举报
回复
上代码。
CPU的以及GPU上的求和乘法
zjx1020 2010-07-09
  • 打赏
  • 举报
回复
cuda是不是第一分配显存的时候有额外开销的?
还有我cudaMemcpy怎么带宽非常的低,只有SDK bandwidth测得1/4
zjx1020 2010-07-09
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 l7331014 的回复:]

浮点精度问题?大家强制用单精度,看看差别是否很大.
CPU上浮点计算是80位的.而gpu上单精度才32位,双精度才64位.
[/Quote]

就是float
差别很大
  • 打赏
  • 举报
回复
浮点精度问题?大家强制用单精度,看看差别是否很大.
CPU上浮点计算是80位的.而gpu上单精度才32位,双精度才64位.

353

社区成员

发帖
与我相关
我的任务
社区描述
CUDA高性能计算讨论
社区管理员
  • CUDA高性能计算讨论社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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