@@ -63,7 +63,7 @@ int subfiling = 0;
6363
6464herr_t ierr ;
6565data_contig_md * BUF_STRUCT ;
66- mem_monitor * MEM_MONITOR ;
66+ mem_monitor * MEM_MONITOR ;
6767
6868void
6969print_data (int n )
@@ -468,10 +468,14 @@ set_dataspace(bench_params params, unsigned long long try_read_elem_cnt, hid_t *
468468int
469469_run_benchmark_read (hid_t file_id , hid_t fapl , hid_t gapl , hid_t filespace , bench_params params ,
470470 unsigned long * total_data_size_out , unsigned long * raw_read_time_out ,
471- unsigned long * inner_metadata_time )
471+ unsigned long * inner_metadata_time , unsigned long * data_time_per_step ,
472+ unsigned long * metadata_time_per_step , unsigned long * data_wait_time_per_step ,
473+ unsigned long * metadata_wait_time_per_step )
472474{
473- * raw_read_time_out = 0 ;
474- * inner_metadata_time = 0 ;
475+ * raw_read_time_out = 0 ;
476+ * inner_metadata_time = 0 ;
477+ memset (metadata_time_per_step , 0 , params .cnt_time_step * sizeof (unsigned long ));
478+ memset (data_time_per_step , 0 , params .cnt_time_step * sizeof (unsigned long ));
475479 int nts = params .cnt_time_step ;
476480 unsigned long long read_elem_cnt = params .try_num_particles ;
477481 hid_t grp ;
@@ -563,11 +567,14 @@ _run_benchmark_read(hid_t file_id, hid_t fapl, hid_t gapl, hid_t filespace, benc
563567 }
564568 }
565569
566- * raw_read_time_out += (read_time_exp + read_time_imp );
567- * inner_metadata_time += (meta_time1 + meta_time2 + meta_time3 + meta_time4 + meta_time5 );
570+ metadata_time_per_step [ts_index ] = (meta_time1 + meta_time2 + meta_time3 + meta_time4 + meta_time5 );
571+ data_time_per_step [ts_index ] = (read_time_exp + read_time_imp );
572+ * raw_read_time_out += data_time_per_step [ts_index ];
573+ * inner_metadata_time += metadata_time_per_step [ts_index ];
568574 }
569575
570- mem_monitor_final_run (MEM_MONITOR , & metadata_time_imp , & read_time_imp );
576+ mem_monitor_final_run (MEM_MONITOR , & metadata_time_imp , & read_time_imp , data_wait_time_per_step ,
577+ metadata_wait_time_per_step );
571578 * raw_read_time_out += read_time_imp ;
572579 * inner_metadata_time += metadata_time_imp ;
573580 * total_data_size_out = nts * actual_read_cnt * (6 * sizeof (float ) + 2 * sizeof (int ));
@@ -609,13 +616,12 @@ main(int argc, char *argv[])
609616 assert (MPI_THREAD_MULTIPLE == mpi_thread_lvl_provided );
610617 MPI_Comm_rank (MPI_COMM_WORLD , & MY_RANK );
611618 MPI_Comm_size (MPI_COMM_WORLD , & NUM_RANKS );
612-
613- int sleep_time = 0 ;
614-
615- bench_params params ;
616-
617- char * cfg_file_path = argv [1 ];
618- char * file_name = argv [2 ]; // data file to read
619+ int sleep_time = 0 ;
620+ bench_params params ;
621+ char * cfg_file_path = argv [1 ];
622+ char * file_name = argv [2 ]; // data file to read
623+ unsigned long * data_time_per_step = NULL , * metadata_time_per_step = NULL ;
624+ unsigned long * data_wait_time_per_step = NULL , * metadata_wait_time_per_step = NULL ;
619625
620626 if (MY_RANK == 0 ) {
621627 printf ("Configuration file: %s\n" , argv [1 ]);
@@ -709,6 +715,11 @@ main(int argc, char *argv[])
709715 printf ("Number of particles available per rank: %llu \n" , NUM_PARTICLES );
710716 }
711717
718+ data_time_per_step = malloc (NUM_TIMESTEPS * sizeof (unsigned long ));
719+ metadata_time_per_step = malloc (NUM_TIMESTEPS * sizeof (unsigned long ));
720+ data_wait_time_per_step = malloc (NUM_TIMESTEPS * sizeof (unsigned long ));
721+ metadata_wait_time_per_step = malloc (NUM_TIMESTEPS * sizeof (unsigned long ));
722+
712723 MPI_Barrier (MPI_COMM_WORLD );
713724
714725 MPI_Allreduce (& NUM_PARTICLES , & TOTAL_PARTICLES , 1 , MPI_LONG_LONG , MPI_SUM , MPI_COMM_WORLD );
@@ -730,7 +741,8 @@ main(int argc, char *argv[])
730741 unsigned long raw_read_time , metadata_time , local_data_size ;
731742
732743 int ret = _run_benchmark_read (file_id , fapl , gapl , filespace , params , & local_data_size , & raw_read_time ,
733- & metadata_time );
744+ & metadata_time , data_time_per_step , metadata_time_per_step ,
745+ data_wait_time_per_step , metadata_wait_time_per_step );
734746
735747 if (ret < 0 ) {
736748 if (MY_RANK == 0 )
@@ -751,7 +763,7 @@ main(int argc, char *argv[])
751763
752764 if (MY_RANK == 0 ) {
753765 human_readable value ;
754- char * mode_str = NULL ;
766+ char * mode_str = NULL ;
755767
756768 if (has_vol_async ) {
757769 mode_str = "ASYNC" ;
@@ -810,6 +822,29 @@ main(int argc, char *argv[])
810822 value = format_human_readable (or_bs );
811823 fprintf (params .csv_fs , "observed rate, %.3f, %cB/s\n" , value .value , value .unit );
812824 fprintf (params .csv_fs , "observed time, %.3f, %s\n" , oct_s , "seconds" );
825+ // Per timestep data time
826+ for (int i = 0 ; i < NUM_TIMESTEPS ; i ++ ) {
827+ float t = (float )data_time_per_step [i ] / (1000.0 * 1000.0 );
828+ fprintf (params .csv_fs , "timestep %d data time, %.3f, %s\n" , i , t , "seconds" );
829+ }
830+ // Per timestep inner metadata time
831+ for (int i = 0 ; i < NUM_TIMESTEPS ; i ++ ) {
832+ float t = (float )metadata_time_per_step [i ] / (1000.0 * 1000.0 );
833+ fprintf (params .csv_fs , "timestep %d metadata time, %.3f, %s\n" , i , t , "seconds" );
834+ }
835+ // Print wait time if async is enabled
836+ if (has_vol_async ) {
837+ // Per timestep data wait time
838+ for (int i = 0 ; i < NUM_TIMESTEPS ; i ++ ) {
839+ float t = (float )data_wait_time_per_step [i ] / (1000.0 * 1000.0 );
840+ fprintf (params .csv_fs , "timestep %d data wait time, %.3f, %s\n" , i , t , "seconds" );
841+ }
842+ // Per timestep metadata wait time
843+ for (int i = 0 ; i < NUM_TIMESTEPS ; i ++ ) {
844+ float t = (float )metadata_wait_time_per_step [i ] / (1000.0 * 1000.0 );
845+ fprintf (params .csv_fs , "timestep %d metadata wait time, %.3f, %s\n" , i , t , "seconds" );
846+ }
847+ }
813848 fclose (params .csv_fs );
814849 }
815850 }
@@ -824,6 +859,16 @@ main(int argc, char *argv[])
824859
825860done :
826861 H5close ();
862+
863+ if (data_time_per_step )
864+ free (data_time_per_step );
865+ if (metadata_time_per_step )
866+ free (metadata_time_per_step );
867+ if (data_wait_time_per_step )
868+ free (data_wait_time_per_step );
869+ if (metadata_wait_time_per_step )
870+ free (metadata_wait_time_per_step );
871+
827872 MPI_Finalize ();
828873 return 0 ;
829874}
0 commit comments