From 6aa93c4aecf7361470d108ffd2dc8d1d48fa4001 Mon Sep 17 00:00:00 2001 From: Taillefumier Mathieu <29380261+mtaillefumier@users.noreply.github.com> Date: Wed, 30 Aug 2023 10:59:06 +0200 Subject: [PATCH] [cmake] Add cmake module for finding the cusolver library --- CMakeLists.txt | 4 ++++ cmake/FindCal.cmake | 33 +++++++++++++++++++++++++++++++++ cmake/FindCuSolverMP.cmake | 37 +++++++++++++++++++++++++++++++++++++ src/CMakeLists.txt | 5 +++-- 4 files changed, 77 insertions(+), 2 deletions(-) create mode 100644 cmake/FindCal.cmake create mode 100644 cmake/FindCuSolverMP.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index 3f81c7b524..a0a6856463 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -527,6 +527,10 @@ if(CP2K_USE_ACCEL MATCHES "CUDA") endif() set(CP2K_USE_CUDA ON) + + if(CP2K_USE_CUSOLVER_MP) + find_package(CuSolverMP REQUIRED) + endif() message(STATUS ``"-- CUDA compiler and libraries found") elseif(CP2K_USE_ACCEL MATCHES "HIP") enable_language(HIP) diff --git a/cmake/FindCal.cmake b/cmake/FindCal.cmake new file mode 100644 index 0000000000..76ae7deab4 --- /dev/null +++ b/cmake/FindCal.cmake @@ -0,0 +1,33 @@ +#!-------------------------------------------------------------------------------------------------! +#! CP2K: A general program to perform molecular dynamics simulations ! +#! Copyright 2000-2023 CP2K developers group ! +#! ! +#! SPDX-License-Identifier: GPL-2.0-or-later ! +#!-------------------------------------------------------------------------------------------------! + +# Copyright (c) 2022- ETH Zurich +# +# authors : Mathieu Taillefumier + +include(FindPackageHandleStandardArgs) +include(cp2k_utils) + +cp2k_set_default_paths(LIBCAL "Cal") + +cp2k_find_libraries(LIBCAL "cal") +cp2k_include_dirs(LIBCAL "cal.h") + +find_package_handle_standard_args(Cal DEFAULT_MSG CP2K_CAL_LINK_LIBRARIES + CP2K_CAL_INCLUDE_DIRS) + +if(CP2K_LIBCAL_FOUND AND not TARGET CP2K::CAL::cal) + add_library(CP2K::CAL INTERFACE IMPORTED) + set_target_properties(CP2K::CAL::cal PROPERTIES INTERFACE_LINK_LIBRARIES + "${CP2K_CAL_LINK_LIBRARIES}") + set_target_properties(CP2K::CAL::cal PROPERTIES INTERFACE_INCLUDE_DIRECTORIES + "${CP2K_CAL_INCLUDE_DIRS}") +endif() + +mark_as_advanced(CP2K_CAL_LINK_LIBRARIES) +mark_as_advanced(CP2K_CAL_INCLUDE_DIRS) +mark_as_advanced(CP2K_CAL_FOUND) diff --git a/cmake/FindCuSolverMP.cmake b/cmake/FindCuSolverMP.cmake new file mode 100644 index 0000000000..fe18d0fb2b --- /dev/null +++ b/cmake/FindCuSolverMP.cmake @@ -0,0 +1,37 @@ +#!-------------------------------------------------------------------------------------------------! +#! CP2K: A general program to perform molecular dynamics simulations ! +#! Copyright 2000-2023 CP2K developers group ! +#! ! +#! SPDX-License-Identifier: GPL-2.0-or-later ! +#!-------------------------------------------------------------------------------------------------! + +# Copyright (c) 2022- ETH Zurich +# +# authors : Mathieu Taillefumier + +include(FindPackageHandleStandardArgs) +include(cp2k_utils) + +find_package(Cal Required) +cp2k_set_default_paths(CUSOLVER_MP "CUSOLVER_MP") +cp2k_find_libraries(CUSOLVER_MP "cusolverMp") +cp2k_include_dirs(CUSOLVER_MP "cusolverMp.h") + +find_package_handle_standard_args( + CuSolverMP DEFAULT_MSG CP2K_CUSOLVER_MP_LINK_LIBRARIES + CP2K_CUSOLVER_MP_INCLUDE_DIRS) + +if(CP2K_CUSOLVER_MP_FOUND AND NOT TARGET CP2K::CUSOLVER_MP::cusolver_mp) + add_library(CP2K::CUSOLVER_MP::cusolver_mp INTERFACE IMPORTED) + set_target_properties( + CP2K::CUSOLVER_MP::cusolver_mp + PROPERTIES INTERFACE_LINK_LIBRARIES + "${CP2K_CUSOLVER_MP_LINK_LIBRARIES};CP2K::CAL::cal") + set_target_properties( + CP2K::CUSOLVER_MP::cusolver_mp + PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${CP2K_CUSOLVER_MP_INCLUDE_DIRS}") +endif() + +mark_as_advanced(CP2K_CUSOLVER_MP_LINK_LIBRARIES) +mark_as_advanced(CP2K_CUSOLVER_MP_INCLUDE_DIRS) +mark_as_advanced(CP2K_CUSOLVER_MP_FOUND) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 6b6135ff27..cbe8f188f5 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1433,8 +1433,9 @@ if(CP2K_USE_CUDA) else() target_link_libraries( cp2k_cuda_libs - INTERFACE $<$:CUDA::cusolver> CUDA::cufft - CUDA::cufftw CUDA::cublas CUDA::cudart CUDA::cuda_driver) + INTERFACE $<$:CP2K::CUSOLVER_MP::cusolvermp> + CUDA::cufft CUDA::cufftw CUDA::cublas CUDA::cudart + CUDA::cuda_driver) endif() endif()