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);