是什么导致 MPI_File_write_all 因浮点异常而失败?

What could make MPI_File_write_all fail with Floating point exception?

我打电话给 MPI_File_write_all:

double precision buf[100][100][100];
int data_size = 100*100*100;
MPI_Status stat_mpi;
MPI_file sgfh;

... 

MPI_File_write_all(sgfh, (void*)buf, data_size, MPI_DOUBLE, &stat_mpi);

buf 的大小可以变化,100^3 只是一个例子。在我仍然没有完全掌握的某些情况下,对 MPI_File_write_all 的调用会因浮点异常而失败。我可以测试的所有内容——buf 数组,data_size 的值——检查正常。

知道是什么原因造成的吗?我在使用 Cray 和 gnu 编译器时遇到同样的错误,无论优化级别如何。

抱歉,我没有可以重复问题的小代码。将其剥离到最基本的部分仍然会使代码对于此页面而言太大。

当两阶段集体缓冲算法试图(出于某些错误原因)除以零时,可能会出现浮点异常,而我只在条带计数不正确时才在 Lustre 上看到这种情况。

您可以通过禁用集体 I/O 来验证这个理论。使用 Cray MPI 最简单的方法是设置 MPICH_MPIIO_HINTS 环境变量:

export MPICH_MPIIO_HINTS='*:romio_cb_write=disable'
aprun ... your_program

Cray 做出了将他们的 MPI-IO 修改源关闭到 ROMIO 的商业决策。这个选择完全在他们的权利之内,但这意味着我只能提供模糊的建议。您必须联系您的 Cray 支持联系人以获取实际的错误修复。