From 2459f3a4052ccaa2c9645a484714a11314cbffb7 Mon Sep 17 00:00:00 2001 From: Ed Hartnett Date: Thu, 20 Jun 2019 10:58:55 -0600 Subject: [PATCH] ifdef protecting mep log functions in pio_internal.h to prefent doxygen warning --- src/clib/pio_internal.h | 2 + tests/cunit/test_perf2.c | 268 ++++++++++++++++++++------------------- 2 files changed, 142 insertions(+), 128 deletions(-) diff --git a/src/clib/pio_internal.h b/src/clib/pio_internal.h index f83747ace3c..8d8597cb0da 100644 --- a/src/clib/pio_internal.h +++ b/src/clib/pio_internal.h @@ -368,9 +368,11 @@ extern "C" { int pio_init_logging(void); void pio_finalize_logging(void ); +#ifdef USE_MPE /* Logging with the MPE library, use --enable-mpe at configure. */ void pio_start_mpe_log(int state); void pio_stop_mpe_log(int state, const char *msg); +#endif /* USE_MPE */ /* Write a netCDF decomp file. */ int pioc_write_nc_decomp_int(iosystem_desc_t *ios, const char *filename, int cmode, int ndims, diff --git a/tests/cunit/test_perf2.c b/tests/cunit/test_perf2.c index 973da3d30bf..3f37cb170b5 100644 --- a/tests/cunit/test_perf2.c +++ b/tests/cunit/test_perf2.c @@ -9,9 +9,6 @@ #include #include #include -/* #ifdef USE_MPE */ -/* #include */ -/* #endif /\* USE_MPE *\/ */ /* The number of tasks this test should run on. */ #define TARGET_NTASKS 16 @@ -33,12 +30,12 @@ #define NDIM3 3 /* The length of our sample data along each dimension. */ -/* #define X_DIM_LEN 128 */ -/* #define Y_DIM_LEN 128 */ -/* #define Z_DIM_LEN 32 */ -#define X_DIM_LEN 1024 -#define Y_DIM_LEN 1024 -#define Z_DIM_LEN 128 +#define X_DIM_LEN 128 +#define Y_DIM_LEN 128 +#define Z_DIM_LEN 32 +/* #define X_DIM_LEN 1024 */ +/* #define Y_DIM_LEN 1024 */ +/* #define Z_DIM_LEN 128 */ /* The number of timesteps of data to write. */ #define NUM_TIMESTEPS 10 @@ -65,63 +62,93 @@ int dim_len[NDIM] = {NC_UNLIMITED, X_DIM_LEN, Y_DIM_LEN, Z_DIM_LEN}; /* Run test for each of the rearrangers. */ #define NUM_REARRANGERS_TO_TEST 2 -/* #ifdef USE_MPE */ -/* /\* These are for the event numbers array used to log various events in */ -/* * the program with the MPE library, which produces output for the */ -/* * Jumpshot program. *\/ */ -/* #define NUM_EVENTS 7 */ -/* #define START 0 */ -/* #define END 1 */ -/* #define INIT 0 */ -/* #define DECOMP 1 */ -/* #define CREATE 2 */ -/* #define DARRAY_WRITE 3 */ -/* #define CLOSE 4 */ -/* #define CALCULATE 5 */ -/* #define INGEST 6 */ - -/* #define ERR_LOGGING 99 */ - -/* /\* This array holds even numbers for MPE. *\/ */ -/* int event_num[2][NUM_EVENTS]; */ - -/* /\* This will set up the MPE logging event numbers. *\/ */ -/* int */ -/* init_logging(int my_rank, int event_num[][NUM_EVENTS]) */ -/* { */ -/* /\* Get a bunch of event numbers. *\/ */ -/* event_num[START][INIT] = MPE_Log_get_event_number(); */ -/* event_num[END][INIT] = MPE_Log_get_event_number(); */ -/* event_num[START][DECOMP] = MPE_Log_get_event_number(); */ -/* event_num[END][DECOMP] = MPE_Log_get_event_number(); */ -/* event_num[START][INGEST] = MPE_Log_get_event_number(); */ -/* event_num[END][INGEST] = MPE_Log_get_event_number(); */ -/* event_num[START][CLOSE] = MPE_Log_get_event_number(); */ -/* event_num[END][CLOSE] = MPE_Log_get_event_number(); */ -/* event_num[START][CALCULATE] = MPE_Log_get_event_number(); */ -/* event_num[END][CALCULATE] = MPE_Log_get_event_number(); */ -/* event_num[START][CREATE] = MPE_Log_get_event_number(); */ -/* event_num[END][CREATE] = MPE_Log_get_event_number(); */ -/* event_num[START][DARRAY_WRITE] = MPE_Log_get_event_number(); */ -/* event_num[END][DARRAY_WRITE] = MPE_Log_get_event_number(); */ - -/* /\* You should track at least initialization and partitioning, data */ -/* * ingest, update computation, all communications, any memory */ -/* * copies (if you do that), any output rendering, and any global */ -/* * communications. *\/ */ -/* if (!my_rank) */ -/* { */ -/* MPE_Describe_state(event_num[START][INIT], event_num[END][INIT], "init", "yellow"); */ -/* MPE_Describe_state(event_num[START][INGEST], event_num[END][INGEST], "ingest", "red"); */ -/* MPE_Describe_state(event_num[START][DECOMP], event_num[END][DECOMP], "decomposition", "green"); */ -/* MPE_Describe_state(event_num[START][CALCULATE], event_num[END][CALCULATE], "calculate", "orange"); */ -/* MPE_Describe_state(event_num[START][CREATE], event_num[END][CREATE], "create", "purple"); */ -/* MPE_Describe_state(event_num[START][CLOSE], event_num[END][CLOSE], "close file", "blue"); */ -/* MPE_Describe_state(event_num[START][DARRAY_WRITE], event_num[END][DARRAY_WRITE], "darray write", "pink"); */ -/* } */ -/* return 0; */ -/* } */ -/* #endif /\* USE_MPE *\/ */ +#ifdef USE_MPE +/* These are for the event numbers array used to log various events in + * the program with the MPE library, which produces output for the + * Jumpshot program. */ +#define TEST_NUM_EVENTS 6 +#define START 0 +#define END 1 +#define TEST_INIT 0 +#define TEST_DECOMP 1 +#define TEST_CREATE 2 +#define TEST_DARRAY_WRITE 3 +#define TEST_CLOSE 4 +#define TEST_CALCULATE 5 + +/* This array holds even numbers for MPE. */ +int test_event[2][TEST_NUM_EVENTS]; + +/* This will set up the MPE logging event numbers. */ +int +init_logging(int my_rank, int test_event[][TEST_NUM_EVENTS]) +{ + /* Get a bunch of event numbers. */ + test_event[START][TEST_INIT] = MPE_Log_get_event_number(); + test_event[END][TEST_INIT] = MPE_Log_get_event_number(); + test_event[START][TEST_DECOMP] = MPE_Log_get_event_number(); + test_event[END][TEST_DECOMP] = MPE_Log_get_event_number(); + test_event[START][TEST_CREATE] = MPE_Log_get_event_number(); + test_event[END][TEST_CREATE] = MPE_Log_get_event_number(); + test_event[START][TEST_DARRAY_WRITE] = MPE_Log_get_event_number(); + test_event[END][TEST_DARRAY_WRITE] = MPE_Log_get_event_number(); + test_event[START][TEST_CLOSE] = MPE_Log_get_event_number(); + test_event[END][TEST_CLOSE] = MPE_Log_get_event_number(); + test_event[START][TEST_CALCULATE] = MPE_Log_get_event_number(); + test_event[END][TEST_CALCULATE] = MPE_Log_get_event_number(); + + /* Set up MPE states. */ + if (!my_rank) + { + MPE_Describe_info_state(test_event[START][TEST_INIT], test_event[END][TEST_INIT], + "test_perf2 init", "forestgreen", "%s"); + MPE_Describe_info_state(test_event[START][TEST_DECOMP], + test_event[END][TEST_DECOMP], "test_perf2 decomposition", + "blue", "%s"); + MPE_Describe_info_state(test_event[START][TEST_CREATE], test_event[END][TEST_CREATE], + "test_perf2 create file", "marroon", "%s"); + /* MPE_Describe_info_state(test_event[START][TEST_OPEN], test_event[END][TEST_OPEN], */ + /* "test_perf2 open file", "orange", "%s"); */ + MPE_Describe_info_state(test_event[START][TEST_DARRAY_WRITE], + test_event[END][TEST_DARRAY_WRITE], "test_perf2 darray write", + "coral", "%s"); + MPE_Describe_info_state(test_event[START][TEST_CLOSE], + test_event[END][TEST_CLOSE], "test_perf2 close", + "gray", "%s"); + MPE_Describe_info_state(test_event[START][TEST_CALCULATE], + test_event[END][TEST_CALCULATE], "test_perf2 calculate", + "aquamarine", "%s"); + } + return 0; +} + +/** + * Start MPE logging. + * + * @param state_num the MPE event state number to START (ex. INIT). + * @author Ed Hartnett + */ +void +test_start_mpe_log(int state) +{ + MPE_Log_event(test_event[START][state], 0, NULL); +} + +/** + * End MPE logging. + * + * @author Ed Hartnett + */ +void +test_stop_mpe_log(int state, const char *msg) +{ + MPE_LOG_BYTES bytebuf; + int pos = 0; + + MPE_Log_pack(bytebuf, &pos, 's', strlen(msg), msg); + MPE_Log_event(test_event[END][state], 0, bytebuf); +} +#endif /* USE_MPE */ /* Create the decomposition to divide the 4-dimensional sample data * between the 4 tasks. For the purposes of decomposition we are only @@ -185,7 +212,6 @@ test_darray(int iosysid, int ioid, int num_flavors, int *flavor, int my_rank, int ntasks, int num_io_procs, int provide_fill, int rearranger) { - char filename[PIO_MAX_NAME + 1]; /* Name for the output files. */ int dimids[NDIM]; /* The dimension IDs. */ int ncid; /* The ncid of the netCDF file. */ int varid; /* The ID of the netCDF varable. */ @@ -207,6 +233,7 @@ test_darray(int iosysid, int ioid, int num_flavors, int *flavor, /* for (int fmt = 0; fmt < num_flavors; fmt++) */ for (int fmt = 0; fmt < 1; fmt++) { + char filename[PIO_MAX_NAME + 1]; /* Name for the output files. */ struct timeval starttime, endtime; long long startt, endt; long long delta; @@ -214,10 +241,9 @@ test_darray(int iosysid, int ioid, int num_flavors, int *flavor, float delta_in_sec; float mb_per_sec; -/* #ifdef USE_MPE */ -/* if ((ret = MPE_Log_event(event_num[START][CREATE], 0, "start init"))) */ -/* return ERR_MPI; */ -/* #endif /\* USE_MPE *\/ */ +#ifdef USE_MPE + test_start_mpe_log(TEST_CREATE); +#endif /* USE_MPE */ /* Create the filename. Use the same filename for all, so we * don't waste disk space. */ @@ -246,10 +272,13 @@ test_darray(int iosysid, int ioid, int num_flavors, int *flavor, if ((ret = PIOc_enddef(ncid))) ERR(ret); -/* #ifdef USE_MPE */ -/* if ((ret = MPE_Log_event(event_num[END][CREATE], 0, "end init"))) */ -/* MPIERR(ret); */ -/* #endif /\* USE_MPE *\/ */ +#ifdef USE_MPE + { + char msg[PIO_MAX_NAME + 1]; + sprintf(msg, "iotype %d rearr %d", flavor[fmt], rearranger); + test_stop_mpe_log(TEST_CREATE, msg); + } +#endif /* USE_MPE */ /* Start the clock. */ gettimeofday(&starttime, NULL); @@ -260,10 +289,9 @@ test_darray(int iosysid, int ioid, int num_flavors, int *flavor, for (int f = 0; f < arraylen; f++) test_data[f] = (my_rank * 10 + f) + t * 1000; -/* #ifdef USE_MPE */ -/* if ((ret = MPE_Log_event(event_num[START][DARRAY_WRITE], 0, "start init"))) */ -/* return ERR_MPI; */ -/* #endif /\* USE_MPE *\/ */ +#ifdef USE_MPE + test_start_mpe_log(TEST_DARRAY_WRITE); +#endif /* USE_MPE */ /* Set the value of the record dimension. */ if ((ret = PIOc_setframe(ncid, varid, t))) @@ -273,28 +301,32 @@ test_darray(int iosysid, int ioid, int num_flavors, int *flavor, if ((ret = PIOc_write_darray(ncid, varid, ioid, arraylen, test_data, fillvalue))) ERR(ret); -/* #ifdef USE_MPE */ -/* if ((ret = MPE_Log_event(event_num[END][DARRAY_WRITE], 0, "end init"))) */ -/* MPIERR(ret); */ -/* #endif /\* USE_MPE *\/ */ +#ifdef USE_MPE + { + char msg[PIO_MAX_NAME + 1]; + sprintf(msg, "write_darray timestep %d", t); + test_stop_mpe_log(TEST_DARRAY_WRITE, msg); + } +#endif /* USE_MPE */ num_megabytes += (X_DIM_LEN * Y_DIM_LEN * Z_DIM_LEN * sizeof(int))/(1024*1024); } -/* #ifdef USE_MPE */ -/* if ((ret = MPE_Log_event(event_num[START][CLOSE], 0, "start init"))) */ -/* return ERR_MPI; */ -/* #endif /\* USE_MPE *\/ */ +#ifdef USE_MPE + test_start_mpe_log(TEST_CLOSE); +#endif /* USE_MPE */ /* Close the netCDF file. */ if ((ret = PIOc_closefile(ncid))) ERR(ret); -/* #ifdef USE_MPE */ -/* if ((ret = MPE_Log_event(event_num[END][CLOSE], 0, "end init"))) */ -/* MPIERR(ret); */ -/* #endif /\* USE_MPE *\/ */ - +#ifdef USE_MPE + { + char msg[PIO_MAX_NAME + 1]; + sprintf(msg, "closed ncid %d", ncid); + test_stop_mpe_log(TEST_CLOSE, msg); + } +#endif /* USE_MPE */ /* Stop the clock. */ gettimeofday(&endtime, NULL); @@ -429,10 +461,9 @@ test_all_darray(int iosysid, int num_flavors, int *flavor, int my_rank, if ((ret = MPI_Comm_size(test_comm, &my_test_size))) MPIERR(ret); -/* #ifdef USE_MPE */ -/* if ((ret = MPE_Log_event(event_num[START][DECOMP], 0, "start init"))) */ -/* return ERR_MPI; */ -/* #endif /\* USE_MPE *\/ */ +#ifdef USE_MPE + test_start_mpe_log(TEST_DECOMP); +#endif /* USE_MPE */ /* Decompose the data over the tasks. */ if ((ret = create_decomposition_3d(ntasks, my_rank, iosysid, &ioid))) @@ -443,10 +474,9 @@ test_all_darray(int iosysid, int num_flavors, int *flavor, int my_rank, /* ntasks, rearranger, test_comm))) */ /* return ret; */ -/* #ifdef USE_MPE */ -/* if ((ret = MPE_Log_event(event_num[END][DECOMP], 0, "end init"))) */ -/* MPIERR(ret); */ -/* #endif /\* USE_MPE *\/ */ +#ifdef USE_MPE + test_stop_mpe_log(TEST_DECOMP, TEST_NAME); +#endif /* USE_MPE */ /* Test with/without providing a fill value to PIOc_write_darray(). */ /* for (int provide_fill = 0; provide_fill < NUM_TEST_CASES_FILLVALUE; provide_fill++) */ @@ -498,12 +528,10 @@ main(int argc, char **argv) 0, -1, &test_comm))) ERR(ERR_INIT); -/* #ifdef USE_MPE */ -/* if ((ret = MPE_Init_log())) */ -/* return ret; */ -/* if (init_logging(my_rank, event_num)) */ -/* return ERR_LOGGING; */ -/* #endif /\* USE_MPE *\/ */ +#ifdef USE_MPE + if (init_logging(my_rank, test_event)) + return ERR_AWFUL; +#endif /* USE_MPE */ if ((ret = PIOc_set_iosystem_error_handling(PIO_DEFAULT, PIO_RETURN_ERROR, NULL))) @@ -533,10 +561,9 @@ main(int argc, char **argv) /* for (r = 0; r < NUM_REARRANGERS_TO_TEST; r++) */ for (r = 0; r < 1; r++) { -/* #ifdef USE_MPE */ -/* if ((ret = MPE_Log_event(event_num[START][INIT], 0, "start init"))) */ -/* return ERR_MPI; */ -/* #endif /\* USE_MPE *\/ */ +#ifdef USE_MPE + test_start_mpe_log(TEST_INIT); +#endif /* USE_MPE */ /* Initialize the PIO IO system. This specifies how * many and which processors are involved in I/O. */ @@ -544,10 +571,9 @@ main(int argc, char **argv) ioproc_start, rearranger[r], &iosysid))) return ret; -/* #ifdef USE_MPE */ -/* if ((ret = MPE_Log_event(event_num[END][INIT], 0, "end init"))) */ -/* MPIERR(ret); */ -/* #endif /\* USE_MPE *\/ */ +#ifdef USE_MPE + test_stop_mpe_log(TEST_INIT, "test_perf2 init"); +#endif /* USE_MPE */ /* Run tests. */ if ((ret = test_all_darray(iosysid, num_flavors, flavor, my_rank, @@ -560,20 +586,6 @@ main(int argc, char **argv) } /* next rearranger */ } /* next num io procs */ - -/* #ifdef USE_MPE */ -/* { */ -/* /\* This causes problems on my MPICH2 library on Linux, but seems to be */ -/* * required for frost. *\/ */ -/* char file_name[128]; */ -/* sprintf(file_name, "chart_%d", 1); */ -/* if ((ret = MPE_Finish_log(file_name))) */ -/* MPIERR(ret); */ -/* } */ - -/* #endif /\* USE_MPE *\/ */ - - if (!my_rank) printf("finalizing io_test!\n");