From a67f009e2875ebc9a7c5dc3c70f3274f54bb2476 Mon Sep 17 00:00:00 2001 From: Ewan Miller Date: Sat, 13 Jul 2024 12:37:13 -0400 Subject: [PATCH 1/5] precompiled header now seems to 'work' but initial build is veeery slow --- CMakeLists.txt | 26 ++++++++++++++++++++++++++ nuTens-pch.hpp | 5 +++++ nuTens/tensors/CMakeLists.txt | 22 ++++++++++++++-------- 3 files changed, 45 insertions(+), 8 deletions(-) create mode 100644 nuTens-pch.hpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 4bae406..312a09a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -7,5 +7,31 @@ find_package(Torch REQUIRED) find_package(Protobuf REQUIRED) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${TORCH_CXX_FLAGS}") + +## if user wants to use pch then we use the pch +## people, especially if developing, might want to use this as including tensor related things +## can be excruciatingly sloow when building +OPTION(USE_PCH "USE_PCH" OFF) +IF(USE_PCH) + message("Using precompiled header") + + add_library(nuTens-pch nuTens-pch.hpp) + + ## the headers included in the PCH will (at some point) depend on which tensor library is being used + IF(TORCH_FOUND) + message( "Including PyTorch includes in the PCH") + message( "TORCH_LIBRARIES = ") + message( "${TORCH_LIBRARIES}") + + target_compile_definitions(nuTens-pch PUBLIC USE_PYTORCH) + SET(PCH_LIBS "${TORCH_LIBRARIES}") + ENDIF() + + target_link_libraries(nuTens-pch PUBLIC "${PCH_LIBS}") + target_precompile_headers(nuTens-pch PUBLIC nuTens-pch.hpp) + set_target_properties(nuTens-pch PROPERTIES LINKER_LANGUAGE CXX) + +ENDIF() ## end USE_PCH block + add_subdirectory(nuTens) add_subdirectory(tests) \ No newline at end of file diff --git a/nuTens-pch.hpp b/nuTens-pch.hpp new file mode 100644 index 0000000..60c18ff --- /dev/null +++ b/nuTens-pch.hpp @@ -0,0 +1,5 @@ +#pragma once + +#if USE_PYTORCH + #include +#endif \ No newline at end of file diff --git a/nuTens/tensors/CMakeLists.txt b/nuTens/tensors/CMakeLists.txt index 54219f5..19699ae 100644 --- a/nuTens/tensors/CMakeLists.txt +++ b/nuTens/tensors/CMakeLists.txt @@ -1,15 +1,21 @@ -IF(TORCH_FOUND) - message( "Found tensor library: PyTorch") - - add_library(tensor STATIC tensor.hpp torch-tensor.cpp) - target_compile_definitions(tensor PUBLIC USE_PYTORCH) - target_link_libraries(tensor PUBLIC "${TORCH_LIBRARIES}") + +add_library(tensor STATIC tensor.hpp torch-tensor.cpp) + +IF(USE_PCH) + target_link_libraries(tensor PUBLIC nuTens-pch) ELSE() - message( FATAL_ERROR "No library found to deal with tensors. Currently only pytorch is available, please install this and try again." ) -ENDIF() + IF(TORCH_FOUND) + message( "Found tensor library: PyTorch") + + target_compile_definitions(tensor PUBLIC USE_PYTORCH) + target_link_libraries(tensor PUBLIC "${TORCH_LIBRARIES}") + ELSE() + message( FATAL_ERROR "No library found to deal with tensors. Currently only pytorch is available, please install this and try again." ) + ENDIF() +ENDIF() target_include_directories(tensor PUBLIC "${CMAKE_SOURCE_DIR}") set_target_properties(tensor PROPERTIES LINKER_LANGUAGE CXX) \ No newline at end of file From 491cf59c9f2251f6fa166c410cb35fd80f2c9ac5 Mon Sep 17 00:00:00 2001 From: Ewan Miller Date: Thu, 18 Jul 2024 07:10:07 -0400 Subject: [PATCH 2/5] add some more std includes to the pch --- nuTens-pch.hpp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/nuTens-pch.hpp b/nuTens-pch.hpp index 60c18ff..6b9e227 100644 --- a/nuTens-pch.hpp +++ b/nuTens-pch.hpp @@ -1,5 +1,13 @@ #pragma once +#include +#include +#include +#include +#include +#include +#include + #if USE_PYTORCH #include #endif \ No newline at end of file From 75deffb66531d7601ba0e405103dc6f3aa37db86 Mon Sep 17 00:00:00 2001 From: Ewan Miller Date: Thu, 18 Jul 2024 07:14:13 -0400 Subject: [PATCH 3/5] properly link pch to tensor target --- nuTens/tensors/CMakeLists.txt | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/nuTens/tensors/CMakeLists.txt b/nuTens/tensors/CMakeLists.txt index 19699ae..949918b 100644 --- a/nuTens/tensors/CMakeLists.txt +++ b/nuTens/tensors/CMakeLists.txt @@ -1,15 +1,16 @@ -add_library(tensor STATIC tensor.hpp torch-tensor.cpp) +IF(TORCH_FOUND) + add_library(tensor STATIC tensor.hpp torch-tensor.cpp) + target_compile_definitions(tensor PUBLIC USE_PYTORCH) +ENDIF() IF(USE_PCH) target_link_libraries(tensor PUBLIC nuTens-pch) ELSE() IF(TORCH_FOUND) - message( "Found tensor library: PyTorch") - - target_compile_definitions(tensor PUBLIC USE_PYTORCH) + target_link_libraries(tensor PUBLIC "${TORCH_LIBRARIES}") ELSE() From c6bf936f210b98fc7ef7273a99a7896065e6f612 Mon Sep 17 00:00:00 2001 From: Ewan Miller Date: Thu, 18 Jul 2024 07:19:28 -0400 Subject: [PATCH 4/5] re-use the pch in subsequent targets after tensor is built --- nuTens/propagator/CMakeLists.txt | 4 ++++ tests/CMakeLists.txt | 33 ++++++++++----------------- tests/{barger-test.cpp => barger.cpp} | 0 3 files changed, 16 insertions(+), 21 deletions(-) rename tests/{barger-test.cpp => barger.cpp} (100%) diff --git a/nuTens/propagator/CMakeLists.txt b/nuTens/propagator/CMakeLists.txt index d72f1f3..4661f76 100644 --- a/nuTens/propagator/CMakeLists.txt +++ b/nuTens/propagator/CMakeLists.txt @@ -9,6 +9,10 @@ add_library( const-density-solver.hpp const-density-solver.cpp ) +IF(USE_PCH) + target_precompile_headers(propagator REUSE_FROM tensor) +ENDIF() + target_link_libraries(propagator PUBLIC tensor constants) target_include_directories(propagator PUBLIC "${CMAKE_SOURCE_DIR}") diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index c0f58d0..a5c0e1a 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -3,27 +3,18 @@ add_library(test-utils test-utils.hpp barger-propagator.hpp) target_link_libraries(test-utils PUBLIC constants) set_target_properties(test-utils PROPERTIES LINKER_LANGUAGE CXX) -add_executable(tensor-basic tensor-basic.cpp) -target_link_libraries(tensor-basic PUBLIC tensor test-utils) -target_include_directories(tensor-basic PUBLIC "${CMAKE_SOURCE_DIR}") +foreach(TESTNAME + barger tensor-basic two-flavour-vacuum two-flavour-const-matter + ) -add_test(NAME tensor-basic-test COMMAND tensor-basic) + add_executable("${TESTNAME}" "${TESTNAME}.cpp") + + IF(USE_PCH) + target_precompile_headers("${TESTNAME}" REUSE_FROM tensor) + ENDIF() + target_link_libraries("${TESTNAME}" PUBLIC test-utils tensor propagator) + target_include_directories("${TESTNAME}" PUBLIC "${CMAKE_SOURCE_DIR}") + add_test(NAME "${TESTNAME}-test" COMMAND "${TESTNAME}") -add_executable(barger barger-test.cpp) -target_link_libraries(barger PUBLIC test-utils) -target_include_directories(barger PUBLIC "${CMAKE_SOURCE_DIR}") - -add_test(NAME barger-test COMMAND barger) - - -add_executable(two-flavour-vacuum two-flavour-vacuum.cpp) -target_link_libraries(two-flavour-vacuum PUBLIC propagator test-utils) - -add_test(NAME two-flavour-vacuum-test COMMAND two-flavour-vacuum) - - -add_executable(two-flavour-const-matter two-flavour-const-matter.cpp) -target_link_libraries(two-flavour-const-matter PUBLIC propagator test-utils) - -add_test(NAME two-flavour-const-matter-test COMMAND two-flavour-const-matter) \ No newline at end of file +endforeach() diff --git a/tests/barger-test.cpp b/tests/barger.cpp similarity index 100% rename from tests/barger-test.cpp rename to tests/barger.cpp From 083fa4aea6e6815c0eedf7833dbbadbe1c3ef18a Mon Sep 17 00:00:00 2001 From: Ewan Miller Date: Thu, 18 Jul 2024 07:20:02 -0400 Subject: [PATCH 5/5] add option to time builds for future build system work --- CMakeLists.txt | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 312a09a..2f4e7cb 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -3,6 +3,13 @@ set(CMAKE_CXX_STANDARD 17) project(nuTens) enable_testing() +## check build times +## have this optional as it's not supported on all CMake platforms +OPTION(BUILD_TIMING "output time to build each target" OFF) +IF(BUILD_TIMING) + set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE "${CMAKE_COMMAND} -E time") +ENDIF() + find_package(Torch REQUIRED) find_package(Protobuf REQUIRED) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${TORCH_CXX_FLAGS}")