From 6c01e3ecbce55821e5322c34271d52c52eeb6bc2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Torbj=C3=B6rn=20Klatt?= Date: Tue, 5 May 2015 09:39:22 +0200 Subject: [PATCH 1/3] cmake: make LTO possible for gcc release builds MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This adds a new CMake option `enable_LTO` when configuring with `CMAKE_BUILD_TYPE=Release` and compiler matches GNU. I want to figure out, whether our PFASST code can benefit from LTO. Signed-off-by: Torbjörn Klatt --- CMakeLists.txt | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 7cd07e72..a2154627 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -16,12 +16,16 @@ set_directory_properties(PROPERTIES EP_PREFIX ${CMAKE_BINARY_DIR}/3rdparty) option(pfasst_DISABLE_LIBCXX "Disable use of LLVM's libc++ when compiling with Clang." ON ) option(pfasst_BUILD_SHARED_LIBS "Build shared libraries." ON ) option(pfasst_BUILD_EXAMPLES "Build example programs." ON ) -CMAKE_DEPENDENT_OPTION(pfasst_INSTALL_EXAMPLES "Install example programs." ON - "pfasst_BUILD_EXAMPLES" OFF) +cmake_dependent_option( + pfasst_INSTALL_EXAMPLES "Install example programs." ON + "pfasst_BUILD_EXAMPLES" OFF) option(pfasst_BUILD_TESTS "Build test suite for PFASST." ON ) option(pfasst_WITH_MPI "Build with MPI enabled." ON ) option(pfasst_WITH_GCC_PROF "Enable excessive debugging & profiling output with GCC." OFF) option(pfasst_DEFAULT_RAND_SEED "Using a hardcoded random seed" ON ) +cmake_dependent_option( + enable_LTO "enable LinkTimeOptimization" OFF + "CMAKE_BUILD_TYPE" Release) if(${pfasst_WITH_MPI}) find_package(MPI REQUIRED) @@ -54,6 +58,12 @@ if(${CMAKE_CXX_COMPILER_ID} MATCHES GNU) if(pfasst_WITH_GCC_PROF) add_to_string_list("${CMAKE_CXX_FLAGS}" CMAKE_CXX_FLAGS "-ggdb3 -pg") endif(pfasst_WITH_GCC_PROF) + if(${CMAKE_BUILD_TYPE} MATCHES "Release" AND ${enable_LTO}) + message(STATUS "enabling Link Time Optimization (LTO)") + set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} -flto -fwhole-program") + set(CMAKE_SHARED_LINKER_FLAGS_RELEASE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE} -flto") + set(CMAKE_MODULE_LINKER_FLAGS_RELEASE "${CMAKE_MODULE_LINKER_FLAGS_RELEASE} -flto") + endif() elseif(${CMAKE_CXX_COMPILER_ID} MATCHES Clang) check_cxx_compiler_flag(-std=c++11 HAVE_STD11) if(HAVE_STD11) From d192a84fb7bef0524cced096f9a112ff7d2b5b22 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Torbj=C3=B6rn=20Klatt?= Date: Wed, 6 May 2015 08:21:33 +0200 Subject: [PATCH 2/3] cmake: move random seed to boris example MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit and don't have it a CMake option any more Signed-off-by: Torbjörn Klatt --- CMakeLists.txt | 11 ----------- cmake/site_config.hpp.in | 4 ---- examples/boris/particle_cloud_impl.hpp | 8 +++----- 3 files changed, 3 insertions(+), 20 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index a2154627..6da33ffb 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -22,7 +22,6 @@ cmake_dependent_option( option(pfasst_BUILD_TESTS "Build test suite for PFASST." ON ) option(pfasst_WITH_MPI "Build with MPI enabled." ON ) option(pfasst_WITH_GCC_PROF "Enable excessive debugging & profiling output with GCC." OFF) -option(pfasst_DEFAULT_RAND_SEED "Using a hardcoded random seed" ON ) cmake_dependent_option( enable_LTO "enable LinkTimeOptimization" OFF "CMAKE_BUILD_TYPE" Release) @@ -43,10 +42,6 @@ if(${pfasst_WITH_MPI}) add_definitions(-DWITH_MPI) endif() -if(pfasst_DEFAULT_RAND_SEED) - set(pfasst_RANDOM_SEED "42") -endif() - # Check for C++11 support if(${CMAKE_CXX_COMPILER_ID} MATCHES GNU) check_cxx_compiler_flag(-std=c++11 HAVE_STD11) @@ -129,12 +124,6 @@ if(${CMAKE_CXX_COMPILER_ID} MATCHES GNU) "build-in profiling support" ) endif() -if(pfasst_RANDOM_SEED) - add_feature_info(DefaultRandomSeed - pfasst_RANDOM_SEED - "using specific default random seed ${pfasst_RANDOM_SEED}" - ) -endif() set(3rdparty_INCLUDES) set(3rdparty_DEPENDEND_LIBS) diff --git a/cmake/site_config.hpp.in b/cmake/site_config.hpp.in index dd488f78..420ca629 100644 --- a/cmake/site_config.hpp.in +++ b/cmake/site_config.hpp.in @@ -3,10 +3,6 @@ #ifndef _PFASST__SITE_CONFIG_HPP #define _PFASST__SITE_CONFIG_HPP -#ifdef PFASST_DEFAULT_RANDOM_SEED - #define PFASST_RANDOM_SEED @pfasst_RANDOM_SEED@ -#endif - #include using namespace std; diff --git a/examples/boris/particle_cloud_impl.hpp b/examples/boris/particle_cloud_impl.hpp index e79eaca5..f1f38250 100644 --- a/examples/boris/particle_cloud_impl.hpp +++ b/examples/boris/particle_cloud_impl.hpp @@ -18,6 +18,8 @@ using namespace std; #include "particle_util.hpp" +#define PFASST_RANDOM_SEED 42 + namespace pfasst { @@ -280,11 +282,7 @@ namespace pfasst precision scale = 1000.0; - #ifdef PFASST_DEFAULT_RANDOM_SEED - default_random_engine rd_gen(PFASST_RANDOM_SEED); - #else - default_random_engine rd_gen(); - #endif + default_random_engine rd_gen(PFASST_RANDOM_SEED); precision max_pos = max(center->pos()); precision max_vel = max(center->vel()); uniform_real_distribution dist_pos(- max_pos / scale, max_pos / scale); From 5d494eff6964b6137e8ac7d5f02cd89a1cae6213 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Torbj=C3=B6rn=20Klatt?= Date: Wed, 6 May 2015 08:22:40 +0200 Subject: [PATCH 3/3] docs: remove random seed explanation MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Torbjörn Klatt --- doc/source/installing.md | 5 ----- 1 file changed, 5 deletions(-) diff --git a/doc/source/installing.md b/doc/source/installing.md index 241d94f6..0b902c08 100644 --- a/doc/source/installing.md +++ b/doc/source/installing.md @@ -85,11 +85,6 @@ latest release from [GitHub][github_releases]. `-Dpfasst_DISABLE_LIBCXX=OFF`. As libc++ is highly experimental on non-Darwin systems, this is a very exotic option. - * There are places in the code (mainly examples) that need a random number generator (RNG). - By default, `-Dpfasst_DEFAULT_RAND_SEED=ON` is set and the seed for the RNGs is set to `42`. - To overwrite this behaviour, set `-Dpfasst_DEFAULT_RAND_SEED=OFF` and - `-Dpfasst_RANDOM_SEED=`. - * __Dependencies__ * __Boost__