23#include "openPMD/config.hpp"
25#include "openPMD/Dataset.hpp"
26#include "openPMD/auxiliary/BlockSlicer.hpp"
52 explicit ChunkInfo() =
default;
53 ChunkInfo(Offset, Extent);
55 bool operator==(ChunkInfo
const &other)
const;
71struct WrittenChunkInfo : ChunkInfo
75 explicit WrittenChunkInfo() =
default;
79 WrittenChunkInfo(Offset, Extent,
int sourceID);
80 WrittenChunkInfo(Offset, Extent);
82 bool operator==(WrittenChunkInfo
const &other)
const;
85using ChunkTable = std::vector<WrittenChunkInfo>;
87namespace 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>>;
136 struct PartialAssignment
138 ChunkTable notAssigned;
141 explicit PartialAssignment() =
default;
142 PartialAssignment(ChunkTable notAssigned);
143 PartialAssignment(ChunkTable notAssigned, Assignment assigned);
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;
517 explicit FailingStrategy();
524 size_t num_ranks)
override;
526 virtual std::unique_ptr<Strategy> clone()
const override;
540 explicit DiscardingStrategy();
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
Extent extent
size of the chunk
Definition ChunkInfo.hpp:47
Offset offset
origin of the chunk
Definition ChunkInfo.hpp:46
unsigned int sourceID
ID of the data source containing the chunk.
Definition ChunkInfo.hpp:73
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
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
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
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
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
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