Что может вызвать сбой MPI_File_write_all с исключением с плавающей точкой?
У меня есть звонок 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, и независимо от уровней оптимизации.
Извините, у меня нет небольшого кода, который может повторить проблему. Разобрав его до самого необходимого, вы все равно оставите код слишком большим для этой страницы.
1 ответ
Исключение с плавающей запятой, вероятно, происходит, когда алгоритм двухфазной коллективной буферизации пытается (по какой-то ошибочной причине) разделить на ноль, и я видел, что это происходит только на блеске, когда счетчик строк как-то неверен.
Вы можете проверить эту теорию, отключив коллективный ввод-вывод. Самый простой способ использования Cray MPI - установить переменную среды MPICH_MPIIO_HINTS:
export MPICH_MPIIO_HINTS='*:romio_cb_write=disable'
aprun ... your_program
Компания Cray приняла бизнес-решение закрыть свои модификации MPI-IO для ROMIO. Этот выбор находится в пределах их прав, но это означает, что я могу только предлагать смутные предложения. Вам нужно будет связаться со службой поддержки Cray для исправления ошибки.