From d1f2bad8cbf404975ab6df08ec32fbad32191dae Mon Sep 17 00:00:00 2001 From: guj Date: Sun, 12 Oct 2025 21:56:21 -0700 Subject: [PATCH 01/10] Added a simple btd example --- CMakeLists.txt | 1 + examples/16_btd_write_parallel.cpp | 316 +++++++++++++++++++++++++++++ 2 files changed, 317 insertions(+) create mode 100644 examples/16_btd_write_parallel.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 3811ca7ab3..b95563619d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -719,6 +719,7 @@ set(openPMD_EXAMPLE_NAMES 13_write_dynamic_configuration 14_toml_template 15_compression + 16_btd_write_parallel ) set(openPMD_PYTHON_EXAMPLE_NAMES 2_read_serial diff --git a/examples/16_btd_write_parallel.cpp b/examples/16_btd_write_parallel.cpp new file mode 100644 index 0000000000..9c1c93b6d4 --- /dev/null +++ b/examples/16_btd_write_parallel.cpp @@ -0,0 +1,316 @@ +/* Copyright 2017-2021 Fabian Koller, Axel Huebl + * + * This file is part of openPMD-api. + * + * openPMD-api is free software: you can redistribute it and/or modify + * it under the terms of of either the GNU General Public License or + * the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * openPMD-api is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License and the GNU Lesser General Public License + * for more details. + * + * You should have received a copy of the GNU General Public License + * and the GNU Lesser General Public License along with openPMD-api. + * If not, see . + */ +#include + +#include + +#include +#include +#include // std::vector + +#include +#include + +using std::cout; +using namespace openPMD; + +// Global verbosity flag +bool m_verbose = false; +bool m_span = false; +bool m_barrier_at_flush = false; + +auto m_blockX = 32ul; +auto m_blockY = 64ul; +auto m_blockZ = 64ul; +auto m_blockTotal = 4; + +/* + * assign a rank to work on a buffer from a snapshot + * a snapshot has multiple buffers + * at a given time. at most one buffer is active for I/O + * and only rank is used to handle a buffer + * + */ +struct Workload +{ + int whichSnapshot; + int whichBuffer; + int whichWorkRank; +}; + +std::vector m_snapshots = {0, 1, 2, 3}; +std::vector m_buffers = {1, 2, 3, 4}; + +// supposed to be +// std::vector m_common_fields={"B","j", "E"}; +// std::vector m_common_comps={"x", "y", "z"}; +// for simplicity +std::vector m_common_fields = {"B"}; +std::vector m_common_comps = {"x"}; + +std::vector getBackends() +{ + auto variants = getVariants(); + std::map extensions{ + {"adios2", "bp"}, {"hdf5", "h5"}}; + std::vector res; + for (auto const &pair : variants) + { + if (pair.second) + { + auto lookup = extensions.find(pair.first); + if (lookup != extensions.end()) + { + std::string extension = lookup->second; + res.push_back(std::move(extension)); + } + } + } + return res; +} + +void setupMeshComp( + openPMD::Container &meshes, int currRank, const Workload &w) +{ + for (auto ff : m_common_fields) + { + for (auto cc : m_common_comps) + { + auto mesh_field = meshes[ff]; + auto curr_mesh_comp = meshes[ff][cc]; + Datatype datatype = determineDatatype(); + Extent global_extent = { + m_blockX * m_blockTotal, m_blockY, m_blockZ}; + Dataset dataset = Dataset(datatype, global_extent); + + curr_mesh_comp.resetDataset(dataset); + if (m_verbose) + { + cout << "Rank : " << currRank << " Prepared a Dataset [" << ff + << "/" << cc << "] of size " << dataset.extent[0] << " x " + << dataset.extent[1] << " x " << dataset.extent[2] + << " and Datatype " << dataset.dtype + << " iteration=" << w.whichSnapshot << '\n'; + } + } + } +} + +void doFlush( + const Workload &w, + const std::unique_ptr &series, + int currRank) +{ + + if (m_barrier_at_flush) + { + if (m_verbose) + std::cout << " Barrier at doFlush(), rank:" << currRank + << std::endl; + MPI_Barrier(MPI_COMM_WORLD); + } + + else + { + if (m_verbose) + std::cout << " At doFlush(), rank:" << currRank << std::endl; + } + + series->iterations[w.whichSnapshot].seriesFlush( + "adios2.engine.preferred_flush_target = \"buffer\""); +} + +void doWork( + const Workload &w, + const std::unique_ptr &series, + int currRank, + std::string const &field_name, + std::string const &comp_name, + double seed) +{ + + bool const first_write_to_iteration = + !series->iterations.contains(w.whichSnapshot); + + auto meshes = series->iterations[w.whichSnapshot].meshes; + + // is this the trouble maker? + series->iterations[w.whichSnapshot].open(); + + if (first_write_to_iteration) + { + setupMeshComp(meshes, currRank, w); + } + + auto mesh_field = meshes[field_name]; + auto mymesh = mesh_field[comp_name]; + + // do work on the assigned rank + if (currRank == w.whichWorkRank) + { + // example shows a 1D domain decomposition in first index + Offset chunk_offset = {m_blockX * (m_blockTotal - w.whichBuffer), 0, 0}; + Extent chunk_extent = {m_blockX, m_blockY, m_blockZ}; + if (m_verbose) + { + cout << "Rank: " << currRank << " At snapshot:" << w.whichSnapshot + << " buffer " << w.whichBuffer << " seed: " << seed; + cout << " box: " << chunk_offset[0] << ", " << chunk_offset[1] + << ", " << chunk_offset[2] << std::endl; + } + + // prepare data block value + auto value = double( + seed + currRank + 0.1 * w.whichSnapshot + 100 * w.whichBuffer); + std::vector local_data( + size_t(m_blockX) * m_blockY * m_blockZ, value); + + if (!m_span) + { + mymesh.storeChunkRaw(local_data.data(), chunk_offset, chunk_extent); + } + else + { + auto numElements = m_blockX * m_blockY * m_blockZ; + auto dynamicMemoryView = + mymesh.storeChunk(chunk_offset, chunk_extent); + std::cout << " span allocation snap:" << w.whichSnapshot << " " + << w.whichBuffer << std::endl; + auto spanBuffer = dynamicMemoryView.currentBuffer(); + + std::memcpy( + spanBuffer.data(), + local_data.data(), + numElements * sizeof(double)); + } + } +} + +int main(int argc, char *argv[]) +{ + MPI_Init(&argc, &argv); + + int mpi_size; + int mpi_rank; + + MPI_Comm_size(MPI_COMM_WORLD, &mpi_size); + MPI_Comm_rank(MPI_COMM_WORLD, &mpi_rank); + + for (int i = 1; i < argc; ++i) + { + if (std::string(argv[i]) == "-v") + { + m_verbose = true; + } + if (std::string(argv[i]) == "-s") + { + m_span = true; + } + if (std::string(argv[i]) == "-b") + { + m_barrier_at_flush = true; + } + } + + if (0 == mpi_rank) + { + std::cout << " Configuration: \n\t[verbose] =" << m_verbose + << "\n\t[span] =" << m_span + << "\n\t[barrier_at_flush] =" << m_barrier_at_flush + << std::endl; + std::cout << " change with -v -s -b respectively " << std::endl; + } + + std::vector workOrders; + auto maxWorkers = std::min(mpi_size, 4); + + int counter = 0; + for (auto snapID : m_snapshots) + { + for (auto bufferID : m_buffers) + { + { + auto workRank = (counter % maxWorkers); + workOrders.push_back(Workload{snapID, bufferID, workRank}); + counter++; + } + } + } + + if (m_blockTotal < mpi_size) + if (0 == mpi_rank) + std::cout << " === WARNING: not all buffers in all snapshots will " + "be touched, expecting " + << m_blockTotal + << " ranks to do all work ==== " << std::endl; + + // std::vector exts = {"bp", "h5"}; + std::vector exts = getBackends(); + for (auto const &ext : exts) + { + if (0 == mpi_rank) + std::cout << "========== I/O with " << ext + << " ========== " << std::endl; + try + { + std::unique_ptr series = std::make_unique( + "../samples/16_btd_%07T." + ext, + Access::CREATE, + MPI_COMM_WORLD); + + series->setIterationEncoding(openPMD::IterationEncoding::fileBased); + series->setMeshesPath("fields"); + + double seed = 0.001; + for (Workload w : workOrders) + { + for (auto ff : m_common_fields) + { + for (auto cc : m_common_comps) + { + doWork(w, series, mpi_rank, ff, cc, seed); + doFlush(w, series, mpi_rank); + seed += 0.001; + std::this_thread::sleep_for( + std::chrono::milliseconds(1000)); + } + } + // later + // doFlush(w, series, mpi_rank); + } + + series->close(); + } + catch (const std::exception &e) + { + if (mpi_rank == 0) + { + std::cerr << ext + << " Error in workload processing: " << e.what() + << std::endl; + } + } + } + + MPI_Finalize(); + + return 0; +} From 0c0ee5504f161f60e915d8c0591b7ede56d9ffed Mon Sep 17 00:00:00 2001 From: guj Date: Mon, 13 Oct 2025 10:08:56 -0700 Subject: [PATCH 02/10] use cpp style copy instead of memcpy --- examples/16_btd_write_parallel.cpp | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/examples/16_btd_write_parallel.cpp b/examples/16_btd_write_parallel.cpp index 9c1c93b6d4..3d2ff0c93e 100644 --- a/examples/16_btd_write_parallel.cpp +++ b/examples/16_btd_write_parallel.cpp @@ -189,17 +189,13 @@ void doWork( } else { - auto numElements = m_blockX * m_blockY * m_blockZ; auto dynamicMemoryView = mymesh.storeChunk(chunk_offset, chunk_extent); std::cout << " span allocation snap:" << w.whichSnapshot << " " << w.whichBuffer << std::endl; auto spanBuffer = dynamicMemoryView.currentBuffer(); - std::memcpy( - spanBuffer.data(), - local_data.data(), - numElements * sizeof(double)); + std::copy(local_data.begin(), local_data.end(), spanBuffer.data()); } } } From d902103ef00ebd4900ea1777a3cf3774a79f9ed5 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 13 Oct 2025 17:09:29 +0000 Subject: [PATCH 03/10] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- examples/16_btd_write_parallel.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/16_btd_write_parallel.cpp b/examples/16_btd_write_parallel.cpp index 3d2ff0c93e..83f704f407 100644 --- a/examples/16_btd_write_parallel.cpp +++ b/examples/16_btd_write_parallel.cpp @@ -195,7 +195,7 @@ void doWork( << w.whichBuffer << std::endl; auto spanBuffer = dynamicMemoryView.currentBuffer(); - std::copy(local_data.begin(), local_data.end(), spanBuffer.data()); + std::copy(local_data.begin(), local_data.end(), spanBuffer.data()); } } } From 6f74be0db5df947622bbdc10e9d320c7592a4074 Mon Sep 17 00:00:00 2001 From: guj Date: Mon, 13 Oct 2025 14:33:14 -0700 Subject: [PATCH 04/10] fixed a bug --- examples/16_btd_write_parallel.cpp | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/examples/16_btd_write_parallel.cpp b/examples/16_btd_write_parallel.cpp index 83f704f407..0dd216bbf4 100644 --- a/examples/16_btd_write_parallel.cpp +++ b/examples/16_btd_write_parallel.cpp @@ -180,12 +180,19 @@ void doWork( // prepare data block value auto value = double( seed + currRank + 0.1 * w.whichSnapshot + 100 * w.whichBuffer); - std::vector local_data( - size_t(m_blockX) * m_blockY * m_blockZ, value); + + auto numElements = size_t(m_blockX) * m_blockY * m_blockZ; + auto input = std::shared_ptr{ + new double[numElements], [](double *d) { delete[] d; }}; + + for (unsigned long i = 0ul; i < numElements; i++) + { + input.get()[i] = value; + } if (!m_span) { - mymesh.storeChunkRaw(local_data.data(), chunk_offset, chunk_extent); + mymesh.storeChunk(input, chunk_offset, chunk_extent); } else { @@ -194,8 +201,8 @@ void doWork( std::cout << " span allocation snap:" << w.whichSnapshot << " " << w.whichBuffer << std::endl; auto spanBuffer = dynamicMemoryView.currentBuffer(); - - std::copy(local_data.begin(), local_data.end(), spanBuffer.data()); + std::copy( + input.get(), input.get() + numElements, spanBuffer.data()); } } } From 3b833c9777f75d91d823990cf0c11fcc65e8954a Mon Sep 17 00:00:00 2001 From: guj Date: Mon, 13 Oct 2025 21:01:41 -0700 Subject: [PATCH 05/10] fixed a warning --- examples/16_btd_write_parallel.cpp | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/examples/16_btd_write_parallel.cpp b/examples/16_btd_write_parallel.cpp index 0dd216bbf4..faab0ff1f1 100644 --- a/examples/16_btd_write_parallel.cpp +++ b/examples/16_btd_write_parallel.cpp @@ -90,9 +90,9 @@ std::vector getBackends() void setupMeshComp( openPMD::Container &meshes, int currRank, const Workload &w) { - for (auto ff : m_common_fields) + for (const auto &ff : m_common_fields) { - for (auto cc : m_common_comps) + for (const auto &cc : m_common_comps) { auto mesh_field = meshes[ff]; auto curr_mesh_comp = meshes[ff][cc]; @@ -182,8 +182,7 @@ void doWork( seed + currRank + 0.1 * w.whichSnapshot + 100 * w.whichBuffer); auto numElements = size_t(m_blockX) * m_blockY * m_blockZ; - auto input = std::shared_ptr{ - new double[numElements], [](double *d) { delete[] d; }}; + auto input = std::shared_ptr(new double[numElements]); for (unsigned long i = 0ul; i < numElements; i++) { @@ -285,9 +284,9 @@ int main(int argc, char *argv[]) double seed = 0.001; for (Workload w : workOrders) { - for (auto ff : m_common_fields) + for (const auto &ff : m_common_fields) { - for (auto cc : m_common_comps) + for (const auto &cc : m_common_comps) { doWork(w, series, mpi_rank, ff, cc, seed); doFlush(w, series, mpi_rank); From 6c37255d02e8e3bb4ba9d6d990e6ac5452c57827 Mon Sep 17 00:00:00 2001 From: guj Date: Mon, 13 Oct 2025 22:30:39 -0700 Subject: [PATCH 06/10] minor polish --- examples/16_btd_write_parallel.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/16_btd_write_parallel.cpp b/examples/16_btd_write_parallel.cpp index faab0ff1f1..a7b420ba22 100644 --- a/examples/16_btd_write_parallel.cpp +++ b/examples/16_btd_write_parallel.cpp @@ -186,7 +186,7 @@ void doWork( for (unsigned long i = 0ul; i < numElements; i++) { - input.get()[i] = value; + input[i] = value; } if (!m_span) From e2270b89e69a42ee6c555e141e5fe83fdc29524b Mon Sep 17 00:00:00 2001 From: guj Date: Tue, 14 Oct 2025 21:39:33 -0700 Subject: [PATCH 07/10] storechunk span needs to be collective --- examples/16_btd_write_parallel.cpp | 153 +++++++++++++++++++++-------- 1 file changed, 113 insertions(+), 40 deletions(-) diff --git a/examples/16_btd_write_parallel.cpp b/examples/16_btd_write_parallel.cpp index a7b420ba22..208ccb2bc7 100644 --- a/examples/16_btd_write_parallel.cpp +++ b/examples/16_btd_write_parallel.cpp @@ -40,7 +40,10 @@ bool m_barrier_at_flush = false; auto m_blockX = 32ul; auto m_blockY = 64ul; auto m_blockZ = 64ul; -auto m_blockTotal = 4; +auto m_workerTotal = 4; + +auto m_diskFlushFrequency = 4; +auto m_adiosFlattenSteps = false; /* * assign a rank to work on a buffer from a snapshot @@ -57,7 +60,7 @@ struct Workload }; std::vector m_snapshots = {0, 1, 2, 3}; -std::vector m_buffers = {1, 2, 3, 4}; +std::vector m_buffers = {1, 2, 3, 4, 5, 6}; // supposed to be // std::vector m_common_fields={"B","j", "E"}; @@ -98,7 +101,7 @@ void setupMeshComp( auto curr_mesh_comp = meshes[ff][cc]; Datatype datatype = determineDatatype(); Extent global_extent = { - m_blockX * m_blockTotal, m_blockY, m_blockZ}; + m_blockX * m_buffers.size(), m_blockY, m_blockZ}; Dataset dataset = Dataset(datatype, global_extent); curr_mesh_comp.resetDataset(dataset); @@ -136,6 +139,20 @@ void doFlush( series->iterations[w.whichSnapshot].seriesFlush( "adios2.engine.preferred_flush_target = \"buffer\""); + + if ((w.whichBuffer % m_diskFlushFrequency) == 0) + { + if (m_adiosFlattenSteps) + { + series->iterations[w.whichSnapshot].seriesFlush( + R"(adios2.engine.preferred_flush_target = "new_step")"); + } + else + { + series->iterations[w.whichSnapshot].seriesFlush( + R"(adios2.engine.preferred_flush_target = "disk")"); + } + } } void doWork( @@ -167,7 +184,8 @@ void doWork( if (currRank == w.whichWorkRank) { // example shows a 1D domain decomposition in first index - Offset chunk_offset = {m_blockX * (m_blockTotal - w.whichBuffer), 0, 0}; + Offset chunk_offset = { + m_blockX * (m_buffers.size() - w.whichBuffer), 0, 0}; Extent chunk_extent = {m_blockX, m_blockY, m_blockZ}; if (m_verbose) { @@ -197,71 +215,123 @@ void doWork( { auto dynamicMemoryView = mymesh.storeChunk(chunk_offset, chunk_extent); - std::cout << " span allocation snap:" << w.whichSnapshot << " " - << w.whichBuffer << std::endl; + auto spanBuffer = dynamicMemoryView.currentBuffer(); std::copy( input.get(), input.get() + numElements, spanBuffer.data()); } } + // span version is collective + else + { + if (m_span) + { + mymesh.storeChunk({0, 0, 0}, {0, 0, 0}).currentBuffer(); + } + } } -int main(int argc, char *argv[]) +void doInit(std::vector &workOrders, int maxWorkers) { - MPI_Init(&argc, &argv); + workOrders.resize(m_snapshots.size() * m_buffers.size()); - int mpi_size; - int mpi_rank; - - MPI_Comm_size(MPI_COMM_WORLD, &mpi_size); - MPI_Comm_rank(MPI_COMM_WORLD, &mpi_rank); + int counter = 0; + for (auto snapID : m_snapshots) + { + for (auto bufferID : m_buffers) + { + { + auto workRank = (counter % maxWorkers); + // workOrders.push_back(Workload{snapID, bufferID, workRank}); + auto pos = (bufferID - 1) * m_snapshots.size() + snapID; + workOrders[pos] = Workload{snapID, bufferID, workRank}; + counter++; + } + } + } +} +void doConfig(int argc, char *argv[], int currRank) +{ for (int i = 1; i < argc; ++i) { - if (std::string(argv[i]) == "-v") + std::string arg = argv[i]; + if (arg == "-v") { m_verbose = true; } - if (std::string(argv[i]) == "-s") + else if (arg == "-s") { m_span = true; } - if (std::string(argv[i]) == "-b") + else if (arg == "-b") { m_barrier_at_flush = true; } + else if (arg == "-f") + { + m_adiosFlattenSteps = true; + } + else if (arg == "-d") + { + if (i + 1 < argc) + { + int value = std::atoi(argv[++i]); + if (value > 0) + m_diskFlushFrequency = value; + else if (0 == currRank) + std::cerr << "Error: -d value must be a positive integer. " + "Using default." + << std::endl; + ; + } + else if (0 == currRank) + std::cerr + << "[Error]: Missing value for -d option. Using default." + << std::endl; + } + else + { + if (0 == currRank) + std::cerr << "[Warning]: Ignoring Unknown option '" << arg + << "'" << std::endl; + } } - if (0 == mpi_rank) + if (0 == currRank) { - std::cout << " Configuration: \n\t[verbose] =" << m_verbose - << "\n\t[span] =" << m_span - << "\n\t[barrier_at_flush] =" << m_barrier_at_flush + std::cout << " Configuration: \n\t[-v verbose] =" << m_verbose + << "\n\t[-s span] =" << m_span + << "\n\t[-b barrier_at_flush] =" << m_barrier_at_flush + << " \n\t[-d diskFlushAfterNumbuffer] = " + << m_diskFlushFrequency + << " \n\t[-f adiosFlattenSteps] = " << m_adiosFlattenSteps << std::endl; - std::cout << " change with -v -s -b respectively " << std::endl; } +} + +int main(int argc, char *argv[]) +{ + MPI_Init(&argc, &argv); + + int mpi_size; + int mpi_rank; + + MPI_Comm_size(MPI_COMM_WORLD, &mpi_size); + MPI_Comm_rank(MPI_COMM_WORLD, &mpi_rank); + + doConfig(argc, argv, mpi_rank); std::vector workOrders; - auto maxWorkers = std::min(mpi_size, 4); + auto maxWorkers = std::min(mpi_size, m_workerTotal); - int counter = 0; - for (auto snapID : m_snapshots) - { - for (auto bufferID : m_buffers) - { - { - auto workRank = (counter % maxWorkers); - workOrders.push_back(Workload{snapID, bufferID, workRank}); - counter++; - } - } - } + doInit(workOrders, maxWorkers); - if (m_blockTotal < mpi_size) + if (m_workerTotal < mpi_size) if (0 == mpi_rank) std::cout << " === WARNING: not all buffers in all snapshots will " "be touched, expecting " - << m_blockTotal + << m_workerTotal << " ranks to do all work ==== " << std::endl; // std::vector exts = {"bp", "h5"}; @@ -273,10 +343,14 @@ int main(int argc, char *argv[]) << " ========== " << std::endl; try { + std::string options = ""; + if (m_adiosFlattenSteps) + options = R"(adios2.engine.parameters.FlattenSteps = "on")"; std::unique_ptr series = std::make_unique( "../samples/16_btd_%07T." + ext, Access::CREATE, - MPI_COMM_WORLD); + MPI_COMM_WORLD, + options); series->setIterationEncoding(openPMD::IterationEncoding::fileBased); series->setMeshesPath("fields"); @@ -289,14 +363,13 @@ int main(int argc, char *argv[]) for (const auto &cc : m_common_comps) { doWork(w, series, mpi_rank, ff, cc, seed); - doFlush(w, series, mpi_rank); seed += 0.001; std::this_thread::sleep_for( std::chrono::milliseconds(1000)); } } - // later - // doFlush(w, series, mpi_rank); + + doFlush(w, series, mpi_rank); } series->close(); From a4bad6d0c46d151cafb4dddfc3c5b04ada575622 Mon Sep 17 00:00:00 2001 From: guj Date: Wed, 15 Oct 2025 10:37:29 -0700 Subject: [PATCH 08/10] removed portion of code for collective span --- examples/16_btd_write_parallel.cpp | 9 --------- 1 file changed, 9 deletions(-) diff --git a/examples/16_btd_write_parallel.cpp b/examples/16_btd_write_parallel.cpp index 208ccb2bc7..02d1639fa3 100644 --- a/examples/16_btd_write_parallel.cpp +++ b/examples/16_btd_write_parallel.cpp @@ -221,14 +221,6 @@ void doWork( input.get(), input.get() + numElements, spanBuffer.data()); } } - // span version is collective - else - { - if (m_span) - { - mymesh.storeChunk({0, 0, 0}, {0, 0, 0}).currentBuffer(); - } - } } void doInit(std::vector &workOrders, int maxWorkers) @@ -242,7 +234,6 @@ void doInit(std::vector &workOrders, int maxWorkers) { { auto workRank = (counter % maxWorkers); - // workOrders.push_back(Workload{snapID, bufferID, workRank}); auto pos = (bufferID - 1) * m_snapshots.size() + snapID; workOrders[pos] = Workload{snapID, bufferID, workRank}; counter++; From 98af1c24de4c102d2bace97ed36f14a5a18d9f11 Mon Sep 17 00:00:00 2001 From: guj Date: Wed, 15 Oct 2025 11:53:42 -0700 Subject: [PATCH 09/10] removed comments --- examples/16_btd_write_parallel.cpp | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/examples/16_btd_write_parallel.cpp b/examples/16_btd_write_parallel.cpp index 02d1639fa3..4d27cf492f 100644 --- a/examples/16_btd_write_parallel.cpp +++ b/examples/16_btd_write_parallel.cpp @@ -62,12 +62,8 @@ struct Workload std::vector m_snapshots = {0, 1, 2, 3}; std::vector m_buffers = {1, 2, 3, 4, 5, 6}; -// supposed to be -// std::vector m_common_fields={"B","j", "E"}; -// std::vector m_common_comps={"x", "y", "z"}; -// for simplicity -std::vector m_common_fields = {"B"}; -std::vector m_common_comps = {"x"}; +std::vector m_common_fields={"B","j", "E"}; +std::vector m_common_comps={"x", "y", "z"}; std::vector getBackends() { @@ -325,7 +321,6 @@ int main(int argc, char *argv[]) << m_workerTotal << " ranks to do all work ==== " << std::endl; - // std::vector exts = {"bp", "h5"}; std::vector exts = getBackends(); for (auto const &ext : exts) { From 593dd19211c3cff924fd86ef078d823eb817de1a Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Wed, 15 Oct 2025 18:54:05 +0000 Subject: [PATCH 10/10] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- examples/16_btd_write_parallel.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/16_btd_write_parallel.cpp b/examples/16_btd_write_parallel.cpp index 4d27cf492f..5e5ef2c9eb 100644 --- a/examples/16_btd_write_parallel.cpp +++ b/examples/16_btd_write_parallel.cpp @@ -62,8 +62,8 @@ struct Workload std::vector m_snapshots = {0, 1, 2, 3}; std::vector m_buffers = {1, 2, 3, 4, 5, 6}; -std::vector m_common_fields={"B","j", "E"}; -std::vector m_common_comps={"x", "y", "z"}; +std::vector m_common_fields = {"B", "j", "E"}; +std::vector m_common_comps = {"x", "y", "z"}; std::vector getBackends() {