@@ -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 )
@@ -278,10 +278,14 @@ set_dataspace(bench_params params, unsigned long long try_read_elem_cnt, hid_t *
278278int
279279_run_benchmark_read (hid_t file_id , hid_t fapl , hid_t gapl , hid_t filespace , bench_params params ,
280280 unsigned long * total_data_size_out , unsigned long * raw_read_time_out ,
281- unsigned long * inner_metadata_time )
281+ unsigned long * inner_metadata_time , unsigned long * data_time_per_step ,
282+ unsigned long * metadata_time_per_step , unsigned long * data_wait_time_per_step ,
283+ unsigned long * metadata_wait_time_per_step )
282284{
283- * raw_read_time_out = 0 ;
284- * inner_metadata_time = 0 ;
285+ * raw_read_time_out = 0 ;
286+ * inner_metadata_time = 0 ;
287+ memset (metadata_time_per_step , 0 , params .cnt_time_step * sizeof (unsigned long ));
288+ memset (data_time_per_step , 0 , params .cnt_time_step * sizeof (unsigned long ));
285289 int nts = params .cnt_time_step ;
286290 unsigned long long read_elem_cnt = params .try_num_particles ;
287291 hid_t grp ;
@@ -370,11 +374,14 @@ _run_benchmark_read(hid_t file_id, hid_t fapl, hid_t gapl, hid_t filespace, benc
370374 }
371375 }
372376
373- * raw_read_time_out += (read_time_exp + read_time_imp );
374- * inner_metadata_time += (meta_time1 + meta_time2 + meta_time3 + meta_time4 + meta_time5 );
377+ metadata_time_per_step [ts_index ] = (meta_time1 + meta_time2 + meta_time3 + meta_time4 + meta_time5 );
378+ data_time_per_step [ts_index ] = (read_time_exp + read_time_imp );
379+ * raw_read_time_out += data_time_per_step [ts_index ];
380+ * inner_metadata_time += metadata_time_per_step [ts_index ];
375381 }
376382
377- mem_monitor_final_run (MEM_MONITOR , & metadata_time_imp , & read_time_imp );
383+ mem_monitor_final_run (MEM_MONITOR , & metadata_time_imp , & read_time_imp , data_wait_time_per_step ,
384+ metadata_wait_time_per_step );
378385 * raw_read_time_out += read_time_imp ;
379386 * inner_metadata_time += metadata_time_imp ;
380387 * total_data_size_out = nts * actual_read_cnt * (6 * sizeof (float ) + 2 * sizeof (int ));
@@ -416,13 +423,12 @@ main(int argc, char *argv[])
416423 assert (MPI_THREAD_MULTIPLE == mpi_thread_lvl_provided );
417424 MPI_Comm_rank (MPI_COMM_WORLD , & MY_RANK );
418425 MPI_Comm_size (MPI_COMM_WORLD , & NUM_RANKS );
419-
420- int sleep_time = 0 ;
421-
422- bench_params params ;
423-
424- char * cfg_file_path = argv [1 ];
425- char * file_name = argv [2 ]; // data file to read
426+ int sleep_time = 0 ;
427+ bench_params params ;
428+ char * cfg_file_path = argv [1 ];
429+ char * file_name = argv [2 ]; // data file to read
430+ unsigned long * data_time_per_step = NULL , * metadata_time_per_step = NULL ;
431+ unsigned long * data_wait_time_per_step = NULL , * metadata_wait_time_per_step = NULL ;
426432
427433 if (MY_RANK == 0 ) {
428434 printf ("Configuration file: %s\n" , argv [1 ]);
@@ -516,6 +522,11 @@ main(int argc, char *argv[])
516522 printf ("Number of particles available per rank: %llu \n" , NUM_PARTICLES );
517523 }
518524
525+ data_time_per_step = malloc (NUM_TIMESTEPS * sizeof (unsigned long ));
526+ metadata_time_per_step = malloc (NUM_TIMESTEPS * sizeof (unsigned long ));
527+ data_wait_time_per_step = malloc (NUM_TIMESTEPS * sizeof (unsigned long ));
528+ metadata_wait_time_per_step = malloc (NUM_TIMESTEPS * sizeof (unsigned long ));
529+
519530 MPI_Barrier (MPI_COMM_WORLD );
520531
521532 MPI_Allreduce (& NUM_PARTICLES , & TOTAL_PARTICLES , 1 , MPI_LONG_LONG , MPI_SUM , MPI_COMM_WORLD );
@@ -537,7 +548,8 @@ main(int argc, char *argv[])
537548 unsigned long raw_read_time , metadata_time , local_data_size ;
538549
539550 int ret = _run_benchmark_read (file_id , fapl , gapl , filespace , params , & local_data_size , & raw_read_time ,
540- & metadata_time );
551+ & metadata_time , data_time_per_step , metadata_time_per_step ,
552+ data_wait_time_per_step , metadata_wait_time_per_step );
541553
542554 if (ret < 0 ) {
543555 if (MY_RANK == 0 )
@@ -558,7 +570,7 @@ main(int argc, char *argv[])
558570
559571 if (MY_RANK == 0 ) {
560572 human_readable value ;
561- char * mode_str = NULL ;
573+ char * mode_str = NULL ;
562574
563575 if (has_vol_async ) {
564576 mode_str = "ASYNC" ;
@@ -617,6 +629,29 @@ main(int argc, char *argv[])
617629 value = format_human_readable (or_bs );
618630 fprintf (params .csv_fs , "observed rate, %.3f, %cB/s\n" , value .value , value .unit );
619631 fprintf (params .csv_fs , "observed time, %.3f, %s\n" , oct_s , "seconds" );
632+ // Per timestep data time
633+ for (int i = 0 ; i < NUM_TIMESTEPS ; i ++ ) {
634+ float t = (float )data_time_per_step [i ] / (1000.0 * 1000.0 );
635+ fprintf (params .csv_fs , "timestep %d data time, %.3f, %s\n" , i , t , "seconds" );
636+ }
637+ // Per timestep inner metadata time
638+ for (int i = 0 ; i < NUM_TIMESTEPS ; i ++ ) {
639+ float t = (float )metadata_time_per_step [i ] / (1000.0 * 1000.0 );
640+ fprintf (params .csv_fs , "timestep %d metadata time, %.3f, %s\n" , i , t , "seconds" );
641+ }
642+ // Print wait time if async is enabled
643+ if (has_vol_async ) {
644+ // Per timestep data wait time
645+ for (int i = 0 ; i < NUM_TIMESTEPS ; i ++ ) {
646+ float t = (float )data_wait_time_per_step [i ] / (1000.0 * 1000.0 );
647+ fprintf (params .csv_fs , "timestep %d data wait time, %.3f, %s\n" , i , t , "seconds" );
648+ }
649+ // Per timestep metadata wait time
650+ for (int i = 0 ; i < NUM_TIMESTEPS ; i ++ ) {
651+ float t = (float )metadata_wait_time_per_step [i ] / (1000.0 * 1000.0 );
652+ fprintf (params .csv_fs , "timestep %d metadata wait time, %.3f, %s\n" , i , t , "seconds" );
653+ }
654+ }
620655 fclose (params .csv_fs );
621656 }
622657 }
@@ -631,6 +666,16 @@ main(int argc, char *argv[])
631666
632667done :
633668 H5close ();
669+
670+ if (data_time_per_step )
671+ free (data_time_per_step );
672+ if (metadata_time_per_step )
673+ free (metadata_time_per_step );
674+ if (data_wait_time_per_step )
675+ free (data_wait_time_per_step );
676+ if (metadata_wait_time_per_step )
677+ free (metadata_wait_time_per_step );
678+
634679 MPI_Finalize ();
635680 return 0 ;
636681}
0 commit comments