摘要 解读 GPU和CPU计算上的精度差异:GPU 的 3个输出的相对误差分别高达 62.5%、50%、62.5%。
例1. 计算下列两个矩阵的乘积:
显然,其结果为第一列:
这个结果是准确的。
例2. 已知上面 3 个矩阵是由下面代码产生或输出:
那么输出还是准确的吗?即第3个矩阵的 3个元素与第2个矩阵的第1行的 3个元素完全相同吗?(看起来完全相同)。
答案是:不知道,不清楚。
因为它们均是单精度浮点数,并且3个数分别只输出了 4位、5位、4位有效数字。后面的数字是否一致?不得而知。
例3. 若在GPU上执行下列代码:
即将第1个行向量进行扰动:
而第二个矩阵不变,则输出为
这时,3个数的最后1位数字均是错误数字。它们分别有 3位、4位、3位正确有效数字。
考虑到单精度数对应8位十进制数,所以可以认为 3个数分别有错误数字 5位、4位、5位,它们的相对误差分别为 5/8=62.5%、4/8=50%、5/8=62.5%。
点评:这个GPU的错误相当厉害了。它不是仅仅错了 1 位数字。