You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Enhance FMU Constructor for Distributed MPI Environments #1
In distributed MPI environments, the current design of the fmu constructor in fmi4cpp leads to inefficiencies when thousands of processes simultaneously attempt to unzip an FMU file. This issue proposes an enhancement to the constructor to allow controlled unzipping.
Proposed Change
Introduce a boolean parameter in the fmu constructor to control the unzipping process. This parameter will enable one MPI process to unzip the FMU, while others wait and then directly load the library from the unzipped path.
Code Snippet
fmu::fmu(const fs::path& fmuPath, bool unzipFmu = true) {
// Existing checks and setupif (unzipFmu) {
// Current unzip logic
} else {
// Assume path is to unzipped FMU
resource_ = std::make_shared<fmu_resource>(fmuPath);
modelDescription_ = std::move(parse_model_description(resource_->model_description_path()));
}
}
Rationale
This modification will significantly reduce the filesystem load and enhance performance in MPI-based distributed systems, where only one process needs to perform the unzipping.
Additional Context
The communicator may not always be MPI_COMM_WORLD; it could be a subcommunicator.
The fmu class should remain agnostic of MPI to maintain its design integrity.
Request
Kindly consider this enhancement for upcoming releases to improve fmi4cpp's suitability for large-scale parallel computing environments.
Activity
#1 enhance fmu constructor for moi environment
check if the fmuPath is a directory and modelDescription.xml exists
mv fwd, see feelpp/FMI4cpp#1
mv fzd fmi4cpp, see feelpp/FMI4cpp#1