Я пытаюсь написать простой метод для чтения файла параллельно, где каждый процесс будет считывать несколько int из файла, чтобы разделить данные на каждый процесс, но я получаю ошибку сегментации и я не могу понять, почему и как это исправить. Вот код, который я написал:Ошибка сегментации при использовании MPI_File_read_at
#include <stdio.h>
#include <stdlib.h>
#include "mpi.h"
#define NUM_INTS 5
int main (int argc, char** argv) {
MPI_Init(&argc, &argv);
int i;
int rank,processes,name_len;
const int root=0;
int *buf;
char *filename = "file.txt";
MPI_File fh;
MPI_Status status;
MPI_Offset offset;
char processor_name[MPI_MAX_PROCESSOR_NAME];
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Comm_size(MPI_COMM_WORLD, &processes);
MPI_Get_processor_name(processor_name, &name_len);
MPI_File_open(MPI_COMM_WORLD, filename, MPI_MODE_RDONLY, MPI_INFO_NULL, &fh);
buf = malloc(NUM_INTS * sizeof(int));
MPI_File_set_view(fh, 0, MPI_INT, MPI_INT, (char *)NULL, MPI_INFO_NULL);
offset = rank * NUM_INTS;
MPI_File_read_at(fh, offset, buf, NUM_INTS, MPI_INT, &status);
MPI_Barrier(MPI_COMM_WORLD);
MPI_File_close(&fh);
for (i=0;i<NUM_INTS;i++)
printf("rank %d data[%d] = %d\n", rank, i, buf[i]);
free(buf);
MPI_Finalize();
return 0;
}
Файл содержит 10 ints, которые я попытался разбить на 2 процесса. Я думаю, что проблема в MPI_File_read_at, потому что все печатные издания работают до этой линии
Спасибо заранее
Я уже использовал несколько отпечатков, и я знаю, что указатель файла не является NULL, buf выделен, и смещение имеет правильные значения в каждом процессе (0 в корне, 5 в процессе 1). –
ok, начните с простейшего случая, делает ли файл с 1 целым числом, прочитанным одним процессом? затем попробуйте 2 целых числа с одним процессом, затем 2 целых числа с двумя процессами, каждый процесс считывает по одному файлу каждый. Затем определите, какой процесс работает, 0 начальных процессов или смещения –