Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 19 additions & 7 deletions commons/h5bench_util.c
Original file line number Diff line number Diff line change
Expand Up @@ -175,7 +175,7 @@ ts_delayed_close(mem_monitor *mon, unsigned long *metadata_time_total, int dset_
if (!mon || !metadata_time_total)
return -1;

time_step * ts_run;
time_step *ts_run;
size_t num_in_progress;
H5ES_status_t op_failed;
unsigned long t1, t2;
Expand Down Expand Up @@ -212,7 +212,7 @@ mem_monitor_check_run(mem_monitor *mon, unsigned long *metadata_time_total, unsi
return -1;
if (!has_vol_async)
return 0;
time_step * ts_run;
time_step *ts_run;
size_t num_in_progress;
hbool_t op_failed;
unsigned long t1, t2, t3, t4;
Expand Down Expand Up @@ -248,14 +248,23 @@ mem_monitor_check_run(mem_monitor *mon, unsigned long *metadata_time_total, unsi
return 0;
}

/**
* data_wait_time_per_step, metadata_wait_time_per_step can
* safely but set to NULL if info is not needed.
*/
int
mem_monitor_final_run(mem_monitor *mon, unsigned long *metadata_time_total, unsigned long *data_time_total)
mem_monitor_final_run(mem_monitor *mon, unsigned long *metadata_time_total, unsigned long *data_time_total,
unsigned long *data_wait_time_per_step, unsigned long *metadata_wait_time_per_step)
{
if (metadata_wait_time_per_step != NULL)
memset(metadata_wait_time_per_step, 0, mon->time_step_cnt * sizeof(unsigned long));
if (data_wait_time_per_step)
memset(data_wait_time_per_step, 0, mon->time_step_cnt * sizeof(unsigned long));
*metadata_time_total = 0;
*data_time_total = 0;
size_t num_in_progress;
hbool_t op_failed;
time_step * ts_run;
time_step *ts_run;
unsigned long t1, t2, t3, t4, t5, t6;
unsigned long meta_time = 0, data_time = 0;
int dset_cnt = 8;
Expand Down Expand Up @@ -292,7 +301,6 @@ mem_monitor_final_run(mem_monitor *mon, unsigned long *metadata_time_total, unsi
ts_run->status = TS_READY;
}
}

t2 = get_time_usec();
meta_time += (t2 - t1);

Expand All @@ -317,6 +325,10 @@ mem_monitor_final_run(mem_monitor *mon, unsigned long *metadata_time_total, unsi

t6 = get_time_usec();

if (metadata_wait_time_per_step != NULL)
metadata_wait_time_per_step[i] = ((t2 - t1) + (t4 - t3));
if (data_wait_time_per_step != NULL)
data_wait_time_per_step[i] = (t3 - t2);
meta_time += ((t2 - t1) + (t4 - t3));
data_time += (t3 - t2);
ts_run->status = TS_DONE;
Expand Down Expand Up @@ -439,7 +451,7 @@ parse_time(char *str_in, duration *time)
if (!time)
time = calloc(1, sizeof(duration));
unsigned long long num = 0;
char * unit_str;
char *unit_str;
parse_unit(str_in, &num, &unit_str);

if (!unit_str)
Expand Down Expand Up @@ -470,7 +482,7 @@ str_to_ull(char *str_in, unsigned long long *num_out)
return -1;
}
unsigned long long num = 0;
char * unit_str;
char *unit_str;
int ret = parse_unit(str_in, &num, &unit_str);
if (ret < 0)
return -1;
Expand Down
23 changes: 12 additions & 11 deletions commons/h5bench_util.h
Original file line number Diff line number Diff line change
Expand Up @@ -102,8 +102,8 @@ typedef struct bench_params {
} access_pattern;

// write_pattern bench_pattern;
char * data_file_path;
char * pattern_name;
char *data_file_path;
char *pattern_name;
int meta_coll; // for write only, metadata collective
int data_coll; // data collective
int cnt_time_step;
Expand All @@ -123,9 +123,9 @@ typedef struct bench_params {
unsigned long chunk_dim_1;
unsigned long chunk_dim_2;
unsigned long chunk_dim_3;
char * csv_path;
char * env_meta_path;
FILE * csv_fs;
char *csv_path;
char *env_meta_path;
FILE *csv_fs;
int file_per_proc;
int align;
unsigned long align_threshold;
Expand All @@ -136,10 +136,10 @@ typedef struct bench_params {
typedef struct data_md {
unsigned long long particle_cnt;
unsigned long long dim_1, dim_2, dim_3;
float * x, *y, *z;
float * px, *py, *pz;
int * id_1;
float * id_2;
float *x, *y, *z;
float *px, *py, *pz;
int *id_1;
float *id_2;
} data_contig_md;

typedef struct csv_hanle {
Expand All @@ -166,7 +166,7 @@ typedef struct mem_monitor {
unsigned long long mem_used;
unsigned long long mem_threshold;
async_mode mode;
time_step * time_steps;
time_step *time_steps;
} mem_monitor;

unsigned long long read_time_val(duration time, time_unit unit);
Expand All @@ -183,7 +183,8 @@ int ts_delayed_close(mem_monitor *mon, unsigned long *metadata_time_tot
int mem_monitor_check_run(mem_monitor *mon, unsigned long *metadata_time_total,
unsigned long *data_time_total);
int mem_monitor_final_run(mem_monitor *mon, unsigned long *metadata_time_total,
unsigned long *data_time_total);
unsigned long *data_time_total, unsigned long *data_wait_time_per_step,
unsigned long *metadata_wait_time_per_step);
// Uniform random number
float uniform_random_number();

Expand Down
8 changes: 4 additions & 4 deletions h5bench_patterns/h5bench_append.c
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ hid_t PARTICLE_COMPOUND_TYPE_SEPARATES[8];

herr_t ierr;
data_contig_md *BUF_STRUCT;
mem_monitor * MEM_MONITOR;
mem_monitor *MEM_MONITOR;

void
print_data(int n)
Expand Down Expand Up @@ -71,7 +71,7 @@ append_h5_data(bench_params params, time_step *ts, hid_t loc, hid_t *dset_ids, h

dapl = H5Pcreate(H5P_DATASET_ACCESS);

int * data_1D_INT, **data_2D_INT, ***data_3D_INT;
int *data_1D_INT, **data_2D_INT, ***data_3D_INT;
float *data_1D_FLOAT, **data_2D_FLOAT, ***data_3D_FLOAT;

if (params.num_dims == 1) {
Expand Down Expand Up @@ -473,7 +473,7 @@ _run_benchmark_modify(hid_t file_id, hid_t fapl, hid_t gapl, hid_t filespace, be
*inner_metadata_time += (meta_time1 + meta_time2 + meta_time3 + meta_time4 + meta_time5);
}

mem_monitor_final_run(MEM_MONITOR, &metadata_time_imp, &read_time_imp);
mem_monitor_final_run(MEM_MONITOR, &metadata_time_imp, &read_time_imp, NULL, NULL);
*raw_read_time_out += read_time_imp;
*inner_metadata_time += metadata_time_imp;
*total_data_size_out = nts * actual_read_cnt * (6 * sizeof(float) + 2 * sizeof(int));
Expand Down Expand Up @@ -657,7 +657,7 @@ main(int argc, char *argv[])

if (MY_RANK == 0) {
human_readable value;
char * mode_str = NULL;
char *mode_str = NULL;

if (has_vol_async) {
mode_str = "ASYNC";
Expand Down
8 changes: 4 additions & 4 deletions h5bench_patterns/h5bench_overwrite.c
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ hid_t PARTICLE_COMPOUND_TYPE_SEPARATES[8];

herr_t ierr;
data_contig_md *BUF_STRUCT;
mem_monitor * MEM_MONITOR;
mem_monitor *MEM_MONITOR;

void
print_data(int n)
Expand Down Expand Up @@ -67,7 +67,7 @@ overwrite_h5_data(bench_params params, time_step *ts, hid_t loc, hid_t *dset_ids

dapl = H5Pcreate(H5P_DATASET_ACCESS);

int * data_1D_INT, **data_2D_INT, ***data_3D_INT;
int *data_1D_INT, **data_2D_INT, ***data_3D_INT;
float *data_1D_FLOAT, **data_2D_FLOAT, ***data_3D_FLOAT;

if (params.num_dims == 1) {
Expand Down Expand Up @@ -449,7 +449,7 @@ _run_benchmark_modify(hid_t file_id, hid_t fapl, hid_t gapl, hid_t filespace, be
*inner_metadata_time += (meta_time1 + meta_time2 + meta_time3 + meta_time4 + meta_time5);
}

mem_monitor_final_run(MEM_MONITOR, &metadata_time_imp, &read_time_imp);
mem_monitor_final_run(MEM_MONITOR, &metadata_time_imp, &read_time_imp, NULL, NULL);
*raw_read_time_out += read_time_imp;
*inner_metadata_time += metadata_time_imp;
*total_data_size_out = nts * actual_read_cnt * (6 * sizeof(float) + 2 * sizeof(int));
Expand Down Expand Up @@ -633,7 +633,7 @@ main(int argc, char *argv[])

if (MY_RANK == 0) {
human_readable value;
char * mode_str = NULL;
char *mode_str = NULL;

if (has_vol_async) {
mode_str = "ASYNC";
Expand Down
77 changes: 61 additions & 16 deletions h5bench_patterns/h5bench_read.c
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ int subfiling = 0;

herr_t ierr;
data_contig_md *BUF_STRUCT;
mem_monitor * MEM_MONITOR;
mem_monitor *MEM_MONITOR;

void
print_data(int n)
Expand Down Expand Up @@ -278,10 +278,14 @@ set_dataspace(bench_params params, unsigned long long try_read_elem_cnt, hid_t *
int
_run_benchmark_read(hid_t file_id, hid_t fapl, hid_t gapl, hid_t filespace, bench_params params,
unsigned long *total_data_size_out, unsigned long *raw_read_time_out,
unsigned long *inner_metadata_time)
unsigned long *inner_metadata_time, unsigned long *data_time_per_step,
unsigned long *metadata_time_per_step, unsigned long *data_wait_time_per_step,
unsigned long *metadata_wait_time_per_step)
{
*raw_read_time_out = 0;
*inner_metadata_time = 0;
*raw_read_time_out = 0;
*inner_metadata_time = 0;
memset(metadata_time_per_step, 0, params.cnt_time_step * sizeof(unsigned long));
memset(data_time_per_step, 0, params.cnt_time_step * sizeof(unsigned long));
int nts = params.cnt_time_step;
unsigned long long read_elem_cnt = params.try_num_particles;
hid_t grp;
Expand Down Expand Up @@ -370,11 +374,14 @@ _run_benchmark_read(hid_t file_id, hid_t fapl, hid_t gapl, hid_t filespace, benc
}
}

*raw_read_time_out += (read_time_exp + read_time_imp);
*inner_metadata_time += (meta_time1 + meta_time2 + meta_time3 + meta_time4 + meta_time5);
metadata_time_per_step[ts_index] = (meta_time1 + meta_time2 + meta_time3 + meta_time4 + meta_time5);
data_time_per_step[ts_index] = (read_time_exp + read_time_imp);
*raw_read_time_out += data_time_per_step[ts_index];
*inner_metadata_time += metadata_time_per_step[ts_index];
}

mem_monitor_final_run(MEM_MONITOR, &metadata_time_imp, &read_time_imp);
mem_monitor_final_run(MEM_MONITOR, &metadata_time_imp, &read_time_imp, data_wait_time_per_step,
metadata_wait_time_per_step);
*raw_read_time_out += read_time_imp;
*inner_metadata_time += metadata_time_imp;
*total_data_size_out = nts * actual_read_cnt * (6 * sizeof(float) + 2 * sizeof(int));
Expand Down Expand Up @@ -416,13 +423,12 @@ main(int argc, char *argv[])
assert(MPI_THREAD_MULTIPLE == mpi_thread_lvl_provided);
MPI_Comm_rank(MPI_COMM_WORLD, &MY_RANK);
MPI_Comm_size(MPI_COMM_WORLD, &NUM_RANKS);

int sleep_time = 0;

bench_params params;

char *cfg_file_path = argv[1];
char *file_name = argv[2]; // data file to read
int sleep_time = 0;
bench_params params;
char *cfg_file_path = argv[1];
char *file_name = argv[2]; // data file to read
unsigned long *data_time_per_step = NULL, *metadata_time_per_step = NULL;
unsigned long *data_wait_time_per_step = NULL, *metadata_wait_time_per_step = NULL;

if (MY_RANK == 0) {
printf("Configuration file: %s\n", argv[1]);
Expand Down Expand Up @@ -516,6 +522,11 @@ main(int argc, char *argv[])
printf("Number of particles available per rank: %llu \n", NUM_PARTICLES);
}

data_time_per_step = malloc(NUM_TIMESTEPS * sizeof(unsigned long));
metadata_time_per_step = malloc(NUM_TIMESTEPS * sizeof(unsigned long));
data_wait_time_per_step = malloc(NUM_TIMESTEPS * sizeof(unsigned long));
metadata_wait_time_per_step = malloc(NUM_TIMESTEPS * sizeof(unsigned long));

MPI_Barrier(MPI_COMM_WORLD);

MPI_Allreduce(&NUM_PARTICLES, &TOTAL_PARTICLES, 1, MPI_LONG_LONG, MPI_SUM, MPI_COMM_WORLD);
Expand All @@ -537,7 +548,8 @@ main(int argc, char *argv[])
unsigned long raw_read_time, metadata_time, local_data_size;

int ret = _run_benchmark_read(file_id, fapl, gapl, filespace, params, &local_data_size, &raw_read_time,
&metadata_time);
&metadata_time, data_time_per_step, metadata_time_per_step,
data_wait_time_per_step, metadata_wait_time_per_step);

if (ret < 0) {
if (MY_RANK == 0)
Expand All @@ -558,7 +570,7 @@ main(int argc, char *argv[])

if (MY_RANK == 0) {
human_readable value;
char * mode_str = NULL;
char *mode_str = NULL;

if (has_vol_async) {
mode_str = "ASYNC";
Expand Down Expand Up @@ -617,6 +629,29 @@ main(int argc, char *argv[])
value = format_human_readable(or_bs);
fprintf(params.csv_fs, "observed rate, %.3f, %cB/s\n", value.value, value.unit);
fprintf(params.csv_fs, "observed time, %.3f, %s\n", oct_s, "seconds");
// Per timestep data time
for (int i = 0; i < NUM_TIMESTEPS; i++) {
float t = (float)data_time_per_step[i] / (1000.0 * 1000.0);
fprintf(params.csv_fs, "timestep %d data time, %.3f, %s\n", i, t, "seconds");
}
// Per timestep inner metadata time
for (int i = 0; i < NUM_TIMESTEPS; i++) {
float t = (float)metadata_time_per_step[i] / (1000.0 * 1000.0);
fprintf(params.csv_fs, "timestep %d metadata time, %.3f, %s\n", i, t, "seconds");
}
// Print wait time if async is enabled
if (has_vol_async) {
// Per timestep data wait time
for (int i = 0; i < NUM_TIMESTEPS; i++) {
float t = (float)data_wait_time_per_step[i] / (1000.0 * 1000.0);
fprintf(params.csv_fs, "timestep %d data wait time, %.3f, %s\n", i, t, "seconds");
}
// Per timestep metadata wait time
for (int i = 0; i < NUM_TIMESTEPS; i++) {
float t = (float)metadata_wait_time_per_step[i] / (1000.0 * 1000.0);
fprintf(params.csv_fs, "timestep %d metadata wait time, %.3f, %s\n", i, t, "seconds");
}
}
fclose(params.csv_fs);
}
}
Expand All @@ -631,6 +666,16 @@ main(int argc, char *argv[])

done:
H5close();

if (data_time_per_step)
free(data_time_per_step);
if (metadata_time_per_step)
free(metadata_time_per_step);
if (data_wait_time_per_step)
free(data_wait_time_per_step);
if (metadata_wait_time_per_step)
free(metadata_wait_time_per_step);

MPI_Finalize();
return 0;
}
Loading