taichi中同样的代码,为什么gpu会有累积误差

我在用mpm计算一种弹塑性材料的初始地应力平衡,预先给定了颗粒内部的初始应力与外力场,然而用cpu计算时能立刻平衡,但是用gpu计算时,经过一定的计算时间,网格上的数值会累积出一定的误差,使得颗粒内部的应力计算错误。在这个算例中用的都是双精度。

cpu计算结果(地应力已平衡):

gpu计算结果(应力错误):

由于代码比较长,无法提供一个比较小的复现版本,请问一般有什么方法来解决类似的问题呢?

MPM 中包含了方程求解的步骤的话,可能把方程求解的部分隔离开来比较一下结果,我看这图是求解有点发散的感觉。。?

看起来有可能是并行写的有点问题?cpu并行度不高可能不明显

好的谢谢包老师!

确实是并行的问题, 谢谢!

1 个赞

请问这种误差是正常的嘛

import taichi as ti
ti.init(arch=ti.gpu, default_fp=ti.f64)

a = ti.Vector([24.2, 24.2, 24.2])
b = ti.Vector([0.1, 0.1, 0.1])

print(a/b)   
# output ====> [241.999997, 241.999997, 241.999997]

print(a*(1/b))   
# output ====> [242, 242, 242]

感觉误差太大了

hello,我们测试的结果没有出现这个问题。你可以试试使用最近的 taichi 版本么?如果仍然出现这个问题的话,可以贴上你的机器和环境信息?

请问具体是什么并行问题呢?

这是浮点数计算的问题,你用python自带的浮点数计算也是一样的结果。