新手求教CPU与GPU数据储存

  • 1 replies
  • 839 views
新手求教CPU与GPU数据储存
« 于: 十一月 03, 2022, 11:38:56 am »
请问一下,我在CPU的C++程序(大型程序中间的一步)中使用double型变量储存并输出1.250000-0.750000得到的值为0.500018 ,如果写一个测试的c++小程序,只计算这个减法不管是double或float都输出的是0.500000  ,但是在GPU端(大型程序中的一步)用float型变量得到的是0.500000 ,怎么结果会差这么多呢

Re: 新手求教CPU与GPU数据储存
« 回复 #1 于: 十一月 03, 2022, 11:49:09 am »
请问一下,我在CPU的C++程序(大型程序中间的一步)中使用double型变量储存并输出1.250000-0.750000得到的值为0.500018 ,如果写一个测试的c++小程序,只计算这个减法不管是double或float都输出的是0.500000  ,但是在GPU端(大型程序中的一步)用float型变量得到的是0.500000 ,怎么结果会差这么多呢

考虑到你给出的例子中的两个数值(1.25和0.75), 正巧在二进制小数里面,都可以被精确表示(1.01'b和0.11'b),他们两个的相减,并不存在任何in-exact的情况,必定会得到精确的0.5的(这个数值也可以被精确表示)。

所以你在某个大型的程序中发现运算得到了其他值,而单纯的提取出来在CPU和GPU算都能得到精确值,则必然是你的"大型程序"中途混杂了其他运算步骤,干扰了你对结果的观测,这是我感觉可能的唯一理由。