1 #include <mpi.h>
2 #include <stdio.h>
3 #include <stdlib.h>
4 #include <unistd.h>
5 #include <cassert>
6 #include "phiostats.h"
7 #include "phIO.h"
8 #include "phstream.h" //for makeRStream and makeGRStream
9 #include "syncio.h"
10 #include "posixio.h"
11 #include "streamio.h"
12
main(int argc,char * argv[])13 int main(int argc, char* argv[]) {
14 MPI_Init(&argc,&argv);
15 int rank;
16 MPI_Comm_rank(MPI_COMM_WORLD, &rank);
17 int size;
18 MPI_Comm_size(MPI_COMM_WORLD, &size);
19 if( argc != 2 ) {
20 fprintf(stderr, "Usage: %s <numSyncFiles>\n",argv[0]);
21 MPI_Finalize();
22 return 1;
23 }
24 const char* phrase = "number of fishes";
25 const char* type = "double";
26 const char* iotype = "binary";
27 int zero = 0;
28 int one = 1;
29 int numFish = 0;
30 double fishWeight = 1.23;
31 int nfiles = atoi(argv[1]);
32 int ppf = size/nfiles;
33 const char* filename[2] = {"water-dat.", "water.dat."};
34 rstream rs = makeRStream();
35 phio_fp file[3];
36 const char* modes[3]={"syncio", "posixio", "streamio"};
37 syncio_setup_write(nfiles, one, ppf, &(file[0]));
38 posixio_setup(&(file[1]), 'w');
39 streamio_setup_r(&(file[2]), rs, 'w');
40 for(int i=0; i<3; i++) {
41 if(!rank) fprintf(stderr, "%s\n", modes[i]);
42 phastaio_initStats();
43 phio_openfile(filename[i], file[i]);
44 phio_writeheader(file[i], phrase, &zero, &one, &zero, type, iotype);
45 phio_writedatablock(file[i], phrase, &fishWeight, &zero, type, iotype);
46 phio_closefile(file[i]);
47 phastaio_printStats();
48 }
49 syncio_setup_read(nfiles, &(file[0]));
50 posixio_setup(&(file[1]), 'r');
51 streamio_setup_r(&(file[2]), rs, 'r');
52 for(int i=0; i<3; i++) {
53 if(!rank) fprintf(stderr, "%s\n", modes[i]);
54 phastaio_initStats();
55 phio_openfile(filename[i], file[i]);
56 phio_readheader(file[i], phrase, &numFish, &one, type, iotype);
57 assert(!numFish);
58 phio_readdatablock(file[i], phrase, &fishWeight, &numFish, type, iotype);
59 assert(fishWeight == 1.23);
60 phio_closefile(file[i]);
61 phastaio_printStats();
62 }
63 MPI_Finalize();
64 return 0;
65 }
66