Merge branch 'remove-eigensolver_gpu' into 'develop'

[WIP] Remove eigensolver_gpu submodule and CMake

See merge request QEF/q-e!1750
This commit is contained in:
Ye Luo 2022-02-04 20:07:42 +00:00
commit 19aa41534d
8 changed files with 21 additions and 98 deletions

3
.gitmodules vendored
View File

@ -10,9 +10,6 @@
[submodule "external/mbd"]
path = external/mbd
url = https://github.com/libmbd/libmbd.git
[submodule "external/eigensolver_gpu"]
path = external/eigensolver_gpu
url = https://github.com/NVIDIA/Eigensolver_gpu.git
[submodule "external/devxlib"]
path = external/devxlib
url = https://gitlab.com/max-centre/components/devicexlib.git

View File

@ -68,8 +68,6 @@ option(QE_ENABLE_CUDA
"enable CUDA acceleration on NVIDIA GPUs" OFF)
if(QE_ENABLE_CUDA)
option(QE_ENABLE_OPENACC "enable OpenACC acceleration" ON)
option(QE_ENABLE_LAXLIB_CUSOLVER
"enable CUDA solver acceleration for LAXLib on NVIDIA GPUs" ON)
# OpenMP enabled by default if CUDA is enable
option(QE_ENABLE_OPENMP
"enable distributed execution support via OpenMP" ON)
@ -183,9 +181,6 @@ endif()
if(QE_ENABLE_MPI_GPU_AWARE AND NOT (QE_ENABLE_CUDA AND QE_ENABLE_MPI))
message(FATAL_ERROR "GPU aware MPI requires both MPI and CUDA features enabled")
endif()
if(QE_ENABLE_LAXLIB_CUSOLVER AND (NOT QE_ENABLE_CUDA))
message(FATAL_ERROR "CUDA Solver for LAXLib requires CUDA support, enable it with '-DQE_ENABLE_CUDA=ON' or disable CUDA Solver for LAXLib with '-DQE_ENABLE_LAXLIB_CUSOLVER=OFF'")
endif()
# if(QE_ENABLE_HDF5 AND NOT QE_ENABLE_MPI)
# message(FATAL_ERROR "HDF5 requires MPI support, enable it with '-DQE_ENABLE_MPI=ON' or disable HDF5 with '-DQE_ENABLE_HDF5=OFF'")
# endif()

View File

@ -24,34 +24,25 @@ target_link_libraries(qe_lax
qe_utilx
qe_devxlib)
if(QE_ENABLE_CUDA)
if(QE_ENABLE_LAXLIB_CUSOLVER)
if(CMAKE_Fortran_COMPILER_ID MATCHES "PGI" OR CMAKE_Fortran_COMPILER_ID MATCHES "NVHPC")
set(CMAKE_REQUIRED_LINK_OPTIONS "${CUDA_FLAG}lib=cusolver;-fortranlibs")
check_function_exists(cusolverDnZhegvdx cusolverDnZhegvdx_FOUND)
if (NOT cusolverDnZhegvdx_FOUND)
unset(cusolverDnZhegvdx_FOUND CACHE)
message(FATAL_ERROR "The version of CUDAToolkit chosen by the PGI/NVHPC compiler internally"
" doesn't contain cusolverDnZhegvdx. cuSOLVER features used by LAXLib are"
" only supported since CUDAToolkit 10.1 release. Use a newer compiler or"
" disable cuSOLVER in LAXLIB by '-DQE_ENABLE_LAXLIB_CUSOLVER=OFF'.")
endif()
else()
if(CUDAToolkit_VERSION VERSION_LESS 10.1)
message(FATAL_ERROR "cuSOLVER for LAXLib is only supported from CUDA compiler 10.1, disable it with '-DQE_ENABLE_LAXLIB_CUSOLVER=OFF'")
endif()
if(CMAKE_Fortran_COMPILER_ID MATCHES "PGI" OR CMAKE_Fortran_COMPILER_ID MATCHES "NVHPC")
set(CMAKE_REQUIRED_LINK_OPTIONS "${CUDA_FLAG}lib=cusolver;-fortranlibs")
check_function_exists(cusolverDnZhegvdx cusolverDnZhegvdx_FOUND)
if (NOT cusolverDnZhegvdx_FOUND)
unset(cusolverDnZhegvdx_FOUND CACHE)
message(FATAL_ERROR "The version of CUDAToolkit chosen by the PGI/NVHPC compiler internally"
" doesn't contain cusolverDnZhegvdx. cuSOLVER features used by LAXLib are"
" only supported since CUDAToolkit 10.1 release. Use a newer compiler"
" or select a newer CUDAToolkit internal to the PGI/NVHPC compiler.")
endif()
target_link_libraries(qe_lax
PRIVATE
CUDA::cusolver
CUDA::cublas)
set_property(TARGET qe_lax APPEND
PROPERTY
COMPILE_DEFINITIONS __USE_CUSOLVER)
else()
target_link_libraries(qe_lax
PRIVATE
qe_eigensolver_gpu)
if(CUDAToolkit_VERSION VERSION_LESS 10.1)
message(FATAL_ERROR "cuSOLVER for LAXLib is only supported from CUDA compiler 10.1")
endif()
endif()
target_link_libraries(qe_lax
PRIVATE
CUDA::cusolver
CUDA::cublas)
endif()
# LAX relies on header files that should be preprocessed

View File

@ -6,6 +6,11 @@ qe_add_global_compile_definitions(__PGI)
set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -Mcache_align -Mlarge_arrays")
if(QE_ENABLE_CUDA)
if(CMAKE_Fortran_COMPILER_VERSION VERSION_LESS 19.10)
message(FATAL_ERROR "Compiler Version ${CMAKE_Fortran_COMPILER_VERSION}. "
"GPU acceleration requires PGI 19.10 or NVIDIA HPC SDK 20.7 or higher!")
endif()
if(CMAKE_Fortran_COMPILER_VERSION VERSION_GREATER_EQUAL 20.7)
set(CUDA_FLAG "-cuda")
else()

View File

@ -13,13 +13,6 @@ include(wannier90.cmake)
###########################################################
include(mbd.cmake)
###########################################################
# Eigensolver_GPU
###########################################################
if(QE_ENABLE_CUDA AND NOT QE_ENABLE_LAXLIB_CUSOLVER)
include(eigensolver_gpu.cmake)
endif()
###########################################################
# DeviceXlib
###########################################################

@ -1 +0,0 @@
Subproject commit d0197c76ae76bbf4d3fed20444fac31af550069d

View File

@ -1,56 +0,0 @@
###########################################################
# Eigensolver_GPU
###########################################################
qe_git_submodule_update(external/eigensolver_gpu)
set(src_eigensolver_gpu
eigensolver_gpu/lib_eigsolve/dsyevd_gpu.F90
eigensolver_gpu/lib_eigsolve/dsygst_gpu.F90
eigensolver_gpu/lib_eigsolve/dsygvdx_gpu.F90
eigensolver_gpu/lib_eigsolve/dsymv_gpu.F90
eigensolver_gpu/lib_eigsolve/dsytd2_gpu.F90
eigensolver_gpu/lib_eigsolve/dsytrd_gpu.F90
eigensolver_gpu/lib_eigsolve/eigsolve_vars.F90
eigensolver_gpu/lib_eigsolve/toolbox.F90
eigensolver_gpu/lib_eigsolve/zheevd_gpu.F90
eigensolver_gpu/lib_eigsolve/zhegst_gpu.F90
eigensolver_gpu/lib_eigsolve/zhegvdx_gpu.F90
eigensolver_gpu/lib_eigsolve/zhemv_gpu.F90
eigensolver_gpu/lib_eigsolve/zhetd2_gpu.F90
eigensolver_gpu/lib_eigsolve/zhetrd_gpu.F90)
# See: https://github.com/NVIDIA/Eigensolver_gpu/blob/master/lib_eigsolve/Makefile
# Comment: the flags "-O3 -mp -Mlarge_arrays" are inherited
# from the global flags of PGI compiler
set(FLAGS -pgf90libs -Mcuda)
set(FLAGS2 -pgf90libs -Mcuda,maxregcount:64)
if(NOT DEFINED CMAKE_CUDA_ARCHITECTURES)
set(FLAGS3 -pgf90libs -Mcuda=cc35,cc60,nordc,maxregcount:255)
elseif(CMAKE_CUDA_ARCHITECTURES GREATER 60)
set(FLAGS3 -pgf90libs -Mcuda=cc60,nordc,maxregcount:255)
else()
set(FLAGS3 -pgf90libs -Mcuda=nordc,maxregcount:255)
endif()
set_source_files_properties(
eigensolver_gpu/lib_eigsolve/dsyevd_gpu.F90
eigensolver_gpu/lib_eigsolve/dsygst_gpu.F90
eigensolver_gpu/lib_eigsolve/dsygvdx_gpu.F90
eigensolver_gpu/lib_eigsolve/dsytd2_gpu.F90
eigensolver_gpu/lib_eigsolve/dsytrd_gpu.F90
eigensolver_gpu/lib_eigsolve/eigsolve_vars.F90
eigensolver_gpu/lib_eigsolve/toolbox.F90
eigensolver_gpu/lib_eigsolve/zheevd_gpu.F90
eigensolver_gpu/lib_eigsolve/zhegst_gpu.F90
eigensolver_gpu/lib_eigsolve/zhegvdx_gpu.F90
eigensolver_gpu/lib_eigsolve/zhetrd_gpu.F90
PROPERTIES COMPILE_OPTIONS "${FLAGS}")
set_source_files_properties(eigensolver_gpu/lib_eigsolve/zhetd2_gpu.F90 eigensolver_gpu/lib_eigsolve/dsymv_gpu.F90
PROPERTIES COMPILE_OPTIONS "${FLAGS2}")
set_source_files_properties(eigensolver_gpu/lib_eigsolve/zhemv_gpu.F90 PROPERTIES COMPILE_OPTIONS "${FLAGS3}")
add_library(qe_eigensolver_gpu ${src_eigensolver_gpu})
qe_fix_fortran_modules(qe_eigensolver_gpu)
target_link_libraries(qe_eigensolver_gpu PRIVATE qe_openmp_fortran qe_lapack CUDA::cusolver)
qe_install_targets(qe_eigensolver_gpu)

View File

@ -1,6 +1,5 @@
87685245bc5bc14f226fc18e5126305501b368e8 d3q
a6b89ef77b1ceda48e967921f1f5488d2df9226d devxlib
d0197c76ae76bbf4d3fed20444fac31af550069d eigensolver_gpu
3453648e6837658b747b895bb7bef4b1ed2eac40 fox
12d825396fcef1e0a1b27be9f119f9e554621e55 lapack
82005cbb65bdf5d32ca021848eec8f19da956a77 mbd