AutoPas  3.0.0
Loading...
Searching...
No Matches
GenerateValidConfigurations.h
Go to the documentation of this file.
1
7#pragma once
8
9#include <set>
10
20
28 autopas::ContainerOption container;
33
39 bool operator==(const ContainerConfiguration &rhs) const {
40 return container == rhs.container and cellSizeFactor == rhs.cellSizeFactor;
41 }
42
48 bool operator!=(const ContainerConfiguration &rhs) const { return not(*this == rhs); }
49
55 bool operator<(const ContainerConfiguration &rhs) const {
56 return std::tie(container, cellSizeFactor) < std::tie(rhs.container, rhs.cellSizeFactor);
57 }
58
63 [[nodiscard]] std::string toString() const {
64 return "{Container: " + container.to_string() + " , CellSizeFactor: " + std::to_string(cellSizeFactor) + "}";
65 }
66};
67
74inline std::ostream &operator<<(std::ostream &os, const ContainerConfiguration &configuration) {
75 return os << configuration.toString();
76}
77
95inline std::set<autopas::Configuration> generateAllValidConfigurations(
96 autopas::InteractionTypeOption interactionType,
97 const std::set<autopas::ContainerOption> &allowedContainerOptions = autopas::ContainerOption::getAllOptions(),
98 const std::set<autopas::TraversalOption> &allowedTraversalOptions = autopas::TraversalOption::getAllOptions(),
99 const std::set<autopas::LoadEstimatorOption> &allowedLoadEstimatorOptions =
100 autopas::LoadEstimatorOption::getAllOptions(),
101 const std::set<autopas::DataLayoutOption> &allowedDataLayoutOptions = autopas::DataLayoutOption::getAllOptions(),
102 const std::set<autopas::Newton3Option> &allowedNewton3Options = autopas::Newton3Option::getAllOptions(),
103 const std::set<double> &allowedCellSizeFactors = {0.5, 1.0, 1.5},
104 const std::set<autopas::VectorizationPatternOption> &allowedVectorPatterns =
105 autopas::VectorizationPatternOption::getAllOptions()) {
106 const autopas::NumberSetFinite<double> csfs(allowedCellSizeFactors);
107 if (interactionType == autopas::InteractionTypeOption::all) {
108 std::set<autopas::Configuration> allConfigs;
109 for (auto iType : autopas::InteractionTypeOption::getMostOptions()) {
111 allowedContainerOptions, allowedTraversalOptions, allowedLoadEstimatorOptions, allowedDataLayoutOptions,
112 allowedNewton3Options, &csfs, allowedVectorPatterns, iType);
113 allConfigs.insert(configs.begin(), configs.end());
114 }
115 return allConfigs;
116 } else {
118 allowedContainerOptions, allowedTraversalOptions, allowedLoadEstimatorOptions, allowedDataLayoutOptions,
119 allowedNewton3Options, &csfs, allowedVectorPatterns, interactionType);
120 }
121}
122
131inline std::set<ContainerConfiguration> generateAllValidContainerConfigurations(
132 const std::set<autopas::ContainerOption> &allowedContainerOptions = autopas::ContainerOption::getAllOptions(),
133 const std::set<double> &allowedCellSizeFactors = {0.5, 1.0, 1.5}) {
134 std::set<ContainerConfiguration> containerConfigs;
135 for (const auto &containerOption : allowedContainerOptions) {
136 for (const auto csf : allowedCellSizeFactors) {
137 // Create a dummy configuration to check validity
138 // We use pairwise interaction as default, since it should not matter for container/csf compatibility.
139 // We also use the first valid traversal for this container.
140 const auto interactionType = autopas::InteractionTypeOption(autopas::InteractionTypeOption::pairwise);
141 const auto traversals = autopas::compatibleTraversals::allCompatibleTraversals(containerOption, interactionType);
142 if (traversals.empty()) {
144 "{} has no compatible traversals with interaction type {}! This "
145 "suggests that either that something is incorrect with this "
146 "container or that generateAllValidContainerConfigurations's "
147 "assumption that all containers have at least one {} compatible "
148 "traversal no longer holds!",
149 containerOption.to_string(), interactionType.to_string(), interactionType.to_string());
150 continue;
151 }
152 const auto &traversalOption = *traversals.begin();
154 containerOption, traversalOption, autopas::LoadEstimatorOption::getAllOptions());
155 if (loadEstimators.empty()) {
157 "{} with traversal {} has no applicable load estimators! Either "
158 "something is incorrect or generateAllValidContainerConfigurations's "
159 "assumption that there is always an applicable load estimator (even "
160 "if 'none') no longer holds.");
161 continue;
162 }
163 const auto &loadEstimatorOption = *loadEstimators.begin();
164
165 const autopas::Configuration configuration{containerOption,
166 csf,
167 traversalOption,
168 loadEstimatorOption,
169 autopas::DataLayoutOption::aos,
170 autopas::Newton3Option::enabled,
171 interactionType};
172 if (configuration.hasCompatibleValues()) {
173 containerConfigs.insert({containerOption, csf});
174 }
175 }
176 }
177 return containerConfigs;
178}
static const std::set< TraversalOption > & allCompatibleTraversals(ContainerOption containerOption, const InteractionTypeOption interactionTypeOption)
Lists all traversal options applicable for the given container.
Definition: CompatibleTraversals.h:183
std::set< autopas::Configuration > generateAllValidConfigurations(autopas::InteractionTypeOption interactionType, const std::set< autopas::ContainerOption > &allowedContainerOptions=autopas::ContainerOption::getAllOptions(), const std::set< autopas::TraversalOption > &allowedTraversalOptions=autopas::TraversalOption::getAllOptions(), const std::set< autopas::LoadEstimatorOption > &allowedLoadEstimatorOptions=autopas::LoadEstimatorOption::getAllOptions(), const std::set< autopas::DataLayoutOption > &allowedDataLayoutOptions=autopas::DataLayoutOption::getAllOptions(), const std::set< autopas::Newton3Option > &allowedNewton3Options=autopas::Newton3Option::getAllOptions(), const std::set< double > &allowedCellSizeFactors={0.5, 1.0, 1.5}, const std::set< autopas::VectorizationPatternOption > &allowedVectorPatterns=autopas::VectorizationPatternOption::getAllOptions())
Generates all valid configurations for a given interaction type or all interaction types.
Definition: GenerateValidConfigurations.h:95
std::set< ContainerConfiguration > generateAllValidContainerConfigurations(const std::set< autopas::ContainerOption > &allowedContainerOptions=autopas::ContainerOption::getAllOptions(), const std::set< double > &allowedCellSizeFactors={0.5, 1.0, 1.5})
Generates all valid container configurations.
Definition: GenerateValidConfigurations.h:131
std::ostream & operator<<(std::ostream &os, const ContainerConfiguration &configuration)
Stream operator for ContainerConfiguration.
Definition: GenerateValidConfigurations.h:74
Class containing multiple options that form an algorithm configuration for the pairwise iteration.
Definition: Configuration.h:26
Class describing a finite set of numbers.
Definition: NumberSetFinite.h:19
static void exception(const Exception e)
Handle an exception derived by std::exception.
Definition: ExceptionHandler.h:64
std::set< Configuration > cartesianProduct(const std::set< ContainerOption > &allowedContainerOptions, const std::set< TraversalOption > &allowedTraversalOptions, const std::set< LoadEstimatorOption > &allowedLoadEstimatorOptions, const std::set< DataLayoutOption > &allowedDataLayoutOptions, const std::set< Newton3Option > &allowedNewton3Options, const NumberSet< double > *allowedCellSizeFactors, const std::set< VectorizationPatternOption > &allowedVecPatternOptions, const InteractionTypeOption &interactionType)
Fills the search space with the cartesian product of the given options (minus invalid combinations).
Definition: SearchSpaceGenerators.cpp:18
static std::set< autopas::LoadEstimatorOption > getApplicableLoadEstimators(autopas::ContainerOption container, autopas::TraversalOption traversal, const std::set< autopas::LoadEstimatorOption > &allowedOptions)
If traversal uses load estimation, returns all load estimators in allowedOptions, that are compatible...
Definition: CompatibleLoadEstimators.h:79
This is the main namespace of AutoPas.
Definition: AutoPasDecl.h:34
Struct to hold a container and a cell size factor.
Definition: GenerateValidConfigurations.h:24
double cellSizeFactor
The cell size factor.
Definition: GenerateValidConfigurations.h:32
bool operator==(const ContainerConfiguration &rhs) const
Equality operator.
Definition: GenerateValidConfigurations.h:39
autopas::ContainerOption container
The container option.
Definition: GenerateValidConfigurations.h:28
std::string toString() const
String representation of the configuration.
Definition: GenerateValidConfigurations.h:63
bool operator!=(const ContainerConfiguration &rhs) const
Inequality operator.
Definition: GenerateValidConfigurations.h:48
bool operator<(const ContainerConfiguration &rhs) const
Comparison operator.
Definition: GenerateValidConfigurations.h:55