Skip to content

Commit 3e06ce2

Browse files
Add NVPL support (#149)
* nvpl * add missing nvpl and use cosma variables * findnvpl in cmake * add missing include Co-authored-by: Simon Pintarelli <[email protected]>
1 parent 03b654e commit 3e06ce2

File tree

4 files changed

+83
-15
lines changed

4 files changed

+83
-15
lines changed

CMakeLists.txt

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,8 @@ set(CMAKE_EXPORT_COMPILE_COMMANDS "YES") # always write compile_commands.json
1818
#
1919

2020
set(COSMA_GPU_BACKENDS_LIST "CUDA" "ROCM")
21-
set(COSMA_SCALAPACK_LIST "OFF" "MKL" "CRAY_LIBSCI" "CUSTOM")
22-
set(COSMA_BLAS_LIST "auto" "MKL" "OPENBLAS" "CRAY_LIBSCI" "CUSTOM" "BLIS" "ATLAS" "CUDA" "ROCM" "OFF")
21+
set(COSMA_SCALAPACK_LIST "OFF" "MKL" "CRAY_LIBSCI" "NVPL" "CUSTOM")
22+
set(COSMA_BLAS_LIST "auto" "MKL" "OPENBLAS" "CRAY_LIBSCI" "NVPL" "CUSTOM" "BLIS" "ATLAS" "CUDA" "ROCM" "OFF")
2323
option(COSMA_WITH_TESTS "Generate the test target." ON)
2424
option(COSMA_WITH_APPS "Generate the miniapp targets." ON)
2525
option(COSMA_WITH_BENCHMARKS "Generate the benchmark targets." ON)
@@ -28,7 +28,7 @@ option(COSMA_WITH_NCCL "Use NCCL as communication backend." OFF)
2828
option(COSMA_WITH_RCCL "Use RCCL as communication backend." OFF)
2929
option(COSMA_WITH_GPU_AWARE_MPI "Use gpu-aware MPI for communication." OFF)
3030
option(BUILD_SHARED_LIBS "Build shared libraries." OFF)
31-
set(COSMA_SCALAPACK "OFF" CACHE STRING "scalapack implementation. Can be MKL, CRAY_LIBSCI, CUSTOM or OFF.")
31+
set(COSMA_SCALAPACK "OFF" CACHE STRING "scalapack implementation. Can be MKL, CRAY_LIBSCI, NVPL, CUSTOM or OFF.")
3232
set(COSMA_BLAS "OFF" CACHE STRING "Blas library for computations on host or GPU")
3333

3434
set(COSMA_BLAS_VENDOR "OFF")
@@ -45,7 +45,7 @@ if (COSMA_BLAS MATCHES "CUDA|ROCM")
4545
set(COSMA_GPU_BACKEND ${COSMA_BLAS})
4646
else()
4747
if(COSMA_BLAS STREQUAL "OFF")
48-
message(FATAL_ERROR "A Blas implementation is needed when running on CPU only: choices are : auto, MKL, OPENBLAS, CRAY_LIBSCI, CUSTOM, BLIS, ATLAS, FLEXIBLAS, ARMPL, GenericBLAS")
48+
message(FATAL_ERROR "A Blas implementation is needed when running on CPU only: choices are : auto, MKL, OPENBLAS, CRAY_LIBSCI, NVPL, CUSTOM, BLIS, ATLAS, FLEXIBLAS, ARMPL, GenericBLAS")
4949
else()
5050
set(COSMA_BLAS_VENDOR ${COSMA_BLAS})
5151
endif()
@@ -72,7 +72,7 @@ endif()
7272

7373
# the blas targets are only defined when COSMA_SCALAPACK is ON whatever value of COSMA_GPU_BACKEND
7474
if (NOT COSMA_SCALAPACK MATCHES "OFF")
75-
if (COSMA_SCALAPACK MATCHES "MKL" OR COSMA_SCALAPACK MATCHES "CRAY_LIBSCI")
75+
if (COSMA_SCALAPACK MATCHES "MKL" OR COSMA_SCALAPACK MATCHES "CRAY_LIBSCI" OR COSMA_SCALAPACK MATCHES "NVPL")
7676
set(COSMA_BLAS_VENDOR ${COSMA_SCALAPACK})
7777
else()
7878
set(COSMA_BLAS_VENDOR "auto")
@@ -190,6 +190,7 @@ install(FILES "${cosma_BINARY_DIR}/cosmaConfig.cmake"
190190
"${cosma_BINARY_DIR}/cosmaConfigVersion.cmake"
191191
"${cosma_BINARY_DIR}/cosmaConfigVersion.cmake"
192192
"${cosma_SOURCE_DIR}/cmake/FindMKL.cmake"
193+
"${cosma_SOURCE_DIR}/cmake/FindNVPL.cmake"
193194
"${cosma_SOURCE_DIR}/cmake/FindBlas.cmake"
194195
"${cosma_SOURCE_DIR}/cmake/FindSCALAPACK.cmake"
195196
"${cosma_SOURCE_DIR}/cmake/FindOPENBLAS.cmake"

cmake/FindBlas.cmake

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
#
33
# authors : Mathieu Taillefumier
44

5-
5+
include(FindPackageHandleStandardArgs)
66

77
if(NOT
88
(CMAKE_C_COMPILER_LOADED
@@ -21,6 +21,7 @@ set(COSMA_BLAS_VENDOR_LIST
2121
"CRAY_LIBSCI"
2222
"BLIS"
2323
"ATLAS"
24+
"NVPL"
2425
"OFF")
2526

2627
# COSMA_BLAS_VENDOR should normally be defined here but cosma defines it in the
@@ -107,8 +108,9 @@ if(COSMA_BLAS_INCLUDE_DIRS)
107108
Blas REQUIRED_VARS COSMA_BLAS_LINK_LIBRARIES COSMA_BLAS_INCLUDE_DIRS
108109
COSMA_BLAS_VENDOR)
109110
else()
110-
find_package_handle_standard_args(Blas REQUIRED_VARS COSMA_BLAS_LINK_LIBRARIES
111-
COSMA_BLAS_VENDOR)
111+
message(WARNING "Blas REQUIRED_VARS '${COSMA_BLAS_LINK_LIBRARIES}' '${COSMA_BLAS_VENDOR}'")
112+
find_package_handle_standard_args(
113+
Blas REQUIRED_VARS COSMA_BLAS_LINK_LIBRARIES COSMA_BLAS_VENDOR)
112114
endif()
113115

114116
if(NOT TARGET cosma::BLAS::blas)

cmake/FindNVPL.cmake

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
find_package("nvpl_blas" REQUIRED)
2+
find_package("nvpl_lapack" REQUIRED)
3+
find_package("nvpl_scalapack" REQUIRED)
4+
5+
if(COSMA_BLAS_INTERFACE STREQUAL "32bits")
6+
set(_nvpl_int "_lp64")
7+
else()
8+
set(_nvpl_int "_ilp64")
9+
endif()
10+
11+
if(COSMA_BLAS_THREADING STREQUAL "openmp")
12+
set(_nvpl_thread "_omp")
13+
else()
14+
set(_nvpl_thread "_seq")
15+
endif()
16+
17+
if("${MPI_CXX_LIBRARY_VERSION_STRING}" MATCHES "Open MPI")
18+
if(MPI_VERSION VERSION_GREATER_EQUAL "5.0")
19+
set(_nvpl_mpi "_openmpi5")
20+
elseif(MPI_VERSION VERSION_GREATER_EQUAL "4.0")
21+
set(_nvpl_mpi "_openmpi4")
22+
else(MPI_VERSION VERSION_GREATER_EQUAL "3.0")
23+
set(_nvpl_mpi "_openmpi3")
24+
endif()
25+
else()
26+
set(_nvpl_mpi "_mpich")
27+
endif()
28+
29+
if(NOT TARGET "cosma::BLAS::NVPL::nvpl")
30+
add_library("cosma::BLAS::NVPL::nvpl" INTERFACE IMPORTED)
31+
target_link_libraries("cosma::BLAS::NVPL::nvpl" INTERFACE
32+
"nvpl::blas${_nvpl_int}${_nvpl_thread}" "nvpl::lapack${_nvpl_int}${_nvpl_thread}"
33+
"nvpl::blacs${_nvpl_int}${_nvpl_mpi}" "nvpl::scalapack${_nvpl_int}")
34+
35+
get_target_property(COSMA_NVPL_LAPACK_LIBRARIES "nvpl::lapack${_nvpl_int}${_nvpl_thread}" INTERFACE_LINK_LIBRARIES)
36+
get_target_property(COSMA_NVPL_SCALAPACK_LIBRARIES "nvpl::scalapack${_nvpl_int}" INTERFACE_LINK_LIBRARIES)
37+
get_target_property(COSMA_NVPL_BLAS_INCLUDE_DIRS "nvpl::blas${_nvpl_int}${_nvpl_thread}" INTERFACE_INCLUDE_DIRECTORIES)
38+
get_target_property(COSMA_NVPL_LAPACK_INCLUDE_DIRS "nvpl::lapack${_nvpl_int}${_nvpl_thread}" INTERFACE_INCLUDE_DIRECTORIES)
39+
get_target_property(COSMA_NVPL_SCALAPACK_INCLUDE_DIRS "nvpl::scalapack${_nvpl_int}" INTERFACE_INCLUDE_DIRECTORIES)
40+
41+
set_target_properties(
42+
cosma::BLAS::NVPL::nvpl
43+
PROPERTIES INTERFACE_LINK_LIBRARIES
44+
"${COSMA_NVPL_LAPACK_LIBRARIES}")
45+
set_target_properties(
46+
cosma::BLAS::NVPL::nvpl
47+
PROPERTIES INTERFACE_INCLUDE_DIRECTORIES
48+
"${COSMA_NVPL_BLAS_INCLUDE_DIRS};${COSMA_NVPL_LAPACK_INCLUDE_DIRS}")
49+
50+
add_library(cosma::BLAS::NVPL::blas ALIAS cosma::BLAS::NVPL::nvpl)
51+
52+
add_library(cosma::BLAS::NVPL::scalapack_link INTERFACE IMPORTED)
53+
set_target_properties(
54+
cosma::BLAS::NVPL::scalapack_link
55+
PROPERTIES INTERFACE_LINK_LIBRARIES
56+
"${COSMA_NVPL_LAPACK_LIBRARIES};${COSMA_NVPL_SCALAPACK_LIBRARIES}")
57+
set_target_properties(
58+
cosma::BLAS::NVPL::scalapack_link
59+
PROPERTIES INTERFACE_INCLUDE_DIRECTORIES
60+
"${COSMA_NVPL_BLAS_INCLUDE_DIRS};${COSMA_NVPL_LAPACK_INCLUDE_DIRS};${COSMA_NVPL_SCALAPACK_INCLUDE_DIRS}")
61+
endif()

cmake/FindSCALAPACK.cmake

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,18 @@
11
include(FindPackageHandleStandardArgs)
22

33
if(COSMA_SCALAPACK STREQUAL "MKL")
4-
find_package(MKL REQUIRED)
4+
find_package(MKL REQUIRED)
55
get_target_property(COSMA_SCALAPACK_LINK_LIBRARIES cosma::BLAS::MKL::scalapack_link
66
INTERFACE_LINK_LIBRARIES)
77
elseif(COSMA_SCALAPACK STREQUAL "CRAY_LIBSCI")
8-
find_package(CRAY_LIBSCI REQUIRED)
9-
get_target_property(COSMA_SCALAPACK_LINK_LIBRARIES cosma::BLAS::CRAY_LIBSCI::scalapack_link
8+
find_package(CRAY_LIBSCI REQUIRED)
9+
get_target_property(COSMA_SCALAPACK_LINK_LIBRARIES cosma::BLAS::CRAY_LIBSCI::scalapack_link
1010
INTERFACE_LINK_LIBRARIES)
11+
elseif(COSMA_SCALAPACK STREQUAL "NVPL")
12+
find_package(NVPL REQUIRED)
13+
get_target_property(COSMA_SCALAPACK_LINK_LIBRARIES cosma::BLAS::NVPL::scalapack_link
14+
INTERFACE_LINK_LIBRARIES)
15+
message(WARNING "COSMA_SCALAPACK_LINK_LIBRARIES: ${COSMA_SCALAPACK_LINK_LIBRARIES}")
1116
elseif(COSMA_SCALAPACK STREQUAL "CUSTOM")
1217
find_library(COSMA_SCALAPACK_LINK_LIBRARIES
1318
NAMES scalapack
@@ -30,10 +35,9 @@ set(COSMA_SCALAPACK_FOUND "YES")
3035

3136
if (NOT TARGET cosma::scalapack::scalapack)
3237
add_library(cosma::scalapack::scalapack INTERFACE IMPORTED)
38+
set_target_properties(
39+
cosma::scalapack::scalapack PROPERTIES INTERFACE_LINK_LIBRARIES
40+
"${COSMA_SCALAPACK_LINK_LIBRARIES}")
3341
endif()
3442

35-
set_target_properties(
36-
cosma::scalapack::scalapack PROPERTIES INTERFACE_LINK_LIBRARIES
37-
"${COSMA_SCALAPACK_LINK_LIBRARIES}")
38-
3943
mark_as_advanced(COSMA_SCALAPACK_LINK_LIBRARIES COSMA_SCALAPACK_FOUND)

0 commit comments

Comments
 (0)