我打电话给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编译器中遇到了同样的错误,无论优化级别如何。
抱歉,我没有一个可以重复此问题的小代码。将其拆分为基本要素仍然会使代码对于此页面而言过于庞大。
答案 0 :(得分:2)
浮点异常可能来自于两阶段集体缓冲算法尝试(由于某些错误的原因)除以零,并且我只看到当条带计数在某种程度上不正确时会发生在Lustre上。
您可以通过禁用集体I / O来验证此理论。使用Cray MPI的最简单方法是设置MPICH_MPIIO_HINTS环境变量:
export MPICH_MPIIO_HINTS='*:romio_cb_write=disable'
aprun ... your_program
Cray做出了商业决定,将他们对MPIO-IO的修改关闭来源于ROMIO。这种选择完全在他们的权利范围内,但这意味着我只能提出含糊的建议。您必须联系您的Cray支持联系人以获取实际的错误修复。