代码如上,我主要是写LBM代码的
已经对所有的数据类型指定计算精度了(双精度计算)
电脑配置:
gpu: RTX4050
cpu: i713700HX
昨天写出来的代码总是报错,查了好久原因
终于发现了两个惊人的现象(或者说是两个BUG)
第一、数值计算精度会随着for设置循环的不同而改变
如上图采用以下代码一个for循环并行全部,计算精度就很低,会导致我程序不收敛
for i, j, k in ti.ndrange((0, nx), (0, ny), (0, nz))
计算结果如下
采用以下代码计算精度就会提高,两个for 循环运行
for i in range(0, nx):
for j, k in ti.ndrange((0, ny), (0, nz)):
计算结果如下
以上结果都是建立在cpu计算的情况下的,ti.init(arch=ti.cpu, default_fp=ti.f64)
第二、cpu和gpu算出来的结果不一样
当我将使用ti.init(arch=ti.gpu, default_fp=ti.f64)两个for 循环运行,计算精度有开始下降了,
最后会又会不收敛,结果如下
而且这些不收敛的计算每次结果还会不一样!!!
第二次cpu计算结果如下
第二次gpu计算结果如下