Предполагая numbeOfProcesses=4
и numberOfLines=16
//so new n will be 4
//n=1000000/numberOfProcesses;
n=numberOfLines/numbeOfProcesses
FILE *myFile;
myFile = fopen("input.txt","r");
i=0;
k = n+1 //(5)
Из вашей программы все процессы будут считывать файл из одного и того же местоположения или смещения. Вам нужно сделать так, чтобы каждый процесс считывался с их собственной заданной c строки или смещения. Например, ранг 0 следует читать из 0
, ранг 1 из n
, ранг 2 из 2*n
et c. Передайте это как параметр в fseek.
n=numberOfLines/numbeOfProcesses
MPI_Comm_rank(MPI_COMM_WORLD,&rank)
file_start= n*rank
fseek(myfile, file_start, SEEK_SET);
fseek
будет go смещение (file_start) файла. Тогда file_start
будет 4
для rank 0
, 8
для rank 1
et c ...
Также, в то время как l oop следует изменить соответствующим образом.
Как указывалось в комментариях @ Gilles , здесь мы явно предполагаем количество строк в файле. Это может привести ко многим проблемам.
Чтобы получить масштабируемость и параллельную производительность , лучше использовать MPI IO , который предлагает отличные функции для параллельных файловых операций. MPI IO разработан для этого вида использования.