Presentazione di alcuni concetti di I/O parallelo. In particolare abbiamo scritto e letto un file in modo non contiguo usando un datatype appositamente creato.
#define BUFSIZ 12
#define INTS_PER_BLK 3
int main(int argc, char* argv[])
{
int my_id, numprocs,length;
int sendb[BUFSIZ],receiveb[BUFSIZ];
MPI_Status status;
MPI_File ilfile;
MPI_Datatype filetype;
[...];
MPI_File_open(com,"Test",MPI_MODE_CREATE|MPI_MODE_RDWR,MPI_INFO_NULL, &ilfile);
// Quante righe 4, di quanti interi 3 , di quanto spaziate 3*numprocs
MPI_Type_vector(BUFSIZ/INTS_PER_BLK,INTS_PER_BLK,INTS_PER_BLK*numprocs,MPI_INT,&filetype);
for (int i=0;i<BUFSIZ;i++) sendb[i]=i+1000*my_id;
MPI_File_set_view(ilfile,INTS_PER_BLK*my_id*sizeof(int),MPI_INT,filetype,"native",MPI_INFO_NULL);
MPI_File_write_all(ilfile,sendb,BUFSIZ,MPI_INT,&status);
MPI_Barrier(com);
Notare come settando una view diversa il file venga letto in modo sequenziale.
MPI_File_set_view(ilfile,BUFSIZ*my_id*sizeof(int),MPI_INT,MPI_INT,"native",MPI_INFO_NULL);
MPI_File_read_all(ilfile,receiveb,BUFSIZ,MPI_INT,&status);I file con i programmi presentati sono scaricabili:Programma 1.
Programma 2.
#define BUFSIZ 12
#define INTS_PER_BLK 3
int main(int argc, char* argv[])
{
int my_id, numprocs,length;
int sendb[BUFSIZ],receiveb[BUFSIZ];
MPI_Status status;
MPI_File ilfile;
MPI_Datatype filetype;
[...];
MPI_File_open(com,"Test",MPI_MODE_CREATE|MPI_MODE_RDWR,MPI_INFO_NULL, &ilfile);
// Quante righe 4, di quanti interi 3 , di quanto spaziate 3*numprocs
MPI_Type_vector(BUFSIZ/INTS_PER_BLK,INTS_PER_BLK,INTS_PER_BLK*numprocs,MPI_INT,&filetype);
for (int i=0;i<BUFSIZ;i++) sendb[i]=i+1000*my_id;
MPI_File_set_view(ilfile,INTS_PER_BLK*my_id*sizeof(int),MPI_INT,filetype,"native",MPI_INFO_NULL);
MPI_File_write_all(ilfile,sendb,BUFSIZ,MPI_INT,&status);
MPI_Barrier(com);
Notare come settando una view diversa il file venga letto in modo sequenziale.
MPI_File_set_view(ilfile,BUFSIZ*my_id*sizeof(int),MPI_INT,MPI_INT,"native",MPI_INFO_NULL);
MPI_File_read_all(ilfile,receiveb,BUFSIZ,MPI_INT,&status);I file con i programmi presentati sono scaricabili:Programma 1.
Programma 2.