Provides several functions for handling configurations among mpi ranks. More...
Typedefs | |
using | SerializedConfiguration = std::array< std::byte, 14 > |
type definition for the serialization of configurations. | |
Functions | |
size_t | getSearchSpaceSize (const std::set< ContainerOption > &containerOptions, const NumberSet< double > &cellSizeFactors, const std::set< TraversalOption > &traversalOptions, const std::set< LoadEstimatorOption > &loadEstimatorOptions, const std::set< DataLayoutOption > &dataLayoutOptions, const std::set< Newton3Option > &newton3Options, const InteractionTypeOption &interactionTypeOption) |
Calculates the maximum number of valid configs from several sets of options. | |
void | generateDistribution (const int numConfigs, const int commSize, const int rank, std::set< ContainerOption > &containerOptions, NumberSet< double > &cellSizeFactors, std::set< TraversalOption > &traversalOptions, std::set< LoadEstimatorOption > &loadEstimatorOptions, std::set< DataLayoutOption > &dataLayoutOptions, std::set< Newton3Option > &newton3Options, const InteractionTypeOption interactionType) |
Calculates which Options the current rank should handle based on the total number of options and ranks. | |
void | distributeConfigurations (std::set< ContainerOption > &containerOptions, NumberSet< double > &cellSizeFactors, std::set< TraversalOption > &traversalOptions, std::set< LoadEstimatorOption > &loadEstimatorOptions, std::set< DataLayoutOption > &dataLayoutOptions, std::set< Newton3Option > &newton3Options, InteractionTypeOption interactionTypeOption, int rank, int commSize) |
Distributes the provided configurations globally for equal work loads. | |
Configuration | findGloballyBestConfiguration (AutoPas_MPI_Comm comm, Configuration localOptimalConfig, long localOptimalTime) |
Handles communication to select the globally best configuration. | |
SerializedConfiguration | serializeConfiguration (Configuration configuration) |
Serializes a configuration object for communication via MPI. | |
std::vector< std::byte > | serializeConfigurations (const std::vector< Configuration > &configurations) |
Serialize a vector of configuration objects into a vector of bytes via serializeConfiguration(). | |
Configuration | deserializeConfiguration (SerializedConfiguration config) |
Recreates a Configuration object from the object obtained by _serializeConfiguration. | |
std::vector< Configuration > | deserializeConfigurations (const std::vector< std::byte > &configurationsSerialized) |
Deserialize a vector of bytes into a vector of configurations. | |
void | distributeRanksInBuckets (AutoPas_MPI_Comm comm, AutoPas_MPI_Comm *bucket, double smoothedHomogeneity, double maxDensity, double MPITuningMaxDifferenceForBucket, double MPITuningWeightForMaxDensity) |
Distribute ranks in buckets, which contain only ranks with similar scenarios. | |
std::vector< Configuration > | gatherConfigurations (AutoPas_MPI_Comm comm, const std::vector< Configuration > &localConfigurations, int root) |
Gather the configuration vectors of all ranks in the communicator into one vector at the root process. | |
template<typename TOption > | |
std::byte | castToByte (TOption option) |
Simply a shorter way of static_casting from Option to std::byte. | |
Provides several functions for handling configurations among mpi ranks.
This includes functionality for (de)serialization of configurations, splitting up search spaces based on ranks, and finding the globally optimal configuration given time measurements.
using autopas::utils::AutoPasConfigurationCommunicator::SerializedConfiguration = typedef std::array<std::byte, 14> |
type definition for the serialization of configurations.
A serialized config is an array of 14 bytes.
|
inline |
Simply a shorter way of static_casting from Option to std::byte.
TOption |
option |
Configuration autopas::utils::AutoPasConfigurationCommunicator::deserializeConfiguration | ( | SerializedConfiguration | config | ) |
Recreates a Configuration object from the object obtained by _serializeConfiguration.
config | The SerializedConfiguration objects returned by _serializeConfiguration. |
std::vector< Configuration > autopas::utils::AutoPasConfigurationCommunicator::deserializeConfigurations | ( | const std::vector< std::byte > & | configurationsSerialized | ) |
Deserialize a vector of bytes into a vector of configurations.
configurationsSerialized |
void autopas::utils::AutoPasConfigurationCommunicator::distributeConfigurations | ( | std::set< ContainerOption > & | containerOptions, |
NumberSet< double > & | cellSizeFactors, | ||
std::set< TraversalOption > & | traversalOptions, | ||
std::set< LoadEstimatorOption > & | loadEstimatorOptions, | ||
std::set< DataLayoutOption > & | dataLayoutOptions, | ||
std::set< Newton3Option > & | newton3Options, | ||
InteractionTypeOption | interactionTypeOption, | ||
int | rank, | ||
int | commSize | ||
) |
Distributes the provided configurations globally for equal work loads.
All parameters' values (except for comm) are only relevant at the root node (0). All parameters' values (except for comm) will be changed by this function.
containerOptions | |
cellSizeFactors | |
traversalOptions | |
loadEstimatorOptions | |
dataLayoutOptions | |
newton3Options | |
interactionTypeOption | |
rank | |
commSize |
void autopas::utils::AutoPasConfigurationCommunicator::distributeRanksInBuckets | ( | AutoPas_MPI_Comm | comm, |
AutoPas_MPI_Comm * | bucket, | ||
double | smoothedHomogeneity, | ||
double | maxDensity, | ||
double | MPITuningMaxDifferenceForBucket, | ||
double | MPITuningWeightForMaxDensity | ||
) |
Distribute ranks in buckets, which contain only ranks with similar scenarios.
Each bucket then has its own search space.
If negative (=invalid) values for homogeneity or density are passed, every rank gets its own bucket.
comm | MPI communicator |
bucket | new MPI communicator for its bucket |
smoothedHomogeneity | homogeneity smoothed over last 10 iterations. |
maxDensity | maxDensity smoothed over last 10 iterations. |
MPITuningMaxDifferenceForBucket | For MPI-tuning: Maximum of the relative difference in the comparison metric for two ranks which exchange their tuning information. |
MPITuningWeightForMaxDensity | For MPI-tuning: Weight for maxDensity in the calculation for bucket distribution. |
Configuration autopas::utils::AutoPasConfigurationCommunicator::findGloballyBestConfiguration | ( | AutoPas_MPI_Comm | comm, |
Configuration | localOptimalConfig, | ||
long | localOptimalTime | ||
) |
Handles communication to select the globally best configuration.
comm | The communicator used for sending and receiving the optimal configuration. |
localOptimalConfig | The locally optimal configuration to be compared with others. |
localOptimalTime | The time measured for localOptimalConfig. |
std::vector< Configuration > autopas::utils::AutoPasConfigurationCommunicator::gatherConfigurations | ( | AutoPas_MPI_Comm | comm, |
const std::vector< Configuration > & | localConfigurations, | ||
int | root | ||
) |
Gather the configuration vectors of all ranks in the communicator into one vector at the root process.
comm | |
localConfigurations | |
root |
void autopas::utils::AutoPasConfigurationCommunicator::generateDistribution | ( | const int | numConfigs, |
const int | commSize, | ||
const int | rank, | ||
std::set< ContainerOption > & | containerOptions, | ||
NumberSet< double > & | cellSizeFactors, | ||
std::set< TraversalOption > & | traversalOptions, | ||
std::set< LoadEstimatorOption > & | loadEstimatorOptions, | ||
std::set< DataLayoutOption > & | dataLayoutOptions, | ||
std::set< Newton3Option > & | newton3Options, | ||
const InteractionTypeOption | interactionType | ||
) |
Calculates which Options the current rank should handle based on the total number of options and ranks.
numConfigs | in |
commSize | in |
rank | in |
containerOptions | inout |
cellSizeFactors | inout |
traversalOptions | inout |
loadEstimatorOptions | inout |
dataLayoutOptions | inout |
newton3Options | inout |
interactionType | Handle configurations for this interaction type |
size_t autopas::utils::AutoPasConfigurationCommunicator::getSearchSpaceSize | ( | const std::set< ContainerOption > & | containerOptions, |
const NumberSet< double > & | cellSizeFactors, | ||
const std::set< TraversalOption > & | traversalOptions, | ||
const std::set< LoadEstimatorOption > & | loadEstimatorOptions, | ||
const std::set< DataLayoutOption > & | dataLayoutOptions, | ||
const std::set< Newton3Option > & | newton3Options, | ||
const InteractionTypeOption & | interactionTypeOption | ||
) |
Calculates the maximum number of valid configs from several sets of options.
This does not equal the cartesian product as not all containers are compatible with all traversals.
containerOptions | |
cellSizeFactors | The size of cellSizeFactors will only be taken into account if the NumberSet is finite. |
traversalOptions | |
loadEstimatorOptions | |
dataLayoutOptions | |
newton3Options | |
interactionTypeOption |
SerializedConfiguration autopas::utils::AutoPasConfigurationCommunicator::serializeConfiguration | ( | Configuration | configuration | ) |
Serializes a configuration object for communication via MPI.
configuration | the configuration to be sent. |
std::vector< std::byte > autopas::utils::AutoPasConfigurationCommunicator::serializeConfigurations | ( | const std::vector< Configuration > & | configurations | ) |
Serialize a vector of configuration objects into a vector of bytes via serializeConfiguration().
configurations |