Skip to content

Commit 690b095

Browse files
committed
Merge pull request #168 from torbjoernk/feature/mpi-logging
logging for MPI runs
2 parents bdc52f6 + a13d3aa commit 690b095

File tree

14 files changed

+275
-190
lines changed

14 files changed

+275
-190
lines changed

CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ option(pfasst_DEFAULT_RAND_SEED "Using a hardcoded random seed"
2626
if(${pfasst_WITH_MPI})
2727
find_package(MPI REQUIRED)
2828
message(STATUS "Using MPI C++ Compiler: ${MPI_CXX_COMPILER}")
29+
add_definitions(-DWITH_MPI)
2930
endif()
3031

3132
if(pfasst_DEFAULT_RAND_SEED)

examples/advection_diffusion/CMakeLists.txt

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,11 @@ if(${pfasst_WITH_MPI})
1919
set(advec_mpi_examples
2020
mpi_pfasst
2121
)
22+
set(all_advec_examples ${advec_mpi_examples})
23+
else()
24+
set(all_advec_examples ${advec_examples})
2225
endif()
2326

24-
set(all_advec_examples
25-
${advec_examples}
26-
${advec_mpi_examples}
27-
)
28-
2927
foreach(example ${all_advec_examples})
3028
add_executable(${example} ${CMAKE_CURRENT_SOURCE_DIR}/${example}.cpp)
3129
if(NOT FFTW_FOUND)

examples/boris/CMakeLists.txt

Lines changed: 28 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -10,34 +10,36 @@ include_directories(
1010
)
1111
add_subdirectory(bindings)
1212

13-
set(boris_examples
14-
boris_sdc
15-
boris_mlsdc
16-
)
17-
18-
foreach(example ${boris_examples})
19-
add_executable(${example} ${CMAKE_CURRENT_SOURCE_DIR}/${example}.cpp)
20-
target_link_libraries(${example}
21-
${3rdparty_DEPENDEND_LIBS}
22-
simple_physics_solver
13+
if(NOT ${pfasst_WITH_MPI})
14+
set(boris_examples
15+
boris_sdc
16+
boris_mlsdc
2317
)
24-
if(${pfasst_NUM_DEPENDEND_TARGETS} GREATER 0)
25-
add_dependencies(${example} ${pfasst_DEPENDEND_TARGETS})
26-
endif()
27-
add_dependencies(${example} simple_physics_solver)
28-
if(pfasst_INSTALL_EXAMPLES)
29-
install(TARGETS ${example} RUNTIME DESTINATION bin)
30-
endif()
31-
endforeach(example)
32-
33-
if(pfasst_BORIS_SAME_LEVELS)
34-
get_target_property(boris_mlsdc_definitions boris_mlsdc COMPILE_DEFINITIONS)
35-
if(${boris_mlsdc_definitions})
36-
list(APPEND boris_mlsdc_definitions "BORIS_SAME_LEVELS")
37-
else()
38-
set(boris_mlsdc_definitions "BORIS_SAME_LEVELS")
18+
19+
foreach(example ${boris_examples})
20+
add_executable(${example} ${CMAKE_CURRENT_SOURCE_DIR}/${example}.cpp)
21+
target_link_libraries(${example}
22+
${3rdparty_DEPENDEND_LIBS}
23+
simple_physics_solver
24+
)
25+
if(${pfasst_NUM_DEPENDEND_TARGETS} GREATER 0)
26+
add_dependencies(${example} ${pfasst_DEPENDEND_TARGETS})
27+
endif()
28+
add_dependencies(${example} simple_physics_solver)
29+
if(pfasst_INSTALL_EXAMPLES)
30+
install(TARGETS ${example} RUNTIME DESTINATION bin)
31+
endif()
32+
endforeach(example)
33+
34+
if(pfasst_BORIS_SAME_LEVELS)
35+
get_target_property(boris_mlsdc_definitions boris_mlsdc COMPILE_DEFINITIONS)
36+
if(${boris_mlsdc_definitions})
37+
list(APPEND boris_mlsdc_definitions "BORIS_SAME_LEVELS")
38+
else()
39+
set(boris_mlsdc_definitions "BORIS_SAME_LEVELS")
40+
endif()
41+
set_target_properties(boris_mlsdc PROPERTIES COMPILE_DEFINITIONS ${boris_mlsdc_definitions})
3942
endif()
40-
set_target_properties(boris_mlsdc PROPERTIES COMPILE_DEFINITIONS ${boris_mlsdc_definitions})
4143
endif()
4244

4345
add_feature_info(Dummy-Boris-MLSDC

examples/scalar/CMakeLists.txt

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,11 @@ include_directories(
66
${3rdparty_INCLUDES}
77
)
88

9-
set(scalar_examples
10-
scalar_sdc
11-
)
9+
if(NOT ${pfasst_WITH_MPI})
10+
set(scalar_examples
11+
scalar_sdc
12+
)
13+
endif()
1214

1315
foreach(example ${scalar_examples})
1416
add_executable(${example} ${CMAKE_CURRENT_SOURCE_DIR}/${example}.cpp)

examples/vanderpol/CMakeLists.txt

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,11 @@ include_directories(
66
${3rdparty_INCLUDES}
77
)
88

9-
set(vanderpol_examples
10-
vdp_sdc
11-
)
9+
if(NOT ${pfasst_WITH_MPI})
10+
set(vanderpol_examples
11+
vdp_sdc
12+
)
13+
endif()
1214

1315
foreach(example ${vanderpol_examples})
1416
add_executable(${example} ${CMAKE_CURRENT_SOURCE_DIR}/${example}.cpp)

include/pfasst.hpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
#ifndef _PFASST_HPP_
22
#define _PFASST_HPP_
33

4+
#include <functional>
5+
using namespace std;
6+
47
#include "pfasst/config.hpp"
58
#include "pfasst/logging.hpp"
69

@@ -15,11 +18,11 @@ namespace pfasst
1518
opts();
1619
}
1720
config::init();
21+
config::read_commandline(argc, argv);
1822
log::start_log(argc, argv);
1923
if (logs) {
2024
logs();
2125
}
22-
config::read_commandline(argc, argv);
2326
}
2427
} // ::pfasst
2528

include/pfasst/config.hpp

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,10 @@ using namespace std;
1414
#include <boost/program_options.hpp>
1515
namespace po = boost::program_options;
1616

17+
#ifdef WITH_MPI
18+
#include <mpi.h>
19+
#endif
20+
1721

1822
namespace pfasst
1923
{
@@ -189,9 +193,27 @@ namespace pfasst
189193
po::store(parsed, options::get_instance().get_variables_map());
190194
po::notify(options::get_instance().get_variables_map());
191195

196+
#ifdef WITH_MPI
197+
int initialized = 0;
198+
MPI_Initialized(&initialized);
199+
assert((bool)initialized);
200+
int rank = 0;
201+
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
202+
#endif
192203
if (options::get_instance().get_variables_map().count("help")) {
193-
cout << print_help() << endl;
194-
if (exit_on_help) exit(0);
204+
#ifdef WITH_MPI
205+
if (rank == 0) {
206+
#endif
207+
cout << print_help() << endl;
208+
#ifdef WITH_MPI
209+
}
210+
#endif
211+
if (exit_on_help) {
212+
#ifdef WITH_MPI
213+
MPI_Finalize();
214+
#endif
215+
exit(0);
216+
}
195217
}
196218
}
197219

@@ -235,6 +257,7 @@ namespace pfasst
235257
static inline void init()
236258
{
237259
options::add_option("Global", "help,h", "display this help message");
260+
options::add_option("Global", "quiet,q", "don't log to stdout");
238261

239262
options::add_option<double>("Duration", "dt", "time step size");
240263
options::add_option<double>("Duration", "tend", "final time of simulation");

include/pfasst/logging.hpp

Lines changed: 38 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,10 @@
1111
#include <string>
1212
using namespace std;
1313

14+
#ifdef WITH_MPI
15+
#include <mpi.h>
16+
#endif
17+
1418
#include <boost/algorithm/string.hpp>
1519

1620
#include "pfasst/site_config.hpp"
@@ -220,10 +224,27 @@ namespace pfasst
220224
id2print.append(LOGGER_ID_LENGTH - id_length, ' ');
221225
}
222226

227+
el::Configurations* default_conf = \
228+
const_cast<el::Configurations*>(el::Loggers::defaultConfigurations());
229+
223230
el::Logger* logger = el::Loggers::getLogger(id);
224231
el::Configurations* conf = logger->configurations();
225232
conf->setGlobally(el::ConfigurationType::MillisecondsWidth,
226-
PFASST_LOGGER_DEFAULT_GLOBAL_MILLISECOND_WIDTH);
233+
default_conf->get(el::Level::Info,
234+
el::ConfigurationType::MillisecondsWidth)->value());
235+
conf->setGlobally(el::ConfigurationType::ToStandardOutput,
236+
default_conf->get(el::Level::Info,
237+
el::ConfigurationType::ToStandardOutput)->value());
238+
#ifdef WITH_MPI
239+
int initialized = 0;
240+
MPI_Initialized(&initialized);
241+
assert((bool)initialized);
242+
int rank = 0;
243+
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
244+
conf->setGlobally(el::ConfigurationType::ToFile, "true");
245+
conf->setGlobally(el::ConfigurationType::Filename,
246+
string("mpi_run_") + to_string(rank) + string(".log"));
247+
#endif
227248
conf->set(el::Level::Info, el::ConfigurationType::Format,
228249
TIMESTAMP + INFO_COLOR + "[" + id2print + ", " + LEVEL + " " + MESSAGE + OUT::reset);
229250
conf->set(el::Level::Debug, el::ConfigurationType::Format,
@@ -251,11 +272,24 @@ namespace pfasst
251272
el::Configurations defaultConf;
252273
defaultConf.setToDefault();
253274

254-
defaultConf.setGlobally(el::ConfigurationType::ToFile, "false");
255-
defaultConf.setGlobally(el::ConfigurationType::ToStandardOutput, "true");
275+
if (!pfasst::config::options::get_instance().get_variables_map().count("quiet")) {
276+
defaultConf.setGlobally(el::ConfigurationType::ToStandardOutput, "true");
277+
} else {
278+
defaultConf.setGlobally(el::ConfigurationType::ToStandardOutput, "false");
279+
}
280+
#ifdef WITH_MPI
281+
int initialized = 0;
282+
MPI_Initialized(&initialized);
283+
assert((bool)initialized);
284+
int rank = 0;
285+
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
286+
defaultConf.setGlobally(el::ConfigurationType::ToFile, "true");
287+
defaultConf.setGlobally(el::ConfigurationType::Filename,
288+
string("mpi_run_") + to_string(rank) + string(".log"));
289+
#endif
256290
defaultConf.setGlobally(el::ConfigurationType::MillisecondsWidth,
257291
PFASST_LOGGER_DEFAULT_GLOBAL_MILLISECOND_WIDTH);
258-
el::Loggers::reconfigureAllLoggers(defaultConf);
292+
el::Loggers::setDefaultConfigurations(defaultConf, true);
259293

260294
add_custom_logger("default");
261295
add_custom_logger("Controller");

tests/CMakeLists.txt

Lines changed: 29 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -6,35 +6,37 @@ include_directories(
66
${CMAKE_CURRENT_SOURCE_DIR}
77
)
88

9-
set(TESTS
10-
test_quadrature
11-
test_polynomial
12-
)
13-
14-
foreach(test ${TESTS})
15-
message(STATUS " ${test}")
16-
add_executable(${test} ${test}.cpp)
17-
if(${pfasst_NUM_DEPENDEND_TARGETS} GREATER 0)
18-
add_dependencies(${test} ${pfasst_DEPENDEND_TARGETS})
19-
endif()
20-
if(${pfasst_TESTS_NUM_DEPENDEND_TARGETS} GREATER 0)
21-
add_dependencies(${test} ${pfasst_TESTS_DEPENDEND_TARGETS})
22-
endif()
23-
target_link_libraries(${test}
24-
${3rdparty_DEPENDEND_LIBS}
25-
${TESTS_3rdparty_DEPENDEND_LIBS}
26-
${pfasst_DEPENDEND_LIBS}
9+
if(NOT ${pfasst_WITH_MPI})
10+
set(TESTS
11+
test_quadrature
12+
test_polynomial
2713
)
28-
if(pfasst_WITH_GCC_PROF AND ${CMAKE_CXX_COMPILER_ID} MATCHES GNU)
29-
set_target_properties(${test}
30-
PROPERTIES COMPILE_FLAGS "${CMAKE_CXX_FLAGS} -ftest-coverage -fprofile-arcs"
31-
LINK_FLAGS "-fprofile-arcs"
14+
15+
foreach(test ${TESTS})
16+
message(STATUS " ${test}")
17+
add_executable(${test} ${test}.cpp)
18+
if(${pfasst_NUM_DEPENDEND_TARGETS} GREATER 0)
19+
add_dependencies(${test} ${pfasst_DEPENDEND_TARGETS})
20+
endif()
21+
if(${pfasst_TESTS_NUM_DEPENDEND_TARGETS} GREATER 0)
22+
add_dependencies(${test} ${pfasst_TESTS_DEPENDEND_TARGETS})
23+
endif()
24+
target_link_libraries(${test}
25+
${3rdparty_DEPENDEND_LIBS}
26+
${TESTS_3rdparty_DEPENDEND_LIBS}
27+
${pfasst_DEPENDEND_LIBS}
3228
)
33-
endif()
34-
add_test(NAME ${test}
35-
COMMAND ${CMAKE_BINARY_DIR}/tests/${test} --gtest_output=xml:${test}_out.xml
36-
)
37-
endforeach(test)
29+
if(pfasst_WITH_GCC_PROF AND ${CMAKE_CXX_COMPILER_ID} MATCHES GNU)
30+
set_target_properties(${test}
31+
PROPERTIES COMPILE_FLAGS "${CMAKE_CXX_FLAGS} -ftest-coverage -fprofile-arcs"
32+
LINK_FLAGS "-fprofile-arcs"
33+
)
34+
endif()
35+
add_test(NAME ${test}
36+
COMMAND ${CMAKE_BINARY_DIR}/tests/${test} --gtest_output=xml:${test}_out.xml
37+
)
38+
endforeach(test)
39+
endif()
3840

3941
if(${pfasst_BUILD_EXAMPLES})
4042
add_subdirectory(examples)

0 commit comments

Comments
 (0)