我有一個MPI代碼,其中進程讀取二進制文件並將其重新寫回。數據分發的方式是進程0讀取(然後寫入)文件的前半部分,而進程1讀取(然後寫入)文件的後半部分。現在的問題是輸入文件和輸出文件不匹配(差異顯示它們不同)。如果只有一個進程,一切正常。有人能指出哪裏出了問題嗎?在簡單MPI代碼中讀寫測試文件時出錯
使用的openmpi,編譯如下:提前的mpirun -np 2 ./test_mpi
感謝:mpicc -Wall test_mpi.c -o test_mpi
運行方式。
#include <stdio.h>
#include <stdlib.h>
#include <mpi.h>
int main(int argc, char** argv) {
int rank, np, i; //np = no. of processes
MPI_Init(&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Comm_size(MPI_COMM_WORLD, &np);
int filesize = 48*1048576; //input filesize 48MB
double *data = (double*) malloc (filesize/np);
FILE* fpa;
fpa = fopen ("512_featurevec.out", "rb");
fseek(fpa, filesize/np*rank, SEEK_SET);
printf("read: %d\n", (int)fread(&data[0], sizeof(double), filesize/(np*sizeof(double)), fpa));
fclose(fpa);
char* outfile = "outfile.txt";
for(i=0; i<np; i++) {
if(rank == i) {
fpa = fopen (outfile, "ab");
fseek(fpa, filesize/np*rank, SEEK_SET);
fwrite (&data[0], sizeof(double), filesize/(np*sizeof(double)), fpa);
fclose (fpa);
}
}
free(data);
MPI_Finalize();
exit(0);
}
請不要強制轉換由malloc()返回的指針。你根本不需要碰它,如果你這樣做,你可能會允許錯誤。 –