是什么导致 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 支持联系人以获取实际的错误修复。
我打电话给 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 支持联系人以获取实际的错误修复。