Ошибка сегментации при использовании MPI_File_open
Я пытаюсь прочитать из файла для приложения MPI. Кластер имеет 4 узла с 12 ядрами в каждом узле. Я попытался запустить основную программу для вычисления ранга, и это работает. Когда я добавил MPI_File_open, он генерирует исключение во время выполнения
ПЛОХОЕ ПРЕКРАЩЕНИЕ ОДНОГО ИЗ ВАШИХ ПРОЦЕССОВ ЗАЯВКИ = ВЫХОДНОЙ КОД: 139
В кластере установлен MPICH2 и сетевая файловая система. Я проверяю MPI_File_open с различными параметрами, такими как режим ReadOnly, MPI_COMM_WORLD и т. Д.
Могу ли я использовать MPI_File_open с сетевой файловой системой?
int main(int argc, char* argv[])
{
int myrank = 0;
int nprocs = 0;
int i = 0;
MPI_Comm icomm = MPI_COMM_WORLD;
MPI_Status status;
MPI_Info info;
MPI_File *fh = NULL;
int error = 0;
MPI_Init(&argc, &argv);
MPI_Barrier(MPI_COMM_WORLD); // Wait for all processor to start
MPI_Comm_size(MPI_COMM_WORLD, &nprocs); // Get number of processes
MPI_Comm_rank(MPI_COMM_WORLD, &myrank); // Get own rank
usleep(myrank*100000);
if ( myrank == 1 || myrank == 0 )
printf("Hello from %d\r\n", myrank);
if (myrank == 0)
{
error = MPI_File_open( MPI_COMM_SELF, "lw1.wei", MPI_MODE_UNIQUE_OPEN,
MPI_INFO_NULL, fh);
if ( error )
{
printf("Error in opening file\r\n");
}
else
{
printf("File successfully opened\r\n");
}
MPI_File_close(fh);
}
MPI_Barrier(MPI_COMM_WORLD); //! Wait for all the processors to end
MPI_Finalize();
if ( myrank == 0 )
{
printf("Number of Processes %d\n\r", nprocs);
}
return 0;
}
1 ответ
Вы забыли выделить MPI_File
Объект до открытия файла. Вы можете изменить эту строку:
MPI_File *fh = NULL;
в:
MPI_File fh;
и откройте файл, дав fh
адрес к MPI_File_open(..., &fh)
, Или вы можете просто выделить память из кучи, используя malloc()
,
MPI_File *fh = malloc(sizeof(MPI_File));