23 #include "openPMD/config.hpp"
25 #include "openPMD/Dataset.hpp"
26 #include "openPMD/auxiliary/BlockSlicer.hpp"
55 bool operator==(
ChunkInfo const &other)
const;
85 using ChunkTable = std::vector<WrittenChunkInfo>;
87 namespace chunk_assignment
92 using RankMeta = std::map<unsigned int, std::string>;
104 using Assignment = std::map<unsigned int, std::vector<WrittenChunkInfo>>;
115 template <
typename Chunk_t>
116 void mergeChunks(std::vector<Chunk_t> &chunks);
126 mergeChunksFromSameSourceID(std::vector<WrittenChunkInfo>
const &chunks)
127 -> std::map<unsigned int, std::vector<ChunkInfo>>;
138 ChunkTable notAssigned;
181 ChunkTable chunkTable,
218 size_t num_ranks) = 0;
220 virtual std::unique_ptr<Strategy> clone()
const = 0;
305 size_t num_ranks) = 0;
307 virtual std::unique_ptr<PartialStrategy> clone()
const = 0;
327 std::unique_ptr<PartialStrategy> firstPass,
328 std::unique_ptr<Strategy> secondPass);
330 virtual Assignment
assign(
335 size_t num_ranks)
override;
337 virtual std::unique_ptr<Strategy> clone()
const override;
340 std::unique_ptr<PartialStrategy> m_firstPass;
341 std::unique_ptr<Strategy> m_secondPass;
356 size_t num_ranks)
override;
358 virtual std::unique_ptr<Strategy> clone()
const override;
374 size_t num_ranks)
override;
376 virtual std::unique_ptr<Strategy> clone()
const override;
396 size_t num_ranks)
override;
398 [[nodiscard]] std::unique_ptr<Strategy> clone()
const override;
414 size_t num_ranks)
override;
416 [[nodiscard]] std::unique_ptr<Strategy> clone()
const override;
429 ByHostname(std::unique_ptr<Strategy> withinNode);
436 size_t num_ranks)
override;
438 virtual std::unique_ptr<PartialStrategy> clone()
const override;
441 std::unique_ptr<Strategy> m_withinNode;
457 std::unique_ptr<auxiliary::BlockSlicer> blockSlicer,
465 size_t num_ranks)
override;
467 virtual std::unique_ptr<Strategy> clone()
const override;
470 std::unique_ptr<auxiliary::BlockSlicer> blockSlicer;
488 size_t splitAlongDimension = 0;
501 size_t num_ranks)
override;
503 virtual std::unique_ptr<Strategy> clone()
const override;
524 size_t num_ranks)
override;
526 virtual std::unique_ptr<Strategy> clone()
const override;
547 size_t num_ranks)
override;
549 virtual std::unique_ptr<Strategy> clone()
const override;
572 bool methodAvailable(Method);
581 std::string byMethod(Method);
594 chunk_assignment::RankMeta byMethodCollective(MPI_Comm, Method);
599 #undef openPMD_POSIX_AVAILABLE
Public definitions of openPMD-api.
Definition: Date.cpp:29
Represents the meta info around a chunk in a dataset.
Definition: ChunkInfo.hpp:45
Extent extent
size of the chunk
Definition: ChunkInfo.hpp:47
Offset offset
origin of the chunk
Definition: ChunkInfo.hpp:46
Represents the meta info around a chunk that has been written by some data producing application.
Definition: ChunkInfo.hpp:72
unsigned int sourceID
ID of the data source containing the chunk.
Definition: ChunkInfo.hpp:73
Strategy that tries to assign chunks in a balanced manner without arbitrarily cutting chunks.
Definition: ChunkInfo.hpp:487
BinPacking(size_t splitAlongDimension=0)
Definition: ChunkInfo.cpp:736
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.
Definition: ChunkInfo.cpp:740
Alternative to RoundRobin, but instead gives every reader a sequential range of blocks.
Definition: ChunkInfo.hpp:390
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.
Definition: ChunkInfo.cpp:366
Blocks at processs level.
Definition: ChunkInfo.hpp:408
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.
Definition: ChunkInfo.cpp:390
Slice the n-dimensional dataset into hyperslabs and distribute chunks according to them.
Definition: ChunkInfo.hpp:455
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.
Definition: ChunkInfo.cpp:701
Strategy that assigns chunks to be read by processes within the same host that produced the chunk.
Definition: ChunkInfo.hpp:428
PartialAssignment 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.
Definition: ChunkInfo.cpp:434
Strategy that purposefully discards leftover chunk from the PartialAssignment.
Definition: ChunkInfo.hpp:539
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.
Definition: ChunkInfo.cpp:872
Strategy that purposefully fails when the PartialAssignment has leftover chunks.
Definition: ChunkInfo.hpp:516
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.
Definition: ChunkInfo.cpp:847
Combine a PartialStrategy and a Strategy to obtain a Strategy working in two phases.
Definition: ChunkInfo.hpp:325
virtual 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.
Definition: ChunkInfo.cpp:274
Return type for partial chunk assignment strategies.
Definition: ChunkInfo.hpp:137
A chunk distribution strategy that guarantees no complete distribution.
Definition: ChunkInfo.hpp:239
PartialAssignment assign(ChunkTable table, RankMeta const &in, RankMeta const &out, size_t my_rank, size_t num_ranks)
Assign chunks to be loaded to reading processes.
Definition: ChunkInfo.cpp:253
virtual PartialAssignment assign(PartialAssignment partialAssignment, RankMeta const &in, RankMeta const &out, size_t my_rank, size_t num_ranks)=0
Assign chunks to be loaded to reading processes.
Simple strategy that assigns produced chunks to reading processes in a round-Robin manner.
Definition: ChunkInfo.hpp:350
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.
Definition: ChunkInfo.cpp:296
Round-Robin at process level.
Definition: ChunkInfo.hpp:368
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.
Definition: ChunkInfo.cpp:329
Interface for a chunk distribution strategy.
Definition: ChunkInfo.hpp:155
virtual Assignment assign(PartialAssignment partialAssignment, RankMeta const &in, RankMeta const &out, size_t my_rank, size_t num_ranks)=0
Assign chunks to be loaded to reading processes.
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.
Definition: ChunkInfo.cpp:224