1

我有一个电话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 编译器都会出现同样的错误。

抱歉,我没有可以重复问题的小代码。将其剥离为基本要素仍然会为该页面留下太大的代码。

4

1 回答 1

2

浮点异常可能来自两阶段集体缓冲算法尝试(出于某种错误原因)除以零时,而我只在 Lustre 上看到条纹计数不正确时发生这种情况。

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

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

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

于 2016-10-26T02:39:13.847 回答