Strategy that tries to assign chunks in a balanced manner without arbitrarily cutting chunks. More...
#include <ChunkInfo.hpp>
Public Member Functions | |
| BinPacking (size_t splitAlongDimension=0) | |
| Assignment | assign (PartialAssignment, RankMeta const &in, RankMeta const &out, size_t my_rank, size_t num_ranks) override |
| Assign chunks to be loaded to reading processes. | |
| virtual std::unique_ptr< Strategy > | clone () const override |
Public Member Functions inherited from openPMD::chunk_assignment::Strategy | |
| Assignment | assign (ChunkTable chunkTable, RankMeta const &in, RankMeta const &out, size_t my_rank, size_t num_ranks) |
| Assign chunks to be loaded to reading processes. | |
Public Attributes | |
| size_t | splitAlongDimension = 0 |
Strategy that tries to assign chunks in a balanced manner without arbitrarily cutting chunks.
Idea: Calculate the ideal amount of data to be loaded per parallel process and cut chunks s.t. no chunk is larger than that ideal size. The resulting problem is an instance of the Bin-Packing problem which can be solved by a factor-2 approximation, meaning that a reading process will be assigned at worst twice the ideal amount of data.
| openPMD::chunk_assignment::BinPacking::BinPacking | ( | size_t | splitAlongDimension = 0 | ) |
| splitAlongDimension | If a chunk needs to be split, split it along this dimension. |
|
overridevirtual |
Assign chunks to be loaded to reading processes.
To be defined by implementors.
| partialAssignment | Two chunktables, one of unassigned chunks and one of chunks that might have already been assigned previously. Merge the unassigned chunks into the partially assigned table. |
| in | Meta information on writing processes, e.g. hostnames. |
| out | Meta information on reading processes, e.g. hostnames. |
| my_rank | Rank identifier for the current process. Will be considered by some distribution strategies that may be called for only a subselection of the data space (e.g. for distributing data within processes on the same compute node in a cluster). |
| num_ranks | Number of processes among which chunks are to be distributed. Will be considered by some distribution strategies that may be called for only a subselection of the data space (e.g. for distributing data within processes on the same compute node in a cluster). |
Implements openPMD::chunk_assignment::Strategy.
|
overridevirtual |
Implements openPMD::chunk_assignment::Strategy.