diff --git a/commons/h5bench_util.c b/commons/h5bench_util.c index 4598f700..5f898c86 100644 --- a/commons/h5bench_util.c +++ b/commons/h5bench_util.c @@ -587,23 +587,77 @@ _set_io_pattern(bench_params *params_in_out) (params_in_out->io_op == IO_APPEND)) { // file --> mem if (params_in_out->mem_pattern == PATTERN_CONTIG) { if (params_in_out->file_pattern == PATTERN_CONTIG) { - switch (params_in_out->num_dims) { - case 1: - (*params_in_out).access_pattern.pattern_read = CONTIG_1D; - ret = 0; - break; - case 2: - (*params_in_out).access_pattern.pattern_read = CONTIG_2D; - ret = 0; - break; - case 3: - (*params_in_out).access_pattern.pattern_read = CONTIG_3D; - ret = 0; - break; - default: - ret = -1; - printf("%s() failed on line %d\n", __func__, __LINE__); - break; + if (params_in_out->read_option == LDC) { + switch (params_in_out->num_dims) { + case 2: + (*params_in_out).access_pattern.pattern_read = LDC_2D; + ret = 0; + break; + default: + ret = -1; + printf("%s(). Unexpected Dimensions for LDC. failed on line %d\n", __func__, + __LINE__); + break; + } + } + else if (params_in_out->read_option == RDC) { + switch (params_in_out->num_dims) { + case 2: + (*params_in_out).access_pattern.pattern_read = RDC_2D; + ret = 0; + break; + default: + ret = -1; + printf("%s(). Unexpected Dimensions for RDC. failed on line %d\n", __func__, + __LINE__); + break; + } + } + else if (params_in_out->read_option == PRL) { + switch (params_in_out->num_dims) { + case 2: + (*params_in_out).access_pattern.pattern_read = PRL_2D; + ret = 0; + break; + default: + ret = -1; + printf("%s(). Unexpected Dimensions for PRL. failed on line %d\n", __func__, + __LINE__); + break; + } + } + else if (params_in_out->read_option == CS) { + switch (params_in_out->num_dims) { + case 2: + (*params_in_out).access_pattern.pattern_read = CS_2D; + ret = 0; + break; + default: + ret = -1; + printf("%s(). Unexpected Dimensions for CS. failed on line %d\n", __func__, + __LINE__); + break; + } + } + else { + switch (params_in_out->num_dims) { + case 1: + (*params_in_out).access_pattern.pattern_read = CONTIG_1D; + ret = 0; + break; + case 2: + (*params_in_out).access_pattern.pattern_read = CONTIG_2D; + ret = 0; + break; + case 3: + (*params_in_out).access_pattern.pattern_read = CONTIG_3D; + ret = 0; + break; + default: + ret = -1; + printf("%s() failed on line %d\n", __func__, __LINE__); + break; + } } } else if (params_in_out->file_pattern == PATTERN_STRIDED) { @@ -772,15 +826,28 @@ _set_params(char *key, char *val_in, bench_params *params_in_out, int do_write) } } else if (strcmp(key, "READ_OPTION") == 0) { - if (val_in[0] == 'F') { // FULL + if (strcmp(val_in, "FULL") == 0) { // FULL (*params_in_out).read_option = READ_FULL; } - else if (val_in[0] == 'P') { // PARTIAL + else if (strcmp(val_in, "PARTIAL") == 0) { // PARTIAL (*params_in_out).read_option = READ_PARTIAL; } - else if (val_in[0] == 'S') { // STRIDED + else if (strcmp(val_in, "STRIDED") == 0) { // STRIDED (*params_in_out).read_option = READ_STRIDED; } + else if (strcmp(val_in, "LDC") == 0) { + (*params_in_out).read_option = LDC; + } + else if (strcmp(val_in, "RDC") == 0) { + (*params_in_out).read_option = RDC; + } + else if (strcmp(val_in, "PRL") == 0) { + (*params_in_out).read_option = PRL; + } + else if (strcmp(val_in, "CS") == 0) { + (*params_in_out).read_option = CS; + } + else (*params_in_out).read_option = READ_OPTION_INVALID; } @@ -873,12 +940,36 @@ _set_params(char *key, char *val_in, bench_params *params_in_out, int do_write) return -1; (*params_in_out).stride = num; } + else if (strcmp(key, "STRIDE_SIZE_2") == 0) { + unsigned long long num = 0; + if (str_to_ull(val, &num) < 0) + return -1; + (*params_in_out).stride_2 = num; + } + else if (strcmp(key, "STRIDE_SIZE_3") == 0) { + unsigned long long num = 0; + if (str_to_ull(val, &num) < 0) + return -1; + (*params_in_out).stride_3 = num; + } else if (strcmp(key, "BLOCK_SIZE") == 0) { unsigned long long num = 0; if (str_to_ull(val, &num) < 0) return -1; (*params_in_out).block_size = num; } + else if (strcmp(key, "BLOCK_SIZE_2") == 0) { + unsigned long long num = 0; + if (str_to_ull(val, &num) < 0) + return -1; + (*params_in_out).block_size_2 = num; + } + else if (strcmp(key, "BLOCK_SIZE_3") == 0) { + unsigned long long num = 0; + if (str_to_ull(val, &num) < 0) + return -1; + (*params_in_out).block_size_3 = num; + } else if (strcmp(key, "BLOCK_CNT") == 0) { unsigned long long num = 0; if (str_to_ull(val, &num) < 0) @@ -985,7 +1076,11 @@ bench_params_init(bench_params *params_out) (*params_out).num_dims = 1; (*params_out).stride = 0; + (*params_out).stride_2 = 0; + (*params_out).stride_3 = 0; (*params_out).block_size = 0; + (*params_out).block_size_2 = 0; + (*params_out).block_size_3 = 0; (*params_out).block_cnt = 0; (*params_out).dim_1 = 1; (*params_out).dim_2 = 1; @@ -1109,6 +1204,30 @@ read_config(const char *file_path, bench_params *params_out, int do_write) return -1; } } + if (params_out->access_pattern.pattern_read == LDC_2D) { + if (params_out->block_size < 1 || params_out->block_size_2 < 1) { + printf("LDC read requires BLOCK_SIZE/BLOCK_SIZE_2 no less than 1.\n"); + return -1; + } + } + if (params_out->access_pattern.pattern_read == RDC_2D) { + if (params_out->block_size < 1 || params_out->block_size_2 < 1) { + printf("RDC read requires BLOCK_SIZE/BLOCK_SIZE_2 no less than 1.\n"); + return -1; + } + } + if (params_out->access_pattern.pattern_read == PRL_2D) { + if (params_out->block_size < 1 || params_out->block_size_2 < 1) { + printf("PRL read requires BLOCK_SIZE/BLOCK_SIZE_2 no less than 1.\n"); + return -1; + } + } + if (params_out->access_pattern.pattern_read == CS_2D) { + if (params_out->stride < 1 || params_out->stride_2 < 1) { + printf("CS read requires STRIDE_SIZE/STRIDE_SIZE_2 no less than 1.\n"); + return -1; + } + } } if (params_out->subfiling > 0 && params_out->data_coll == 1) { printf("Subfiling does not support collective data buffering for data.\n"); diff --git a/commons/h5bench_util.h b/commons/h5bench_util.h index 8d95fda0..5fc8adb4 100644 --- a/commons/h5bench_util.h +++ b/commons/h5bench_util.h @@ -68,6 +68,10 @@ typedef enum read_pattern { STRIDED_1D, CONTIG_2D, CONTIG_3D, + LDC_2D, + RDC_2D, + CS_2D, + PRL_2D, } read_pattern; typedef enum pattern { @@ -85,7 +89,16 @@ typedef enum io_operation { IO_APPEND, } io_operation; -typedef enum read_option { READ_OPTION_INVALID, READ_FULL, READ_PARTIAL, READ_STRIDED } read_option; +typedef enum read_option { + READ_OPTION_INVALID, + READ_FULL, + READ_PARTIAL, + READ_STRIDED, + LDC, + RDC, + PRL, + CS +} read_option; typedef struct bench_params { io_operation io_op; @@ -115,7 +128,11 @@ typedef struct bench_params { duration compute_time; int num_dims; unsigned long stride; + unsigned long stride_2; + unsigned long stride_3; unsigned long block_size; + unsigned long block_size_2; + unsigned long block_size_3; unsigned long block_cnt; unsigned long dim_1; unsigned long dim_2; diff --git a/h5bench_patterns/README.md b/h5bench_patterns/README.md new file mode 100644 index 00000000..61fca602 --- /dev/null +++ b/h5bench_patterns/README.md @@ -0,0 +1,37 @@ +## Additions to H5Bench_read +4 new patterns are added to the h5bench read benchmark: +1. CS: Refers to the Cross Stencil data access pattern. A block of fixed sides is used to read data from HDF5. This block is given a fixed stride in each dimension and data till end of file is read. +2. LDC: Refers to the Left Diagonal Corner data access pattern. Data is read from two identical blocks of fixed sides, one in the top left corner and the other in the bottom right corner in the 2D HDF5 file +3. RDC: Refers to the Right Diagonal Corner data access pattern. Data is read from two identical blocks of fixed sides, one in the top right corner and the other in the bottom left corner in the 2D HDF5 file +4. PRL: Refers to the Peripheral data access pattern. Data is read from the periphery of the file, which is a frame of fixed width and height around the file. + +These patterns work with a single MPI process. In case multiple processes are used, only the root performs the read operations and all other processes skip the reads. Illustrations of the patterns are given in the table below: + +| Pattern -> | CS | LDC | RDC | PRL | +| ---------- | ---------- | ---------- | ---------- | ---------- | +|Illustration | ![CS Pattern](./images/CS.png) | ![LDC Pattern](./images/LDC.png) | ![RDC Pattern](./images/RDC.png) | ![PRL Pattern](./images/PRL.png) | + + + +Steps for running these benchmarks are the same as the other benchmarks. All parameter and requirements and running instructions remain same, except for the following parameters which are additionally required to be provided in the configuration: +1. CS + | Parameter | Description | + | --------- | ----------- | + | `BLOCK_SIZE` | Size of the block of data along `dim_1` | + | `BLOCK_SIZE_2` | Size of the block of data along `dim_2` | + | `STRIDE_SIZE` | Size of the block of data along `dim_1` | + | `STRIDE_SIZE_2` | Size of the block of data along `dim_2` | + +2. LDC/RDC + | Parameter | Description | + | --------- | ----------- | + | `BLOCK_SIZE` | Size of the block of data along `dim_1` | + | `BLOCK_SIZE_2` | Size of the block of data along `dim_2` | + +3. PRL + | Parameter | Description | + | --------- | ----------- | + | `BLOCK_SIZE` | Size of the frame along `dim_1` | + | `BLOCK_SIZE_2` | Size of the frame along `dim_2` | + +Exmaples of some configurations are provided in `h5bench/samples/sync-write-1d-contig-contig-read-.json` \ No newline at end of file diff --git a/h5bench_patterns/h5bench_read.c b/h5bench_patterns/h5bench_read.c index 15deaff5..59d45558 100644 --- a/h5bench_patterns/h5bench_read.c +++ b/h5bench_patterns/h5bench_read.c @@ -46,7 +46,7 @@ #include #include "../commons/h5bench_util.h" #include "../commons/async_adaptor.h" - +#include #ifdef HAVE_SUBFILING #include "H5FDsubfiling.h" #include "H5FDioc.h" @@ -200,6 +200,180 @@ _set_dataspace_seq_2D(hid_t *filespace_in_out, hid_t *memspace_out, unsigned lon return dim_1 * dim_2; } +/** + * @brief Set the dataspace for LDC access pattern on a 2D datafile and set the memspace based on the number + * of elements to be read + * @param params the configuration for the program + * @param filespace_in to store the id of the selected dataspace + * @param memspace_out to store the memspace created for reading the data + * @return count of elements that would be read + */ +unsigned long +_set_dataspace_LDC_2D(bench_params params, hid_t *filespace_in, hid_t *memspace_out) +{ + + if (MY_RANK != 0) + return 0; + if (!(params.block_size >= params.dim_1 / 10 && params.block_size <= params.dim_1 / 5 && + params.block_size_2 >= params.dim_2 / 10 && params.block_size_2 <= params.dim_2 / 5)) + return 0; + // block sizes should basically hold sw and sh + hsize_t mem_dims[2], file_dims[2]; + mem_dims[0] = 2 * (hsize_t)params.block_size; + mem_dims[1] = (hsize_t)params.block_size_2; + + hsize_t count[2] = {1, 1}; + hsize_t volatile file_starts[2], block[2], + file_starts2[2]; // select start point and range in each dimension. + + block[0] = params.block_size; + block[1] = params.block_size_2; + file_starts[0] = params.dim_1 - block[0]; + file_starts[1] = params.dim_2 - block[1]; + *memspace_out = H5Screate_simple(2, mem_dims, NULL); + H5Sselect_hyperslab(*filespace_in, H5S_SELECT_SET, file_starts, NULL, count, block); + + file_starts[0] = 0; + file_starts[1] = 0; + H5Sselect_hyperslab(*filespace_in, H5S_SELECT_OR, file_starts, NULL, count, block); + return mem_dims[0] * mem_dims[1]; +} + +/** + * @brief Set the dataspace for RDC access pattern on a 2D datafile and set the memspace based on the number + * of elements to be read + * @param params the configuration for the program + * @param filespace_in to store the id of the selected dataspace + * @param memspace_out to store the memspace created for reading the data + * @return count of elements that would be read + */ +unsigned long +_set_dataspace_RDC_2D(bench_params params, hid_t *filespace_in, hid_t *memspace_out) +{ + + if (MY_RANK != 0) + return 0; + if (!(params.block_size >= params.dim_1 / 10 && params.block_size <= params.dim_1 / 5 && + params.block_size_2 >= params.dim_2 / 10 && params.block_size_2 <= params.dim_2 / 5)) + return 0; + + // block sizes should basically hold sw and sh + hsize_t mem_dims[2], file_dims[2]; + mem_dims[0] = 2 * (hsize_t)params.block_size; + mem_dims[1] = (hsize_t)params.block_size_2; + + hsize_t count[2] = {1, 1}; + hsize_t volatile file_starts[2], block[2]; // select start point and range in each dimension. + block[0] = params.block_size; + block[1] = params.block_size_2; + file_starts[0] = params.dim_1 - block[0]; // file offset for each rank + file_starts[1] = 0; + + *memspace_out = H5Screate_simple(2, mem_dims, NULL); + H5Sselect_hyperslab(*filespace_in, H5S_SELECT_SET, file_starts, NULL, count, block); + + file_starts[0] = 0; + file_starts[1] = params.dim_2 - block[1]; + H5Sselect_hyperslab(*filespace_in, H5S_SELECT_OR, file_starts, NULL, count, block); + + return mem_dims[0] * mem_dims[1]; +} + +/** + * @brief Set the dataspace for CS access pattern on a 2D datafile and set the memspace based on the number of + * elements to be read + * @param params the configuration for the program + * @param filespace_in to store the id of the selected dataspace + * @param memspace_out to store the memspace created for reading the data + * @return count of elements that would be read + */ +unsigned long +_set_dataspace_CS_2D(bench_params params, hid_t *filespace_in, hid_t *memspace_out) +{ + + if (MY_RANK != 0) + return 0; + if (params.stride_2 >= params.stride) + return 0; + // block sizes should basically hold sw and sh + // rn params only have one stride + hsize_t volatile count[2] = {1, 1}, file_starts[2], block[2]; + block[0] = params.block_size; + block[1] = params.block_size_2; + + file_starts[0] = 0; // file offset for each rank + file_starts[1] = 0; + H5Sselect_hyperslab(*filespace_in, H5S_SELECT_SET, file_starts, NULL, count, block); + file_starts[0] += params.stride; + file_starts[1] += params.stride_2; + + while (file_starts[0] + block[0] < params.dim_1 && file_starts[1] + block[1] < params.dim_2) { + printf("Reading offset (%d, %d)\n", file_starts[0], file_starts[1]); + H5Sselect_hyperslab(*filespace_in, H5S_SELECT_OR, file_starts, NULL, count, block); + file_starts[0] += params.stride; + file_starts[1] += params.stride_2; + } + hid_t element_count = H5Sget_select_npoints(*filespace_in); + hsize_t mem_dims[2] = {element_count, 1}; + *memspace_out = H5Screate_simple(2, mem_dims, NULL); + printf("Selected number of elements: %ld", element_count); + return element_count; +} + +/** + * @brief Set the dataspace for PRL access pattern on a 2D datafile and set the memspace based on the number + * of elements to be read + * @param params the configuration for the program + * @param filespace_in to store the id of the selected dataspace + * @param memspace_out to store the memspace created for reading the data + * @return count of elements that would be read + */ +unsigned long +_set_dataspace_PRL_2D(bench_params params, hid_t *filespace_in, hid_t *memspace_out) +{ + + if (MY_RANK != 0) + return 0; + if (!(params.block_size >= params.dim_1 / 10 && params.block_size <= params.dim_1 / 5 && + params.block_size_2 >= params.dim_2 / 10 && params.block_size_2 <= params.dim_2 / 5)) + return 0; + // block sizes should basically hold sw and sh + hsize_t mem_dims[2], file_dims[2]; + hsize_t volatile file_starts[2], block[2]; // select start point and range in each dimension. + hsize_t count[2] = {1, 1}; + int64_t total_elements = 0; + + block[0] = params.dim_1; + block[1] = params.block_size_2; // sH + file_starts[0] = 0; // file offset for each rank + file_starts[1] = 0; + H5Sselect_hyperslab(*filespace_in, H5S_SELECT_SET, file_starts, NULL, count, block); // top section + total_elements += block[0] * block[1]; + + file_starts[0] = 0; + file_starts[1] = params.dim_2 - params.block_size_2; + H5Sselect_hyperslab(*filespace_in, H5S_SELECT_OR, file_starts, NULL, count, block); // bottom section + total_elements += block[0] * block[1]; + + block[0] = params.block_size; + block[1] = params.dim_2 - 2 * params.block_size_2; // sH + file_starts[0] = 0; // file offset for each rank + file_starts[1] = params.block_size_2; + H5Sselect_hyperslab(*filespace_in, H5S_SELECT_OR, file_starts, NULL, count, block); // left section + total_elements += block[0] * block[1]; + + file_starts[0] = params.dim_1 - params.block_size; + file_starts[1] = params.block_size_2; + H5Sselect_hyperslab(*filespace_in, H5S_SELECT_OR, file_starts, NULL, count, block); // right section + total_elements += block[0] * block[1]; + + mem_dims[0] = (hid_t)total_elements; + mem_dims[1] = 1; + *memspace_out = H5Screate_simple(2, mem_dims, NULL); + hid_t element_count = H5Sget_select_npoints(*filespace_in); + return element_count; +} + unsigned long _set_dataspace_seq_3D(hid_t *filespace_in_out, hid_t *memspace_out, unsigned long long dim_1, unsigned long long dim_2, unsigned long long dim_3) @@ -268,6 +442,22 @@ set_dataspace(bench_params params, unsigned long long try_read_elem_cnt, hid_t * params.dim_2, params.dim_3); break; + case LDC_2D: + actual_read_cnt = _set_dataspace_LDC_2D(params, filespace_in_out, memspace_out); + break; + + case RDC_2D: + actual_read_cnt = _set_dataspace_RDC_2D(params, filespace_in_out, memspace_out); + break; + + case CS_2D: + actual_read_cnt = _set_dataspace_CS_2D(params, filespace_in_out, memspace_out); + break; + + case PRL_2D: + actual_read_cnt = _set_dataspace_PRL_2D(params, filespace_in_out, memspace_out); + break; + default: printf("Unknown read pattern\n"); break; @@ -291,6 +481,9 @@ _run_benchmark_read(hid_t file_id, hid_t fapl, hid_t gapl, hid_t filespace, benc hid_t memspace; actual_read_cnt = set_dataspace(params, read_elem_cnt, &filespace, &memspace); + if (actual_read_cnt == 0) + return 1; + hid_t plist_id; //, filespace, memspace; if (params.file_per_proc) { diff --git a/h5bench_patterns/images/CS.png b/h5bench_patterns/images/CS.png new file mode 100644 index 00000000..6f45d086 Binary files /dev/null and b/h5bench_patterns/images/CS.png differ diff --git a/h5bench_patterns/images/LDC.png b/h5bench_patterns/images/LDC.png new file mode 100644 index 00000000..4bab0bcd Binary files /dev/null and b/h5bench_patterns/images/LDC.png differ diff --git a/h5bench_patterns/images/PRL.png b/h5bench_patterns/images/PRL.png new file mode 100644 index 00000000..7088da18 Binary files /dev/null and b/h5bench_patterns/images/PRL.png differ diff --git a/h5bench_patterns/images/RDC.png b/h5bench_patterns/images/RDC.png new file mode 100644 index 00000000..e1fe7b2a Binary files /dev/null and b/h5bench_patterns/images/RDC.png differ diff --git a/samples/sync-write-1d-contig-contig-read-CS.json b/samples/sync-write-1d-contig-contig-read-CS.json new file mode 100644 index 00000000..f820d8cb --- /dev/null +++ b/samples/sync-write-1d-contig-contig-read-CS.json @@ -0,0 +1,55 @@ +{ + "mpi": { + "command": "mpirun", + "ranks": "1", + "configuration": "--allow-run-as-root -n 1 --oversubscribe" + }, + "vol": { + }, + "file-system": { + }, + "directory": "storage", + "benchmarks": [ + { + "benchmark": "write", + "file": "test.h5", + "configuration": { + "MEM_PATTERN": "CONTIG", + "FILE_PATTERN": "CONTIG", + "TIMESTEPS": "5", + "DELAYED_CLOSE_TIMESTEPS": "2", + "COLLECTIVE_DATA": "YES", + "COLLECTIVE_METADATA": "YES", + "EMULATED_COMPUTE_TIME_PER_TIMESTEP": "1 s", + "NUM_DIMS": "2", + "DIM_1": "32", + "DIM_2": "32", + "DIM_3": "1", + "CSV_FILE": "output.csv", + "MODE": "SYNC" + } + }, + { + "benchmark": "read", + "file": "test.h5", + "configuration": { + "MEM_PATTERN": "CONTIG", + "FILE_PATTERN": "CONTIG", + "READ_OPTION": "CS", + "TIMESTEPS": "5", + "DELAYED_CLOSE_TIMESTEPS": "2", + "EMULATED_COMPUTE_TIME_PER_TIMESTEP": "1 s", + "NUM_DIMS": "2", + "DIM_1": "32", + "DIM_2": "32", + "DIM_3": "1", + "BLOCK_SIZE": "2", + "BLOCK_SIZE_2": "2", + "STRIDE_SIZE": "4", + "STRIDE_SIZE_2": "3", + "CSV_FILE": "output.csv", + "MODE": "SYNC" + } + } + ] +} \ No newline at end of file diff --git a/samples/sync-write-1d-contig-contig-read-LDC.json b/samples/sync-write-1d-contig-contig-read-LDC.json new file mode 100644 index 00000000..f57aa4cc --- /dev/null +++ b/samples/sync-write-1d-contig-contig-read-LDC.json @@ -0,0 +1,53 @@ +{ + "mpi": { + "command": "mpirun", + "ranks": "4", + "configuration": "--allow-run-as-root -n 2 --oversubscribe" + }, + "vol": { + }, + "file-system": { + }, + "directory": "storage", + "benchmarks": [ + { + "benchmark": "write", + "file": "test.h5", + "configuration": { + "MEM_PATTERN": "CONTIG", + "FILE_PATTERN": "CONTIG", + "TIMESTEPS": "5", + "DELAYED_CLOSE_TIMESTEPS": "2", + "COLLECTIVE_DATA": "YES", + "COLLECTIVE_METADATA": "YES", + "EMULATED_COMPUTE_TIME_PER_TIMESTEP": "1 s", + "NUM_DIMS": "2", + "DIM_1": "6", + "DIM_2": "6", + "DIM_3": "1", + "CSV_FILE": "output.csv", + "MODE": "SYNC" + } + }, + { + "benchmark": "read", + "file": "test.h5", + "configuration": { + "MEM_PATTERN": "CONTIG", + "FILE_PATTERN": "CONTIG", + "READ_OPTION": "LDC", + "TIMESTEPS": "5", + "DELAYED_CLOSE_TIMESTEPS": "2", + "EMULATED_COMPUTE_TIME_PER_TIMESTEP": "1 s", + "NUM_DIMS": "2", + "DIM_1": "6", + "DIM_2": "6", + "DIM_3": "1", + "BLOCK_SIZE": "1", + "BLOCK_SIZE_2": "1", + "CSV_FILE": "output.csv", + "MODE": "SYNC" + } + } + ] +} \ No newline at end of file diff --git a/samples/sync-write-1d-contig-contig-read-PRL.json b/samples/sync-write-1d-contig-contig-read-PRL.json new file mode 100644 index 00000000..87efca94 --- /dev/null +++ b/samples/sync-write-1d-contig-contig-read-PRL.json @@ -0,0 +1,54 @@ +{ + "mpi": { + "command": "mpirun", + "ranks": "4", + "configuration": "--allow-run-as-root -n 2 --oversubscribe" + }, + "vol": { + }, + "file-system": { + }, + "directory": "storage", + "benchmarks": [ + { + "benchmark": "write", + "file": "test.h5", + "configuration": { + "MEM_PATTERN": "CONTIG", + "FILE_PATTERN": "CONTIG", + "TIMESTEPS": "5", + "DELAYED_CLOSE_TIMESTEPS": "2", + "COLLECTIVE_DATA": "YES", + "COLLECTIVE_METADATA": "YES", + "EMULATED_COMPUTE_TIME_PER_TIMESTEP": "1 s", + "NUM_DIMS": "2", + "DIM_1": "6", + "DIM_2": "6", + "DIM_3": "1", + "CSV_FILE": "output.csv", + "MODE": "SYNC" + } + }, + { + "benchmark": "read", + "file": "test.h5", + "configuration": { + "MEM_PATTERN": "CONTIG", + "FILE_PATTERN": "CONTIG", + "READ_OPTION": "PRL", + "TIMESTEPS": "5", + "DELAYED_CLOSE_TIMESTEPS": "2", + "EMULATED_COMPUTE_TIME_PER_TIMESTEP": "1 s", + "NUM_DIMS": "2", + "DIM_1": "6", + "DIM_2": "6", + "DIM_3": "1", + "BLOCK_SIZE": "1", + "BLOCK_SIZE_2": "1", + "BLOCK_SIZE_3": "1", + "CSV_FILE": "output.csv", + "MODE": "SYNC" + } + } + ] +} \ No newline at end of file diff --git a/samples/sync-write-1d-contig-contig-read-RDC.json b/samples/sync-write-1d-contig-contig-read-RDC.json new file mode 100644 index 00000000..6ca6ad30 --- /dev/null +++ b/samples/sync-write-1d-contig-contig-read-RDC.json @@ -0,0 +1,53 @@ +{ + "mpi": { + "command": "mpirun", + "ranks": "4", + "configuration": "--allow-run-as-root -n 2 --oversubscribe" + }, + "vol": { + }, + "file-system": { + }, + "directory": "storage", + "benchmarks": [ + { + "benchmark": "write", + "file": "test.h5", + "configuration": { + "MEM_PATTERN": "CONTIG", + "FILE_PATTERN": "CONTIG", + "TIMESTEPS": "5", + "DELAYED_CLOSE_TIMESTEPS": "2", + "COLLECTIVE_DATA": "YES", + "COLLECTIVE_METADATA": "YES", + "EMULATED_COMPUTE_TIME_PER_TIMESTEP": "1 s", + "NUM_DIMS": "2", + "DIM_1": "6", + "DIM_2": "6", + "DIM_3": "1", + "CSV_FILE": "output.csv", + "MODE": "SYNC" + } + }, + { + "benchmark": "read", + "file": "test.h5", + "configuration": { + "MEM_PATTERN": "CONTIG", + "FILE_PATTERN": "CONTIG", + "READ_OPTION": "RDC", + "TIMESTEPS": "5", + "DELAYED_CLOSE_TIMESTEPS": "2", + "EMULATED_COMPUTE_TIME_PER_TIMESTEP": "1 s", + "NUM_DIMS": "2", + "DIM_1": "6", + "DIM_2": "6", + "DIM_3": "1", + "BLOCK_SIZE": "1", + "BLOCK_SIZE_2": "1", + "CSV_FILE": "output.csv", + "MODE": "SYNC" + } + } + ] +} \ No newline at end of file