Что может вызвать сбой 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 для исправления ошибки.

Другие вопросы по тегам