mirror of
https://github.com/OPM/opm-simulators.git
synced 2024-07-07 04:53:03 -05:00
make the build of flow fully parallelizable
so far, the actual specializations of the simulator were compiled into the `libopmsimulators` library and the build of the glue code (`flow.cpp`) thus needed to be deferred until the library was fully built. Since the compilation of the glue code requires a full property hierarchy for handling command line parameters, this arrangement significantly increases the build time for systems with a sufficient number of parallel build processes. ("sufficient" here means 8 or more threads, i.e., a quadcore system with hyperthreading is sufficient provided that it has enough main memory.) the new approach is not to include these objects in `libopmsimulators`, but to directly deal with them in the `flow` binary. this allows all of them and the glue code to be compiled in parallel. compilation time on my machine before this change: ``` > touch ../opm/autodiff/BlackoilModelEbos.hpp; time make -j32 flow 2> /dev/null Scanning dependencies of target opmsimulators [ 2%] Building CXX object CMakeFiles/opmsimulators.dir/opm/simulators/flow_ebos_gasoil.cpp.o [ 2%] Building CXX object CMakeFiles/opmsimulators.dir/opm/simulators/flow_ebos_oilwater.cpp.o [ 2%] Building CXX object CMakeFiles/opmsimulators.dir/opm/simulators/flow_ebos_blackoil.cpp.o [ 2%] Building CXX object CMakeFiles/opmsimulators.dir/opm/simulators/flow_ebos_solvent.cpp.o [ 4%] Building CXX object CMakeFiles/opmsimulators.dir/opm/simulators/flow_ebos_polymer.cpp.o [ 6%] Building CXX object CMakeFiles/opmsimulators.dir/opm/simulators/flow_ebos_energy.cpp.o [ 6%] Building CXX object CMakeFiles/opmsimulators.dir/opm/simulators/flow_ebos_oilwater_polymer.cpp.o [ 6%] Linking CXX static library lib/libopmsimulators.a [ 97%] Built target opmsimulators Scanning dependencies of target flow [100%] Building CXX object CMakeFiles/flow.dir/examples/flow.cpp.o [100%] Linking CXX executable bin/flow [100%] Built target flow real 1m45.692s user 8m47.195s sys 0m11.533s ``` after: ``` > touch ../opm/autodiff/BlackoilModelEbos.hpp; time make -j32 flow 2> /dev/null [ 91%] Built target opmsimulators Scanning dependencies of target flow [ 93%] Building CXX object CMakeFiles/flow.dir/flow/flow.cpp.o [ 95%] Building CXX object CMakeFiles/flow.dir/flow/flow_ebos_gasoil.cpp.o [ 97%] Building CXX object CMakeFiles/flow.dir/flow/flow_ebos_oilwater_polymer.cpp.o [100%] Building CXX object CMakeFiles/flow.dir/flow/flow_ebos_polymer.cpp.o [100%] Building CXX object CMakeFiles/flow.dir/flow/flow_ebos_oilwater.cpp.o [100%] Building CXX object CMakeFiles/flow.dir/flow/flow_ebos_solvent.cpp.o [100%] Building CXX object CMakeFiles/flow.dir/flow/flow_ebos_blackoil.cpp.o [100%] Building CXX object CMakeFiles/flow.dir/flow/flow_ebos_energy.cpp.o [100%] Linking CXX executable bin/flow [100%] Built target flow real 1m21.597s user 8m49.476s sys 0m10.973s ``` (this corresponds to a ~20% reduction of the time spend on waiting for the compiler.)
This commit is contained in:
parent
c5cb088d93
commit
d7efb362a2
|
@ -113,11 +113,26 @@ if (NOT EIGEN3_FOUND)
|
|||
add_dependencies (opmsimulators Eigen3)
|
||||
endif (NOT EIGEN3_FOUND)
|
||||
|
||||
|
||||
|
||||
if (HAVE_OPM_TESTS)
|
||||
include (${CMAKE_CURRENT_SOURCE_DIR}/compareECLFiles.cmake)
|
||||
endif()
|
||||
|
||||
opm_add_test(flow
|
||||
ONLY_COMPILE
|
||||
ALWAYS_ENABLE
|
||||
DEPENDS "opmsimulators"
|
||||
LIBRARIES "opmsimulators"
|
||||
SOURCES
|
||||
flow/flow.cpp
|
||||
flow/flow_ebos_blackoil.cpp
|
||||
flow/flow_ebos_gasoil.cpp
|
||||
flow/flow_ebos_oilwater.cpp
|
||||
flow/flow_ebos_polymer.cpp
|
||||
flow/flow_ebos_solvent.cpp
|
||||
flow/flow_ebos_energy.cpp
|
||||
flow/flow_ebos_oilwater_polymer.cpp)
|
||||
install(TARGETS flow DESTINATION bin)
|
||||
|
||||
include(OpmBashCompletion)
|
||||
opm_add_bash_completion(flow)
|
||||
|
||||
|
|
|
@ -23,17 +23,6 @@
|
|||
# originally generated with the command:
|
||||
# find opm -name '*.c*' -printf '\t%p\n' | sort
|
||||
list (APPEND MAIN_SOURCE_FILES
|
||||
# place the flow_ebos_*.cpp files on top of the list because they
|
||||
# take the longest to compile, and compiling them first speeds up
|
||||
# parallel builds because it allows the jobserver to do better scheduling
|
||||
opm/simulators/flow_ebos_blackoil.cpp
|
||||
opm/simulators/flow_ebos_gasoil.cpp
|
||||
opm/simulators/flow_ebos_oilwater.cpp
|
||||
opm/simulators/flow_ebos_polymer.cpp
|
||||
opm/simulators/flow_ebos_solvent.cpp
|
||||
opm/simulators/flow_ebos_energy.cpp
|
||||
opm/simulators/flow_ebos_oilwater_polymer.cpp
|
||||
|
||||
opm/autodiff/Compat.cpp
|
||||
opm/autodiff/ExtractParallelGridInformationToISTL.cpp
|
||||
opm/autodiff/NewtonIterationBlackoilCPR.cpp
|
||||
|
@ -226,7 +215,6 @@ list (APPEND EXAMPLE_SOURCE_FILES
|
|||
examples/flow_legacy.cpp
|
||||
examples/flow_reorder.cpp
|
||||
examples/flow_sequential.cpp
|
||||
examples/flow.cpp
|
||||
examples/sim_2p_incomp_ad.cpp
|
||||
examples/sim_2p_comp_reorder.cpp
|
||||
examples/sim_simple.cpp
|
||||
|
@ -252,7 +240,6 @@ list (APPEND PROGRAM_SOURCE_FILES
|
|||
examples/sim_2p_incomp.cpp
|
||||
examples/sim_2p_incomp_ad.cpp
|
||||
examples/sim_2p_comp_reorder.cpp
|
||||
examples/flow.cpp
|
||||
examples/flow_legacy.cpp
|
||||
examples/flow_reorder.cpp
|
||||
examples/flow_sequential.cpp
|
||||
|
@ -447,13 +434,6 @@ list (APPEND PUBLIC_HEADER_FILES
|
|||
opm/polymer/TransportSolverTwophaseCompressiblePolymer.hpp
|
||||
opm/polymer/Point2D.hpp
|
||||
opm/polymer/TransportSolverTwophasePolymer.hpp
|
||||
opm/simulators/flow_ebos_blackoil.hpp
|
||||
opm/simulators/flow_ebos_gasoil.hpp
|
||||
opm/simulators/flow_ebos_oilwater.hpp
|
||||
opm/simulators/flow_ebos_polymer.hpp
|
||||
opm/simulators/flow_ebos_solvent.hpp
|
||||
opm/simulators/flow_ebos_energy.hpp
|
||||
opm/simulators/flow_ebos_oilwater_polymer.hpp
|
||||
opm/simulators/ensureDirectoryExists.hpp
|
||||
opm/simulators/ParallelFileMerger.hpp
|
||||
opm/simulators/SimulatorCompressibleTwophase.hpp
|
||||
|
|
|
@ -20,13 +20,13 @@
|
|||
*/
|
||||
#include "config.h"
|
||||
|
||||
#include <opm/simulators/flow_ebos_blackoil.hpp>
|
||||
#include <opm/simulators/flow_ebos_gasoil.hpp>
|
||||
#include <opm/simulators/flow_ebos_oilwater.hpp>
|
||||
#include <opm/simulators/flow_ebos_solvent.hpp>
|
||||
#include <opm/simulators/flow_ebos_polymer.hpp>
|
||||
#include <opm/simulators/flow_ebos_energy.hpp>
|
||||
#include <opm/simulators/flow_ebos_oilwater_polymer.hpp>
|
||||
#include <flow/flow_ebos_blackoil.hpp>
|
||||
#include <flow/flow_ebos_gasoil.hpp>
|
||||
#include <flow/flow_ebos_oilwater.hpp>
|
||||
#include <flow/flow_ebos_solvent.hpp>
|
||||
#include <flow/flow_ebos_polymer.hpp>
|
||||
#include <flow/flow_ebos_energy.hpp>
|
||||
#include <flow/flow_ebos_oilwater_polymer.hpp>
|
||||
|
||||
#include <opm/autodiff/SimulatorFullyImplicitBlackoilEbos.hpp>
|
||||
#include <opm/autodiff/FlowMainEbos.hpp>
|
|
@ -19,7 +19,7 @@
|
|||
// Define making clear that the simulator supports AMG
|
||||
#define FLOW_SUPPORT_AMG 1
|
||||
|
||||
#include <opm/simulators/flow_ebos_blackoil.hpp>
|
||||
#include <flow/flow_ebos_blackoil.hpp>
|
||||
|
||||
#include <opm/material/common/ResetLocale.hpp>
|
||||
#include <opm/grid/CpGrid.hpp>
|
|
@ -16,7 +16,7 @@
|
|||
*/
|
||||
#include "config.h"
|
||||
|
||||
#include <opm/simulators/flow_ebos_energy.hpp>
|
||||
#include <flow/flow_ebos_energy.hpp>
|
||||
|
||||
#include <opm/material/common/ResetLocale.hpp>
|
||||
#include <opm/grid/CpGrid.hpp>
|
|
@ -19,7 +19,7 @@
|
|||
// Define making clear that the simulator supports AMG
|
||||
#define FLOW_SUPPORT_AMG 1
|
||||
|
||||
#include <opm/simulators/flow_ebos_gasoil.hpp>
|
||||
#include <flow/flow_ebos_gasoil.hpp>
|
||||
|
||||
#include <opm/material/common/ResetLocale.hpp>
|
||||
#include <ewoms/models/blackoil/blackoiltwophaseindices.hh>
|
|
@ -19,7 +19,7 @@
|
|||
// Define making clear that the simulator supports AMG
|
||||
#define FLOW_SUPPORT_AMG 1
|
||||
|
||||
#include <opm/simulators/flow_ebos_oilwater.hpp>
|
||||
#include <flow/flow_ebos_oilwater.hpp>
|
||||
|
||||
#include <opm/material/common/ResetLocale.hpp>
|
||||
#include <ewoms/models/blackoil/blackoiltwophaseindices.hh>
|
|
@ -19,7 +19,7 @@
|
|||
// Define making clear that the simulator supports AMG
|
||||
#define FLOW_SUPPORT_AMG 1
|
||||
|
||||
#include <opm/simulators/flow_ebos_oilwater_polymer.hpp>
|
||||
#include <flow/flow_ebos_oilwater_polymer.hpp>
|
||||
|
||||
#include <opm/material/common/ResetLocale.hpp>
|
||||
#include <ewoms/models/blackoil/blackoiltwophaseindices.hh>
|
|
@ -16,7 +16,7 @@
|
|||
*/
|
||||
#include "config.h"
|
||||
|
||||
#include <opm/simulators/flow_ebos_polymer.hpp>
|
||||
#include <flow/flow_ebos_polymer.hpp>
|
||||
|
||||
#include <opm/material/common/ResetLocale.hpp>
|
||||
#include <opm/grid/CpGrid.hpp>
|
|
@ -16,7 +16,7 @@
|
|||
*/
|
||||
#include "config.h"
|
||||
|
||||
#include <opm/simulators/flow_ebos_solvent.hpp>
|
||||
#include <flow/flow_ebos_solvent.hpp>
|
||||
|
||||
#include <opm/material/common/ResetLocale.hpp>
|
||||
#include <opm/grid/CpGrid.hpp>
|
Loading…
Reference in New Issue
Block a user