00001 
00002 
00003 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 
00021 
00022 #include "ad_bgl_tuning.h"
00023 #include "mpi.h"
00024 
00025 #if !defined(PVFS2_SUPER_MAGIC)
00026   #define PVFS2_SUPER_MAGIC (0x20030528)
00027 #endif
00028 
00029 int     bglmpio_timing;
00030 int     bglmpio_timing2;
00031 int     bglmpio_comm;
00032 int     bglmpio_tunegather;
00033 int     bglmpio_tuneblocking;
00034 long    bglocklessmpio_f_type;
00035 
00036 double  bglmpio_prof_cw    [BGLMPIO_CIO_LAST];
00037 double  bglmpio_prof_cr    [BGLMPIO_CIO_LAST];
00038 
00039 
00083 void ad_bgl_get_env_vars() {
00084     char *x, *dummy;
00085 
00086     bglmpio_comm   = 0;
00087     x = getenv( "BGLMPIO_COMM"         ); 
00088     if (x) bglmpio_comm         = atoi(x);
00089     bglmpio_timing = 0;
00090     x = getenv( "BGLMPIO_TIMING"       ); 
00091     if (x) bglmpio_timing       = atoi(x);
00092     bglmpio_timing2 = 0;
00093     x = getenv( "BGLMPIO_TIMING2"      ); 
00094     if (x) bglmpio_timing2      = atoi(x);
00095     bglmpio_tunegather = 1;
00096     x = getenv( "BGLMPIO_TUNEGATHER"   ); 
00097     if (x) bglmpio_tunegather   = atoi(x);
00098     bglmpio_tuneblocking = 1;
00099     x = getenv( "BGLMPIO_TUNEBLOCKING" ); 
00100     if (x) bglmpio_tuneblocking = atoi(x);
00101     bglocklessmpio_f_type = PVFS2_SUPER_MAGIC;
00102     x = getenv( "BGLOCKLESSMPIO_F_TYPE" ); 
00103     if (x) bglocklessmpio_f_type = strtol(x,&dummy,0);
00104     DBG_FPRINTF(stderr,"BGLOCKLESSMPIO_F_TYPE=%ld/%#lX\n",
00105             bglocklessmpio_f_type,bglocklessmpio_f_type);
00106 }
00107 
00108 
00109 void ad_bgl_wr_timing_report( int rw, ADIO_File fd, int myrank, int nprocs )
00110 {
00111     int i;
00112 
00113     if (bglmpio_timing) {
00114 
00115     double *bglmpio_prof_org = bglmpio_prof_cr;
00116     if (rw) bglmpio_prof_org = bglmpio_prof_cw;
00117 
00118     double bglmpio_prof_avg[ BGLMPIO_CIO_LAST ];
00119     double bglmpio_prof_max[ BGLMPIO_CIO_LAST ];
00120     
00121     MPI_Reduce( bglmpio_prof_org, bglmpio_prof_avg, BGLMPIO_CIO_LAST, MPI_DOUBLE, MPI_SUM, 0, fd->comm );
00122     MPI_Reduce( bglmpio_prof_org, bglmpio_prof_max, BGLMPIO_CIO_LAST, MPI_DOUBLE, MPI_MAX, 0, fd->comm );
00123 
00124     if (myrank == 0) {
00125 
00126         for (i=0; i<BGLMPIO_CIO_LAST; i++) bglmpio_prof_avg[i] /= nprocs;
00127 
00128         if (bglmpio_timing2) {
00129         bglmpio_prof_avg[ BGLMPIO_CIO_B_POSI_RW  ] = bglmpio_prof_avg[ BGLMPIO_CIO_DATA_SIZE ] * nprocs / 
00130                                  bglmpio_prof_max[ BGLMPIO_CIO_T_POSI_RW  ];
00131         bglmpio_prof_avg[ BGLMPIO_CIO_B_MPIO_RW  ] = bglmpio_prof_avg[ BGLMPIO_CIO_DATA_SIZE ] * nprocs / 
00132                                  bglmpio_prof_max[ BGLMPIO_CIO_T_MPIO_RW  ];
00133         } else {
00134 
00135         bglmpio_prof_avg[ BGLMPIO_CIO_B_POSI_RW  ] = 0;
00136         bglmpio_prof_avg[ BGLMPIO_CIO_B_MPIO_RW  ] = 0;
00137         }
00138 
00139         bglmpio_prof_avg[ BGLMPIO_CIO_B_MPIO_CRW ] = bglmpio_prof_avg[ BGLMPIO_CIO_DATA_SIZE ] * nprocs / 
00140                                  bglmpio_prof_max[ BGLMPIO_CIO_T_MPIO_CRW ];
00141 
00142         printf("\tTIMING-1 %1s , ", (rw ? "W" : "R") );
00143         printf(    "SZ: %12.4f , ", bglmpio_prof_avg[ BGLMPIO_CIO_DATA_SIZE ] * nprocs );
00144         printf(  "SK-a: %10.3f , ", bglmpio_prof_avg[ BGLMPIO_CIO_T_SEEK ]     );
00145         printf(  "SK-m: %10.3f , ", bglmpio_prof_max[ BGLMPIO_CIO_T_SEEK ]     );
00146         printf(  "LC-a: %10.3f , ", bglmpio_prof_avg[ BGLMPIO_CIO_T_LCOMP ]    );
00147         printf(  "GA-m: %10.3f , ", bglmpio_prof_max[ BGLMPIO_CIO_T_GATHER ]   );
00148         printf(  "AN-a: %10.3f , ", bglmpio_prof_avg[ BGLMPIO_CIO_T_PATANA ]   );
00149         printf(  "FD-a: %10.3f , ", bglmpio_prof_avg[ BGLMPIO_CIO_T_FD_PART ]  );
00150         printf(  "MY-a: %10.3f , ", bglmpio_prof_avg[ BGLMPIO_CIO_T_MYREQ ]    );
00151         printf(  "OT-m: %10.3f , ", bglmpio_prof_max[ BGLMPIO_CIO_T_OTHREQ ]   );
00152         printf(  "EX-m: %10.3f , ", bglmpio_prof_max[ BGLMPIO_CIO_T_DEXCH ]    );
00153         printf("\tTIMING-2 %1s , ", (rw ? "W" : "R") );
00154         printf( "PXT-m: %10.3f , ", bglmpio_prof_avg[ BGLMPIO_CIO_T_POSI_RW ]  );
00155         printf( "MPT-m: %10.3f , ", bglmpio_prof_avg[ BGLMPIO_CIO_T_MPIO_RW ]  );
00156         printf("MPTC-m: %10.3f , ", bglmpio_prof_avg[ BGLMPIO_CIO_T_MPIO_CRW ] );
00157         printf(   "PXB: %10.3f , ", bglmpio_prof_avg[ BGLMPIO_CIO_B_POSI_RW ]  );
00158         printf(   "MPB: %10.3f , ", bglmpio_prof_avg[ BGLMPIO_CIO_B_MPIO_RW ]  );
00159         printf(  "MPBC: %10.3f , ", bglmpio_prof_avg[ BGLMPIO_CIO_B_MPIO_CRW ] );
00160     }
00161     }
00162 
00163 }