mirror of
https://github.com/OPM/opm-simulators.git
synced 2025-02-25 18:55:30 -06: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:
@@ -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>
|
||||
Reference in New Issue
Block a user