AutoPas  3.0.0
Loading...
Searching...
No Matches
ConfigurationAndRankIteratorHandler.h
Go to the documentation of this file.
1
7#pragma once
8
16
17namespace autopas::utils {
26 public:
41 const std::set<ContainerOption> &containerOptions, const std::set<double> &cellSizeFactors,
42 const std::set<TraversalOption> &traversalOptions, const std::set<LoadEstimatorOption> &loadEstimatorOptions,
43 const std::set<DataLayoutOption> &dataLayoutOptions, const std::set<Newton3Option> &newton3Options,
44 const InteractionTypeOption &interactionType, std::set<VectorizationPatternOption> &vecPatternOptions,
45 const int numConfigs, const int commSize)
46 : _containers(containerOptions),
47 _cellSizeFactors(cellSizeFactors),
48 _allowedTraversalOptions(traversalOptions),
49 _allowedLoadEstimatorOptions(loadEstimatorOptions),
50 _dataLayoutOptions(dataLayoutOptions),
51 _newton3Options(newton3Options),
52 _interactionType(interactionType),
53 _vecPatternOptions(vecPatternOptions) {
54 reset(numConfigs, commSize);
55 }
56
63 void advanceIterators(int numConfigs, int commSize);
64
70 void reset(const int numConfigs, const int commSize);
71
82 inline void getConfigIterators(std::set<ContainerOption>::iterator &containerIt,
83 std::set<double>::iterator &cellSizeFactorIt,
84 std::set<TraversalOption>::iterator &traversalIt,
85 std::set<LoadEstimatorOption>::iterator &loadEstimatorIt,
86 std::set<DataLayoutOption>::iterator &dataLayoutIt,
87 std::set<Newton3Option>::iterator &newton3It,
88 std::set<VectorizationPatternOption>::iterator &vecPatternIt) {
89 containerIt = _containerIt;
90 cellSizeFactorIt = _cellSizeFactorIt;
91 traversalIt = _traversalIt;
92 loadEstimatorIt = _loadEstimatorIt;
93 dataLayoutIt = _dataLayoutIt;
94 newton3It = _newton3It;
95 vecPatternIt = _vecPatternIt;
96 }
97
104 [[nodiscard]] inline int getRankIterator() const { return _rankIterator; }
105
111 [[nodiscard]] inline int getInfiniteCellSizeFactorsOffset() const { return _infiniteCellSizeFactorsOffset; }
112
118 [[nodiscard]] inline int getInfiniteCellSizeFactorsBlockSize() const { return _infiniteCellSizeFactorsBlockSize; }
119
124 [[nodiscard]] inline std::set<ContainerOption>::iterator getContainerIterator() const { return _containerIt; }
125
130 [[nodiscard]] inline std::set<double>::iterator getCellSizeFactorIterator() const { return _cellSizeFactorIt; }
131
136 [[nodiscard]] inline std::set<TraversalOption>::iterator getTraversalIterator() const { return _traversalIt; }
137
142 [[nodiscard]] inline std::set<LoadEstimatorOption>::iterator getLoadEstimatorIterator() const {
143 return _loadEstimatorIt;
144 }
145
150 [[nodiscard]] inline std::set<DataLayoutOption>::iterator getDataLayoutIterator() const { return _dataLayoutIt; }
151
156 [[nodiscard]] inline std::set<Newton3Option>::iterator getNewton3Iterator() const { return _newton3It; }
157
162 [[nodiscard]] inline std::set<VectorizationPatternOption>::iterator getVecPatternIterator() const {
163 return _vecPatternIt;
164 }
165
166 private:
170 void selectTraversalsForCurrentContainer();
171
175 void selectLoadEstimatorsForCurrentContainerAndTraversal();
176
181 inline void advanceConfigIterators();
182
183 const std::set<ContainerOption> &_containers;
184 const std::set<double> &_cellSizeFactors;
185 const std::set<TraversalOption> &_allowedTraversalOptions;
186 const std::set<LoadEstimatorOption> &_allowedLoadEstimatorOptions;
187 const std::set<DataLayoutOption> &_dataLayoutOptions;
188 const std::set<Newton3Option> &_newton3Options;
189 const InteractionTypeOption &_interactionType;
190 const std::set<VectorizationPatternOption> &_vecPatternOptions;
191 std::set<TraversalOption> _allowedAndApplicableTraversalOptions;
192 std::set<LoadEstimatorOption> _allowedAndApplicableLoadEstimatorOptions;
193 std::set<ContainerOption>::iterator _containerIt;
194 std::set<double>::iterator _cellSizeFactorIt;
195 std::set<TraversalOption>::iterator _traversalIt;
196 std::set<LoadEstimatorOption>::iterator _loadEstimatorIt;
197 std::set<DataLayoutOption>::iterator _dataLayoutIt;
198 std::set<Newton3Option>::iterator _newton3It;
199 std::set<VectorizationPatternOption>::iterator _vecPatternIt;
200 int _rankIterator;
201 int _remainingBlockSize;
202 int _remainder;
203 int _infiniteCellSizeFactorsOffset;
204 int _infiniteCellSizeFactorsBlockSize;
205};
206
207} // namespace autopas::utils
Functionality needed to iterate through ranks and configurations simultaneously in an evenly distribu...
Definition: ConfigurationAndRankIteratorHandler.h:25
std::set< ContainerOption >::iterator getContainerIterator() const
Getter for containerIterator.
Definition: ConfigurationAndRankIteratorHandler.h:124
std::set< DataLayoutOption >::iterator getDataLayoutIterator() const
Getter for the DataLayoutIterator.
Definition: ConfigurationAndRankIteratorHandler.h:150
int getRankIterator() const
Getter for the rankIterator.
Definition: ConfigurationAndRankIteratorHandler.h:104
std::set< Newton3Option >::iterator getNewton3Iterator() const
Getter for the Newton3Iterator.
Definition: ConfigurationAndRankIteratorHandler.h:156
int getInfiniteCellSizeFactorsOffset() const
Getter for the number of ranks smaller than getRankIterator that have the exact same configs assigned...
Definition: ConfigurationAndRankIteratorHandler.h:111
ConfigurationAndRankIteratorHandler(const std::set< ContainerOption > &containerOptions, const std::set< double > &cellSizeFactors, const std::set< TraversalOption > &traversalOptions, const std::set< LoadEstimatorOption > &loadEstimatorOptions, const std::set< DataLayoutOption > &dataLayoutOptions, const std::set< Newton3Option > &newton3Options, const InteractionTypeOption &interactionType, std::set< VectorizationPatternOption > &vecPatternOptions, const int numConfigs, const int commSize)
Constructor for ConfigurationAndRankIteratorHandler.
Definition: ConfigurationAndRankIteratorHandler.h:40
std::set< double >::iterator getCellSizeFactorIterator() const
Getter for the CellSizeFactorIterator.
Definition: ConfigurationAndRankIteratorHandler.h:130
std::set< VectorizationPatternOption >::iterator getVecPatternIterator() const
Getter for the VectorizationPatternIterator.
Definition: ConfigurationAndRankIteratorHandler.h:162
void reset(const int numConfigs, const int commSize)
Resets all iterators to the beginning, while keeping the containers.
Definition: ConfigurationAndRankIteratorHandler.cpp:80
void getConfigIterators(std::set< ContainerOption >::iterator &containerIt, std::set< double >::iterator &cellSizeFactorIt, std::set< TraversalOption >::iterator &traversalIt, std::set< LoadEstimatorOption >::iterator &loadEstimatorIt, std::set< DataLayoutOption >::iterator &dataLayoutIt, std::set< Newton3Option >::iterator &newton3It, std::set< VectorizationPatternOption >::iterator &vecPatternIt)
Alternative getter for all Configuration iterators.
Definition: ConfigurationAndRankIteratorHandler.h:82
std::set< TraversalOption >::iterator getTraversalIterator() const
Getter for the TraversalIterator.
Definition: ConfigurationAndRankIteratorHandler.h:136
int getInfiniteCellSizeFactorsBlockSize() const
Getter for the number of ranks in total that have the exact same configs assigned to them.
Definition: ConfigurationAndRankIteratorHandler.h:118
void advanceIterators(int numConfigs, int commSize)
Advances the rankIterator (getRankIterator()) and/or the Option iterators for a single step such that...
Definition: ConfigurationAndRankIteratorHandler.cpp:46
std::set< LoadEstimatorOption >::iterator getLoadEstimatorIterator() const
Getter for the LoadEstimatorIterator.
Definition: ConfigurationAndRankIteratorHandler.h:142
In this namespace some helper classes and functions can be found used inside of AutoPas.
Definition: namespaces.h:44