9 #define _XOPEN_SOURCE 700 20 #include "partest_util.h" 22 int barrier_after_start(MPI_Comm comm)
28 int barrier_after_malloc(MPI_Comm comm)
34 int barrier_after_open(MPI_Comm comm)
40 int barrier_after_write(MPI_Comm comm)
46 int barrier_after_read(MPI_Comm comm)
52 int barrier_after_close(MPI_Comm comm)
58 int barrier_before_unlink(MPI_Comm comm)
64 int barrier_after_unlink(MPI_Comm comm)
70 int write_timings (
char *set,
int method,
double *timings, sion_int64 *stats,
73 char cbuffer1[2*MAXCHARLEN];
74 char cbuffer2[2*MAXCHARLEN];
75 char cbuffer3[2*MAXCHARLEN];
76 char cbuffer4[2*MAXCHARLEN];
78 if(method == TIMINGS_METHOD_WRITE) {
80 "timings[%06d] T_STAT %s %s b=%10.2f MiB t=%10.6fs #chunks=%ld bw=%10.4f MB/s (%10.4f MiB/s) ion=%d nf=%d\n",
81 communicators->all_rank,set,
"WRITE",
82 1.0 * stats[STATS_BYTES_WR_WROTE] / toMiB,
83 timings[TIMINGS_WR_TOTAL],
84 (
long) stats[STATS_BYTES_WR_NUM_CHUNKS],
85 1.0 * stats[STATS_BYTES_WR_WROTE] / toMB / timings[TIMINGS_WR_TOTAL],
86 1.0 * stats[STATS_BYTES_WR_WROTE] / toMiB / timings[TIMINGS_WR_TOTAL],
87 communicators->ionode_number,
91 "timings[%06d] T_PHASE %s %s create=%.5fs, create_cls=%.5fs, open=%.5fs, write=%.5fs, close=%.5fs, tlog=%.4fs\n",
92 communicators->all_rank,set,
"WRITE",
93 timings[TIMINGS_WR_CREATE],timings[TIMINGS_WR_CREATE_CLOSE],timings[TIMINGS_WR_OPEN],timings[TIMINGS_WR_WRITE],timings[TIMINGS_WR_CLOSE],timings[TIMINGS_MSGS]);
96 "timings[%06d] T_FILE_BARRIER %s %s open=%.4fs, write=%.4fs, close=%.4fs\n",
97 communicators->all_rank,set,
"WRITE",
98 timings[TIMINGS_WR_OPEN_BARR_FILE],timings[TIMINGS_WR_WRITE_BARR_FILE],timings[TIMINGS_WR_CLOSE_BARR_FILE]);
101 "timings[%06d] T_GLOBAL_BARRIER %s %s create=%.4fs, create_cls=%.4fs, open=%.4fs, write=%.4fs, close=%.4fs\n",
102 communicators->all_rank,set,
"WRITE",
103 timings[TIMINGS_WR_CREATE_BARR_OPEN],timings[TIMINGS_WR_CREATE_BARR_CLOSE],timings[TIMINGS_WR_OPEN_BARR_FILE],timings[TIMINGS_WR_WRITE_BARR_FILE],timings[TIMINGS_WR_CLOSE_BARR_FILE]);
106 "timings[%06d] T_STAT %s %s b=%10.2f MiB t=%10.6fs #chunks=%ld bw=%10.4f MB/s (%10.4f MiB/s) ion=%d nf=%d\n",
107 communicators->all_rank,set,
"READ",
108 1.0 * stats[STATS_BYTES_RD_READ] / toMiB,
109 timings[TIMINGS_RD_TOTAL],
110 (
long) stats[STATS_BYTES_RD_NUM_CHUNKS],
111 1.0 * stats[STATS_BYTES_RD_READ] / toMB / timings[TIMINGS_RD_TOTAL],
112 1.0 * stats[STATS_BYTES_RD_READ] / toMiB / timings[TIMINGS_RD_TOTAL],
113 communicators->ionode_number,
117 "timings[%06d] T_PHASE %s %s open=%.5fs, read=%.5fs, close=%.5fs, tlog=%.4fs\n",
118 communicators->all_rank,set,
"READ",
119 timings[TIMINGS_RD_OPEN],timings[TIMINGS_RD_READ],timings[TIMINGS_RD_CLOSE],timings[TIMINGS_MSGS]);
122 "timings[%06d] T_FILE_BARRIER %s %s open=%.4fs, read=%.4fs, close=%.4fs\n",
123 communicators->all_rank,set,
"READ",
124 timings[TIMINGS_RD_OPEN_BARR_FILE],timings[TIMINGS_RD_READ_BARR_FILE],timings[TIMINGS_RD_CLOSE_BARR_FILE]);
127 "timings[%06d] T_GLOBAL_BARRIER %s %s open=%.4fs, read=%.4fs, close=%.4fs\n",
128 communicators->all_rank,set,
"READ",
129 timings[TIMINGS_RD_OPEN_BARR_FILE],timings[TIMINGS_RD_READ_BARR_FILE],timings[TIMINGS_RD_CLOSE_BARR_FILE]);
133 collective_print_gather(cbuffer1, communicators->
work);
134 collective_print_gather(cbuffer2, communicators->
work);
135 collective_print_gather(cbuffer3, communicators->
work);
136 collective_print_gather(cbuffer4, communicators->
work);
138 fprintf(stderr,
"%s", cbuffer1);
139 fprintf(stderr,
"%s", cbuffer2);
140 fprintf(stderr,
"%s", cbuffer3);
141 fprintf(stderr,
"%s", cbuffer4);
147 int collective_print_gather(
char *cbuffer, MPI_Comm comm)
153 MPI_Comm_size(comm, &size);
154 MPI_Comm_rank(comm, &rank);
156 if(size*MAXCHARLEN > 2*1024*1024) {
157 return(collective_print(cbuffer,comm));
161 lbuffer = (
char *) malloc(MAXCHARLEN * size);
163 fprintf(stderr,
"could allocate buffer of size %d\n",MAXCHARLEN * size);
171 MPI_Gather(cbuffer, MAXCHARLEN, MPI_CHAR, lbuffer, MAXCHARLEN, MPI_CHAR, 0, comm);
175 for (p = 0; p < size; p++) {
176 fprintf(stderr,
"%s", lbuffer + p * MAXCHARLEN);
180 if(rank==0) free(lbuffer);
185 int collective_print(
char *cbuffer, MPI_Comm comm)
189 char lbuffer[MAXCHARLEN];
192 MPI_Comm_size(comm, &size);
193 MPI_Comm_rank(comm, &rank);
195 fprintf(stderr,
"%s", cbuffer);
197 for (p = 1; p < size; p++) {
199 MPI_Send(&dummy, 1, MPI_INT, p, WAKEUP, comm);
200 MPI_Recv(lbuffer, MAXCHARLEN, MPI_CHAR, p, COLPRINT, comm, &status);
201 if (strlen(lbuffer) > 0)
202 fprintf(stderr,
"%s", lbuffer);
209 MPI_Recv(&dummy, 1, MPI_INT, 0, WAKEUP, comm, &status);
210 MPI_Send(cbuffer, MAXCHARLEN, MPI_CHAR, 0, COLPRINT, comm);