cpu和gpu计算结果不一致

请各位高手,抽空给出建议,小弟拜谢~~
问题是这样的,我这段时间一直在编写格子代码,目前ti.cpu可以进行计算,但是等计算一段时间后,长时间计算后,结果就会出现NAN这样的错误。(前面我已经做了代码验证,程序应该没有编写错误)但是,采用ti.gpu进行计算,则一开始结果就有问题,出现了NAN。代码反复看了好几遍,一直折腾,但一直排除不出问题,我现呈上我的源代码和input文件,请各位高手指导。
PS:不太清楚怎么上传压缩文件,我只能将simulation.7Z后缀改为pdf格式上传,请大佬下载完之后更改后缀名,即可打开。
simulation.pdf (8.8 KB)

Hi @zealon , 建议你把代码上传到 github 上,论坛里贴上代码链接即可。这样可以方便大家查看。

@zealon Hi,这样直接上传一个 .zip 文件在github 上和在论坛上贴也没啥区别~

我的意思是你可以把代码的整个目录放在 github 上,点击 upload files 就可以。这样大家可以在网页里面浏览你的代码,而不用再下载到本地以后解压。
在提问题的时候,方便其他人快速定位到你的问题是很重要的。

已更新,感谢您的建议

你的代码实在有点复杂,不太容易找到问题。不过我用 taichi v1.3.0 在 gpu=vulkan 后端运行,输出的 Output 文件夹里面直到 35000 文件中都没有出现 nan,所以不知道你的 taichi 版本和 gpu 后端是啥?

根据您的回复,我把原来v1.2升级到v1.3后,gpu运算可以进行了,至少不是像v1.2那会儿一开始计算结果就出现Nan了。假如采用代码中的小模型的话,执行结束所需步数小,因此可以完整执行完。但是当我把计算模型网格数加大后,在cuda环境下,我开展了两次模拟,两次参数都完全一致,但依旧是开始出现Nan的步数不一致。一次是在34w步出现Nan,一次是在28w步出现Nan,这真的让我很困惑,不知道到底是哪里出了问题。
新的代码和input文件,我又更新到了github,期待您的建议

你可以提供一个最小的可复现的例子不?你的这个代码还是挺复杂的。

这个恐怕不好弄,这些代码都得用上。我现在就是困惑为啥同样的代码和环境,结果还不一样呢?就是每次出现Nan的步数不一致。而且都是在较大步长下才会出现。

我把精度改为双精度后,目前来看,这个问题应该是得到解决。
但是同样的,对于显存有了更高要求,我打算更新下设备,后续再看看会不会出问题,
我随时在这里进行反馈。

2 Likes