diff --git a/CMakeLists.txt b/CMakeLists.txt index 604db1ee85..b0b5aac514 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -309,10 +309,10 @@ endif() if(ENABLE_HIP) include(external/hip.cmake) endif() +include(${PROJECT_SOURCE_DIR}/cmake/modules/FindOrFetchMADWorld.cmake) if (TA_TTG) include(${PROJECT_SOURCE_DIR}/cmake/modules/FindOrFetchTTG.cmake) endif(TA_TTG) -include(${PROJECT_SOURCE_DIR}/cmake/modules/FindOrFetchMADWorld.cmake) detect_MADNESS_configuration() include(external/eigen.cmake) # the FetchContent-based version will not work due to BLT target name conflicts diff --git a/INSTALL.md b/INSTALL.md index 720943ac33..1181e2d570 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -40,9 +40,9 @@ Both methods are supported. However, for most users we _strongly_ recommend to b - Boost.Container: header-only - Boost.Test: header-only or (optionally) as a compiled library, *only used for unit testing* - Boost.Range: header-only, *only used for unit testing* -- [BTAS](http://github.com/ValeevGroup/BTAS), tag 3c91f086090390930bba62c6512c4e74a5520e76 . If usable BTAS installation is not found, TiledArray will download and compile +- [BTAS](http://github.com/ValeevGroup/BTAS), tag bf0c376d5cdd6f668174b2a4c67b19634d1c0da7 . If usable BTAS installation is not found, TiledArray will download and compile BTAS from source. *This is the recommended way to compile BTAS for all users*. -- [MADNESS](https://github.com/m-a-d-n-e-s-s/madness), tag 1f307ebbe6604539493e165a7a2b00b366711fd8 . +- [MADNESS](https://github.com/m-a-d-n-e-s-s/madness), tag 03c82cf2780d9e96298cc9140ac128c73eacd3b1 . Only the MADworld runtime and BLAS/LAPACK C API component of MADNESS is used by TiledArray. If usable MADNESS installation is not found, TiledArray will download and compile MADNESS from source. *This is the recommended way to compile MADNESS for all users*. @@ -75,7 +75,7 @@ Optional prerequisites: - [blacspp](https://github.com/wavefunction91/blacspp.git) -- a modern C++ (C++17) wrapper for BLACS - Python3 interpreter -- to test (optionally-built) Python bindings - [Range-V3](https://github.com/ericniebler/range-v3.git) -- a Ranges library that served as the basis for Ranges component of C++20; only used for some unit testing of the functionality anticipated to be supported by future C++ standards. -- [TTG](https://github.com/TESSEorg/ttg.git) -- C++ implementation of the Template Task Graph programming model for fine-grained flow-graph composition of distributed memory programs. +- [TTG](https://github.com/TESSEorg/ttg.git) -- C++ implementation of the Template Task Graph programming model for fine-grained flow-graph composition of distributed memory programs (tag 3fe4a06dbf4b05091269488aab38223da1f8cb8e). Many of these dependencies can be installed with a package manager, such as Homebrew on OS X or apt-get on Debian Linux distributions; diff --git a/bin/admin/dependency-versions-update-hook.py b/bin/admin/dependency-versions-update-hook.py index 686b98b49a..739049f834 100755 --- a/bin/admin/dependency-versions-update-hook.py +++ b/bin/admin/dependency-versions-update-hook.py @@ -126,6 +126,11 @@ def replace_dep_id(topsrc, file_ext, dep_name, old_id, new_id, search_prefix = ' scalapackpp_old_tag = tokens[2] else: scalapackpp_new_tag = tokens[2] + elif tokens[1].find('TTG') != -1: + if tokens[1].find('PREVIOUS') != -1: + ttg_old_tag = tokens[2] + else: + ttg_new_tag = tokens[2] any_files_changed = False @@ -155,6 +160,9 @@ def replace_dep_id(topsrc, file_ext, dep_name, old_id, new_id, search_prefix = ' # SCALAPACKPP tag in INSTALL.md any_files_changed |= replace_dep_id(topsrc, 'md', 'SCALAPACKPP', scalapackpp_old_tag, scalapackpp_new_tag, '', '') +# TTG tag in INSTALL.md +any_files_changed |= replace_dep_id(topsrc, 'md', 'TTG', ttg_old_tag, ttg_new_tag, '', '') + if any_files_changed: sys.exit(1) else: diff --git a/cmake/modules/FindOrFetchMADWorld.cmake b/cmake/modules/FindOrFetchMADWorld.cmake index 7be76bac5a..5961a4f05d 100644 --- a/cmake/modules/FindOrFetchMADWorld.cmake +++ b/cmake/modules/FindOrFetchMADWorld.cmake @@ -12,7 +12,15 @@ if (NOT TARGET MADworld) # TA-specific configuration set(MADNESS_BUILD_MADWORLD_ONLY ON CACHE BOOL "Whether to build MADNESS runtime only") - set(ENABLE_PARSEC OFF CACHE BOOL "Whether to use PaRSEC as the task backend of MADWorld") + if (TA_TTG) + if (NOT DEFINED MADNESS_TASK_BACKEND) + set(MADNESS_TASK_BACKEND PaRSEC CACHE STRING "The task backend to use for MADNESS tasks") + else () + if (NOT(${MADNESS_TASK_BACKEND} STREQUAL PaRSEC)) + message(FATAL_ERROR "must set MADNESS_TASK_BACKEND=PaRSEC if configuring with TA_TTG=ON") + endif() + endif() + endif() set(MPI_THREAD "multiple" CACHE INTERNAL "MADNESS requires MPI_THREAD_MULTIPLE") set(MADNESS_ASSUMES_ASLR_DISABLED ${TA_ASSUMES_ASLR_DISABLED} CACHE BOOL "Whether MADNESS assumes ASLR to be disabled") set(MPI_CXX_SKIP_MPICXX ON CACHE BOOL "Whether to disable search for C++ MPI-2 bindings") diff --git a/external/versions.cmake b/external/versions.cmake index c9e6149311..b5c6309e6f 100644 --- a/external/versions.cmake +++ b/external/versions.cmake @@ -1,7 +1,7 @@ # for each dependency track both current and previous id (the variable for the latter must contain PREVIOUS) # to be able to auto-update them -set(TA_TRACKED_VGCMAKEKIT_TAG e68b3b4e8a57a175bb9d1b4e4cfa7d31b9363de5) +set(TA_TRACKED_VGCMAKEKIT_TAG d6746098e63deab4032309c4455bb084a17ff51a) # Boost explicitly downgraded to 1.59 from 1.68 set(TA_TRACKED_BOOST_VERSION 1.59) @@ -19,13 +19,13 @@ set(TA_INSTALL_EIGEN_PREVIOUS_VERSION 3.3.7) set(TA_INSTALL_EIGEN_URL_HASH SHA256=b4c198460eba6f28d34894e3a5710998818515104d6e74e5cc331ce31e46e626) set(TA_INSTALL_EIGEN_PREVIOUS_URL_HASH MD5=b9e98a200d2455f06db9c661c5610496) -set(TA_TRACKED_MADNESS_TAG 1f307ebbe6604539493e165a7a2b00b366711fd8) -set(TA_TRACKED_MADNESS_PREVIOUS_TAG 3d585293f0094588778dbd3bec24b65e7bbe6a5d) +set(TA_TRACKED_MADNESS_TAG 03c82cf2780d9e96298cc9140ac128c73eacd3b1) +set(TA_TRACKED_MADNESS_PREVIOUS_TAG 4f7d30b0a738621037b96bb5b820029835753667) set(TA_TRACKED_MADNESS_VERSION 0.10.1) set(TA_TRACKED_MADNESS_PREVIOUS_VERSION 0.10.1) -set(TA_TRACKED_BTAS_TAG 3c91f086090390930bba62c6512c4e74a5520e76) -set(TA_TRACKED_BTAS_PREVIOUS_TAG 5a45699b78d0540b490c8c769b61033bd4d4f49c) +set(TA_TRACKED_BTAS_TAG bf0c376d5cdd6f668174b2a4c67b19634d1c0da7) +set(TA_TRACKED_BTAS_PREVIOUS_TAG 3c91f086090390930bba62c6512c4e74a5520e76) set(TA_TRACKED_LIBRETT_TAG 6eed30d4dd2a5aa58840fe895dcffd80be7fbece) set(TA_TRACKED_LIBRETT_PREVIOUS_TAG 354e0ccee54aeb2f191c3ce2c617ebf437e49d83) @@ -40,5 +40,5 @@ set(TA_TRACKED_RANGEV3_TAG 2e0591c57fce2aca6073ad6e4fdc50d841827864) set(TA_TRACKED_RANGEV3_PREVIOUS_TAG dbdaa247a25a0daa24c68f1286a5693c72ea0006) set(TA_TRACKED_TTG_URL https://github.com/TESSEorg/ttg) -set(TA_TRACKED_TTG_TAG 0adff52aa1ebdad013ab3843a7a68c2bb06b60a8) -set(TA_TRACKED_TTG_PREVIOUS_TAG a9a1a55b45f7503da39d8466a1a421155ac5ca2a) +set(TA_TRACKED_TTG_TAG 3fe4a06dbf4b05091269488aab38223da1f8cb8e) +set(TA_TRACKED_TTG_PREVIOUS_TAG 26da9b40872660b864794658d4fdeee1a95cb4d6) diff --git a/src/TiledArray/math/linalg/ttg/cholesky.h b/src/TiledArray/math/linalg/ttg/cholesky.h index 66a67a8034..0017d1ae1e 100644 --- a/src/TiledArray/math/linalg/ttg/cholesky.h +++ b/src/TiledArray/math/linalg/ttg/cholesky.h @@ -86,7 +86,7 @@ auto cholesky(const Array& A, TiledRange l_trange = {}, [[maybe_unused]] auto connected = make_graph_executable(potrf_ttg.get()); // uncomment to trace - ::ttg::trace_on(); + //::ttg::trace_on(); // start ::ttg::execute(); @@ -175,7 +175,7 @@ auto cholesky_linv(const Array& A, TiledRange l_trange = {}, [[maybe_unused]] auto connected = make_graph_executable(trtri_ttg.get()); // uncomment to trace - ::ttg::trace_on(); + //::ttg::trace_on(); // start ::ttg::execute(); diff --git a/src/TiledArray/tiledarray.cpp b/src/TiledArray/tiledarray.cpp index 74244e59bd..7d58434979 100644 --- a/src/TiledArray/tiledarray.cpp +++ b/src/TiledArray/tiledarray.cpp @@ -106,8 +106,16 @@ TiledArray::World& TiledArray::initialize(int& argc, char**& argv, initialized_accessor() = true; quiet_accessor() = quiet; - // if have TTG initialize it also + // if have TTG, initialize it also #if TILEDARRAY_HAS_TTG + // MADNESS/PaRSEC creates PaRSEC context that uses MPI_COMM_SELF to avoid + // creation of a PaRSEC comm thread to be able to use TTG/PaRSEC need to + // tell PaRSEC context to use the full communicator + if (madness::ParsecRuntime::context()->nb_nodes != default_world.size()) { + auto default_world_comm = default_world.mpi.comm().Get_mpi_comm(); + parsec_remote_dep_set_ctx(madness::ParsecRuntime::context(), + (intptr_t)default_world_comm); + } ttg::initialize(argc, argv, -1, madness::ParsecRuntime::context()); #endif