Ich entwickle ein Programm, um die Gleichung Ax = B mit Gaussian Elimination zu lösen. Ich habe eine Datei, in der ich eine Matrix vom Typ double gespeichert habe (Reihe größere Reihenfolge seit C). Ich versuche, die Datei parallel zu lesen, indem ich die parallelen Datei-I/O-Funktionen von MPI verwende.Paralleles Lesen einer nxn-Matrix in einer Datei gespeichert
Ich habe etwas Verständnis von MPI_File_set_view
und wie es die freigegebene Datei logisch partitioniert, so dass jeder Prozess eine andere Ansicht der Datei hat. Ich habe auch verstanden, dass eine Ansicht aus einer etype
, einer filetype
und einer Verschiebung bestehen muss. Jetzt in meinem Fall, ich habe eine zyklische Reihe Verteilung haben und dafür habe ich den folgenden Code bekam:
int count, blksize, stride,lb,extent;
MPI_File fh;
MPI_Offset of;
/* Define types for etype, ftype
etype: Type of data stored in the file.
ftype: Description of HOW the data is stored in the file.
*/
MPI_Datatype etype, ftype,mpi_vect;
/* etype:
*/
count = (n + (size -1))/size; blksize = n;
stride = size;
lb = 0; extent = n*sizeof(double);
MPI_Type_vector(count,blksize,stride,MPI_DOUBLE,&mpi_vect);
MPI_Type_create_resized(mpi_vect,lb,extent,&etype);
MPI_Type_commit(&etype);
/* ftype: Describes the logical division of file.
A strided vector of blocksize 1 and count n/size.
Stride is size
*/
MPI_Type_vector(count,1,stride, MPI_DOUBLE, &ftype);
MPI_Type_commit(&ftype);
MPI_File_open(MPI_COMM_WORLD,filename,MPI_MODE_RDONLY,MPI_INFO_NULL,&fh);
MPI_File_set_view(fh,0,etype,ftype,native,MPI_INFO_NULL);
/* Assume buf is allocated as an mpi_vector with blocksize equal to row size and stride equal to number of processors */
MPI_File_read(fh,buf,count,mpi_vec,MPI_STATUS_IGNORE);
Meine Frage ist, wie kann ich die richtige etype entscheiden und FTYPE? Jede Hilfe wäre willkommen.
Danke.
kann ich zustimmen. Ich habe mich entschieden, wieder auf traditionelle I/O zu wechseln. –
das war nicht der Punkt, den ich versuchte zu machen! Du bist ziemlich nah dran. Möchten Sie, dass jeder Prozessor eine Zeile der Matrix liest? –
Es ist ein anderes Szenario, ich möchte, dass die Prozesse die Matrix in einem Block zyklisch lesen. Praktischerweise ist es in der Reihenfolge der Reihenfolge, dass ich möchte, dass sie auf –