OpenFOAM在鲲鹏平台上编译通过但算例结果与x86不一致
收藏回复举报
OpenFOAM在鲲鹏平台上编译通过但算例结果与x86不一致
t('forum.solved') 已解决
发表于2026-04-01 21:44:10
0 查看

我在将OpenFOAM移植到鲲鹏920服务器上时遇到了一个比较棘手的问题。编译过程本身还算顺利,用的是一站式开发套件里推荐的毕昇编译器,依赖库也都装好了,没有报错。但是跑标准算例做验证的时候,发现计算结果和原先在x86平台上跑出来的对不上。具体来说,同样是motorBike这个算例,边界层附近的压力分布有明显的差异,残差曲线的收敛轨迹也不一样,虽然在同一个量级上,但数值偏差超出了我们项目允许的容差范围。

我确认过两边的算例设置文件完全一致,网格也是同一套,求解器和湍流模型都没变。为了排除浮点运算差异的影响,我试着把毕昇编译器换成了GCC,也用了一样的优化级别,但结果偏差依然存在。用单精度和双精度分别编译也试过了,情况类似。

我怀疑是不是某些底层数学库的实现差异导致的,比如三角函数或者指数运算在ARM和x86上的精度舍入方式不同,但这类差异累积起来应该不至于让压力分布出现系统性偏移。也考虑过MPI通信的非确定性,但跑串行版本的单核算例时,结果依然和x86的串行结果对不上,所以通信应该不是主因。

想请教一下这种计算结果不一致的问题在鲲鹏平台上应该如何定位和解决,是编译选项还需要额外调整,还是说OpenFOAM本身某些与架构相关的宏定义在ARM上需要手动开启?

我要发帖子