Add new search paths for the NVIDIA math libs (#788)

This PR adds two new search paths for the NVIDIA math libraries (cuSPARSE, cuBLAS, cuSOLVER). This fixes build issues on Polaris and Perlmutter.

* Add two new search paths for the NVIDIA math libs to configure
* Turn off CUDA math libs when CUDA is disabled
This commit is contained in:
Victor A. Paludetto Magri 2022-12-13 17:56:56 -05:00 committed by GitHub
parent 322b9d10cc
commit 69f74995e0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 726 additions and 293 deletions

View File

@ -173,9 +173,9 @@ hypre_using_um=no
hypre_gpu_mpi=no
hypre_using_gpu_profiling=no
hypre_using_cuda_streams=no
hypre_using_cusparse=yes
hypre_using_cublas=yes
hypre_using_curand=yes
hypre_using_cusparse=no
hypre_using_cublas=no
hypre_using_curand=no
hypre_using_cusolver=no
hypre_using_device_pool=no
hypre_using_device_malloc_async=no
@ -414,39 +414,6 @@ AS_HELP_STRING([--enable-unified-memory],
[hypre_using_um=no]
)
AC_ARG_ENABLE(cuda-streams,
AS_HELP_STRING([--enable-cuda-streams],
[Use CUDA streams (default is YES).]),
[case "${enableval}" in
yes) hypre_using_cuda_streams=yes ;;
no) hypre_using_cuda_streams=no ;;
*) hypre_using_cuda_streams=yes ;;
esac],
[hypre_using_cuda_streams=yes]
)
AC_ARG_ENABLE(cusparse,
AS_HELP_STRING([--enable-cusparse],
[Use cuSPARSE (default is YES).]),
[case "${enableval}" in
yes) hypre_using_cusparse=yes ;;
no) hypre_using_cusparse=no ;;
*) hypre_using_cusparse=yes ;;
esac],
[hypre_using_cusparse=yes]
)
AC_ARG_ENABLE(cusolver,
AS_HELP_STRING([--enable-cusolver],
[Use cuSOLVER (default is NO).]),
[case "${enableval}" in
yes) hypre_using_cusolver=yes ;;
no) hypre_using_cusolver=no ;;
*) hypre_using_cusolver=yes ;;
esac],
[hypre_using_cusolver=no]
)
AC_ARG_ENABLE(device-memory-pool,
AS_HELP_STRING([--enable-device-memory-pool],
[Use device pooling allocator (default is NO).]),
@ -469,63 +436,6 @@ AS_HELP_STRING([--enable-device-malloc-async],
[hypre_using_device_malloc_async=no]
)
AC_ARG_ENABLE(cublas,
AS_HELP_STRING([--enable-cublas],
[Use cuBLAS (default is YES).]),
[case "${enableval}" in
yes) hypre_using_cublas=yes ;;
no) hypre_using_cublas=no ;;
*) hypre_using_cublas=yes ;;
esac],
[hypre_using_cublas=yes]
)
AC_ARG_ENABLE(curand,
AS_HELP_STRING([--enable-curand],
[Use cuRAND (default is YES).]),
[case "${enableval}" in
yes) hypre_using_curand=yes ;;
no) hypre_using_curand=no ;;
*) hypre_using_curand=yes ;;
esac],
[hypre_using_curand=yes]
)
AC_ARG_ENABLE(rocsparse,
AS_HELP_STRING([--enable-rocsparse],
[Use rocSPARSE (default is YES).]),
[case "${enableval}" in
yes) hypre_using_rocsparse=yes ;;
no) hypre_using_rocsparse=no ;;
*) hypre_using_rocsparse=yes ;;
esac],
[hypre_using_rocsparse=yes]
)
AC_ARG_ENABLE(rocblas,
AS_HELP_STRING([--enable-rocblas],
[Use rocBLAS (default is NO).]),
[case "${enableval}" in
yes) hypre_using_rocblas=yes ;;
no) hypre_using_rocblas=no ;;
*) hypre_using_rocblas=no ;;
esac],
[hypre_using_rocblas=no]
)
AC_ARG_ENABLE(rocrand,
AS_HELP_STRING([--enable-rocrand],
[Use rocRAND (default is YES).]),
[case "${enableval}" in
yes) hypre_using_rocrand=yes ;;
no) hypre_using_rocrand=no ;;
*) hypre_using_rocrand=yes ;;
esac],
[hypre_using_rocrand=yes]
)
AC_ARG_ENABLE(gpu-profiling,
AS_HELP_STRING([--enable-gpu-profiling],
[Use NVTX on CUDA, rocTX on HIP (default is NO).]),
@ -548,39 +458,6 @@ AS_HELP_STRING([--enable-gpu-aware-mpi],
[hypre_gpu_mpi=no]
)
AC_ARG_ENABLE(onemklsparse,
AS_HELP_STRING([--enable-onemklsparse],
[Use oneMKL sparse (default is YES).]),
[case "${enableval}" in
yes) hypre_using_onemklsparse=yes ;;
no) hypre_using_onemklsparse=no ;;
*) hypre_using_onemklsparse=yes ;;
esac],
[hypre_using_onemklsparse=yes]
)
AC_ARG_ENABLE(onemklblas,
AS_HELP_STRING([--enable-onemklblas],
[Use oneMKL blas (default is YES).]),
[case "${enableval}" in
yes) hypre_using_onemklblas=yes ;;
no) hypre_using_onemklblas=no ;;
*) hypre_using_onemklblas=yes ;;
esac],
[hypre_using_onemklblas=yes]
)
AC_ARG_ENABLE(onemklrand,
AS_HELP_STRING([--enable-onemklrand],
[Use oneMKL rand (default is YES).]),
[case "${enableval}" in
yes) hypre_using_onemklrand=yes ;;
no) hypre_using_onemklrand=no ;;
*) hypre_using_onemklrand=yes ;;
esac],
[hypre_using_onemklrand=yes]
)
dnl * The AC_DEFINE is below, after hypre_using_mpi is completely set
dnl * Need to change to a new approach that always defines variable to some value
@ -1262,6 +1139,39 @@ AS_HELP_STRING([--with-hip],
[hypre_using_hip=no]
)
AC_ARG_ENABLE(rocsparse,
AS_HELP_STRING([--enable-rocsparse],
[Use rocSPARSE (default is YES).]),
[case "${enableval}" in
yes) hypre_using_rocsparse=yes ;;
no) hypre_using_rocsparse=no ;;
*) hypre_using_rocsparse=yes ;;
esac],
[hypre_using_rocsparse=yes]
)
AC_ARG_ENABLE(rocblas,
AS_HELP_STRING([--enable-rocblas],
[Use rocBLAS (default is NO).]),
[case "${enableval}" in
yes) hypre_using_rocblas=yes ;;
no) hypre_using_rocblas=no ;;
*) hypre_using_rocblas=no ;;
esac],
[hypre_using_rocblas=no]
)
AC_ARG_ENABLE(rocrand,
AS_HELP_STRING([--enable-rocrand],
[Use rocRAND (default is YES).]),
[case "${enableval}" in
yes) hypre_using_rocrand=yes ;;
no) hypre_using_rocrand=no ;;
*) hypre_using_rocrand=yes ;;
esac],
[hypre_using_rocrand=yes]
)
dnl ***** SYCL
AC_ARG_WITH(sycl,
AS_HELP_STRING([--with-sycl],
@ -1300,6 +1210,77 @@ AS_HELP_STRING([--with-gpu-arch=ARG],
]
)
AC_ARG_ENABLE(cublas,
AS_HELP_STRING([--enable-cublas],
[Use cuBLAS (default is YES with CUDA, otherwise is NO).]),
[case "${enableval}" in
yes) hypre_using_cublas=yes ;;
no) hypre_using_cublas=no ;;
*) hypre_using_cublas=no ;;
esac],
[case "$hypre_using_cuda" in
yes) hypre_using_cublas=yes ;;
no) hypre_using_cublas=no ;;
*) hypre_using_cublas=no ;;
esac]
)
AC_ARG_ENABLE(curand,
AS_HELP_STRING([--enable-curand],
[Use cuRAND (default is YES with CUDA, otherwise is NO).]),
[case "${enableval}" in
yes) hypre_using_curand=yes ;;
no) hypre_using_curand=no ;;
*) hypre_using_curand=no ;;
esac],
[case "$hypre_using_cuda" in
yes) hypre_using_curand=yes ;;
no) hypre_using_curand=no ;;
*) hypre_using_curand=no ;;
esac]
)
AC_ARG_ENABLE(cuda-streams,
AS_HELP_STRING([--enable-cuda-streams],
[Use CUDA streams (default is YES with CUDA, otherwise is NO).]),
[case "${enableval}" in
yes) hypre_using_cuda_streams=yes ;;
no) hypre_using_cuda_streams=no ;;
*) hypre_using_cuda_streams=yes ;;
esac],
[case "$hypre_using_cuda" in
yes) hypre_using_cuda_streams=yes ;;
no) hypre_using_cuda_streams=no ;;
*) hypre_using_cuda_streams=yes ;;
esac],
)
AC_ARG_ENABLE(cusparse,
AS_HELP_STRING([--enable-cusparse],
[Use cuSPARSE (default is YES with CUDA, otherwise is NO).]),
[case "${enableval}" in
yes) hypre_using_cusparse=yes ;;
no) hypre_using_cusparse=no ;;
*) hypre_using_cusparse=no ;;
esac],
[case "$hypre_using_cuda" in
yes) hypre_using_cusparse=yes ;;
no) hypre_using_cusparse=no ;;
*) hypre_using_cusparse=no ;;
esac],
)
AC_ARG_ENABLE(cusolver,
AS_HELP_STRING([--enable-cusolver],
[Use cuSOLVER (default is NO).]),
[case "${enableval}" in
yes) hypre_using_cusolver=yes ;;
no) hypre_using_cusolver=no ;;
*) hypre_using_cusolver=no ;;
esac],
[hypre_using_cusolver=no]
)
dnl ***** SYCL options
AC_ARG_WITH(sycl-target,
@ -1333,6 +1314,39 @@ AS_HELP_STRING([--with-sycl-target-backend=ARG],
]
)
AC_ARG_ENABLE(onemklsparse,
AS_HELP_STRING([--enable-onemklsparse],
[Use oneMKL sparse (default is YES).]),
[case "${enableval}" in
yes) hypre_using_onemklsparse=yes ;;
no) hypre_using_onemklsparse=no ;;
*) hypre_using_onemklsparse=yes ;;
esac],
[hypre_using_onemklsparse=yes]
)
AC_ARG_ENABLE(onemklblas,
AS_HELP_STRING([--enable-onemklblas],
[Use oneMKL blas (default is YES).]),
[case "${enableval}" in
yes) hypre_using_onemklblas=yes ;;
no) hypre_using_onemklblas=no ;;
*) hypre_using_onemklblas=yes ;;
esac],
[hypre_using_onemklblas=yes]
)
AC_ARG_ENABLE(onemklrand,
AS_HELP_STRING([--enable-onemklrand],
[Use oneMKL rand (default is YES).]),
[case "${enableval}" in
yes) hypre_using_onemklrand=yes ;;
no) hypre_using_onemklrand=no ;;
*) hypre_using_onemklrand=yes ;;
esac],
[hypre_using_onemklrand=yes]
)
dnl ***** RAJA
AC_ARG_WITH(raja,
@ -2137,7 +2151,10 @@ then
fi
fi dnl hypre_using_um
dnl CUDA
dnl *********************************************************************
dnl * Check for CUDA header
dnl *********************************************************************
if [test "$hypre_using_cuda" = "yes"]
then
AC_CHECK_HEADERS(["${CUDA_HOME}/include/cuda.h"], [hypre_found_cuda=yes; HYPRE_CUDA_PATH=${CUDA_HOME}])
@ -2153,6 +2170,94 @@ then
fi
fi
dnl *********************************************************************
dnl * Check for cuSPARSE header
dnl *********************************************************************
if [test "$hypre_using_cusparse" = "yes"]
then
AC_CHECK_FILE([${HYPRE_CUDA_PATH}/include/cusparse.h], [hypre_found_cusparse=yes; HYPRE_VENDOR_MATH_PATH=${HYPRE_CUDA_PATH}])
if test "x$hypre_found_cusparse" != "xyes"
then
AC_CHECK_FILE([${HYPRE_CUDA_PATH}/../math_libs/include/cusparse.h],
[hypre_found_cusparse=yes; HYPRE_VENDOR_MATH_PATH=$(readlink -f ${HYPRE_CUDA_PATH}/../math_libs); AC_MSG_NOTICE([setting vendor math path to ${HYPRE_VENDOR_MATH_PATH}])])
fi
if test "x$hypre_found_cusparse" != "xyes"
then
AC_CHECK_FILE([${HYPRE_CUDA_PATH}/../../math_libs/include/cusparse.h],
[hypre_found_cusparse=yes; HYPRE_VENDOR_MATH_PATH=$(readlink -f ${HYPRE_CUDA_PATH}/../../math_libs); AC_MSG_NOTICE([setting vendor math path to ${HYPRE_VENDOR_MATH_PATH}])])
fi
if test "x$hypre_found_cusparse" != "xyes"
then
AC_MSG_ERROR([unable to find cusparse.h ...])
fi
fi
dnl *********************************************************************
dnl * Check for cuBLAS header
dnl *********************************************************************
if [test "$hypre_using_cublas" = "yes"]
then
AC_CHECK_FILE([${HYPRE_CUDA_PATH}/include/cublas.h], [hypre_found_cublas=yes; HYPRE_VENDOR_MATH_PATH=${HYPRE_CUDA_PATH}])
if test "x$hypre_found_cublas" != "xyes" && test "x${HYPRE_VENDOR_MATH_PATH}" != "x"
then
AC_CHECK_FILE([${HYPRE_VENDOR_MATH_PATH}/include/cublas.h], [hypre_found_cublas=yes;])
fi
if test "x$hypre_found_cublas" != "xyes"
then
AC_CHECK_FILE([${HYPRE_CUDA_PATH}/../math_libs/include/cublas.h],
[hypre_found_cublas=yes; HYPRE_VENDOR_MATH_PATH=$(readlink -f ${HYPRE_CUDA_PATH}/../math_libs); AC_MSG_NOTICE([setting vendor math path to ${HYPRE_VENDOR_MATH_PATH}])])
fi
if test "x$hypre_found_cublas" != "xyes"
then
AC_CHECK_FILE([${HYPRE_CUDA_PATH}/../../math_libs/include/cublas.h],
[hypre_found_cublas=yes; HYPRE_VENDOR_MATH_PATH=$(readlink -f ${HYPRE_CUDA_PATH}/../../math_libs); AC_MSG_NOTICE([setting vendor math path to ${HYPRE_VENDOR_MATH_PATH}])])
fi
if test "x$hypre_found_cublas" != "xyes"
then
AC_MSG_ERROR([unable to find cublas.h ...])
fi
fi
dnl *********************************************************************
dnl * Check for cuSOLVER header
dnl *********************************************************************
if [test "$hypre_using_cusolver" = "yes"]
then
AC_CHECK_FILE([${HYPRE_CUDA_PATH}/include/cusolverDn.h], [hypre_found_cusolver=yes; HYPRE_VENDOR_MATH_PATH=${HYPRE_CUDA_PATH}])
if test "x$hypre_found_cusolver" != "xyes" && test "x${HYPRE_VENDOR_MATH_PATH}" != "x"
then
AC_CHECK_FILE([${HYPRE_VENDOR_MATH_PATH}/include/cusolverDn.h], [hypre_found_cusolver=yes;])
fi
if test "x$hypre_found_cusolver" != "xyes"
then
AC_CHECK_FILE([${HYPRE_CUDA_PATH}/../math_libs/include/cusolverDn.h],
[hypre_found_cusolver=yes; HYPRE_VENDOR_MATH_PATH=$(readlink -f ${HYPRE_CUDA_PATH}/../math_libs); AC_MSG_NOTICE([setting vendor math path to ${HYPRE_VENDOR_MATH_PATH}])])
fi
if test "x$hypre_found_cusolver" != "xyes"
then
AC_CHECK_FILE([${HYPRE_CUDA_PATH}/../../math_libs/include/cusolverDn.h],
[hypre_found_cusolver=yes; HYPRE_VENDOR_MATH_PATH=$(readlink -f ${HYPRE_CUDA_PATH}/../../math_libs); AC_MSG_NOTICE([setting vendor math path to ${HYPRE_VENDOR_MATH_PATH}])])
fi
if test "x$hypre_found_cusolver" != "xyes"
then
AC_MSG_ERROR([unable to find cusolverDn.h ...])
fi
fi
dnl *********************************************************************
dnl * Check for HIP header
dnl *********************************************************************
@ -2311,6 +2416,11 @@ then
HYPRE_CUDA_INCLUDE='-I${HYPRE_CUDA_PATH}/include'
HYPRE_CUDA_LIBS='-L${HYPRE_CUDA_PATH}/lib64 -lcudart'
AS_IF([test x"$hypre_using_cusparse" == x"yes" || test x"$hypre_using_cublas" == x"yes" || test x"$hypre_using_cusolver" == x"yes"],
[AS_IF([test "x$HYPRE_CUDA_PATH" != "x$HYPRE_VENDOR_MATH_PATH"],
[HYPRE_CUDA_INCLUDE+=" -I${HYPRE_VENDOR_MATH_PATH}/include"
HYPRE_CUDA_LIBS+=" -L${HYPRE_VENDOR_MATH_PATH}/lib64"])])
if test "$hypre_using_gpu_profiling" = "yes"
then
AC_DEFINE(HYPRE_USING_NVTX, 1, [Define to 1 if using NVIDIA Tools Extension (NVTX)])

655
src/configure vendored
View File

@ -782,21 +782,10 @@ enable_persistent
enable_hopscotch
enable_fortran
enable_unified_memory
enable_cuda_streams
enable_cusparse
enable_cusolver
enable_device_memory_pool
enable_device_malloc_async
enable_cublas
enable_curand
enable_rocsparse
enable_rocblas
enable_rocrand
enable_gpu_profiling
enable_gpu_aware_mpi
enable_onemklsparse
enable_onemklblas
enable_onemklrand
with_cxxstandard
with_LD
with_LDFLAGS
@ -840,11 +829,22 @@ with_mli
with_MPI
with_cuda
with_hip
enable_rocsparse
enable_rocblas
enable_rocrand
with_sycl
with_cuda_home
with_gpu_arch
enable_cublas
enable_curand
enable_cuda_streams
enable_cusparse
enable_cusolver
with_sycl_target
with_sycl_target_backend
enable_onemklsparse
enable_onemklblas
enable_onemklrand
with_raja
with_raja_include
with_raja_lib
@ -1519,20 +1519,24 @@ Optional Features:
--enable-fortran Require a working Fortran compiler (default is YES).
--enable-unified-memory Use unified memory for allocating the memory
(default is NO).
--enable-cuda-streams Use CUDA streams (default is YES).
--enable-cusparse Use cuSPARSE (default is YES).
--enable-cusolver Use cuSOLVER (default is NO).
--enable-device-memory-pool
Use device pooling allocator (default is NO).
--enable-device-malloc-async
Use device async malloc (default is NO).
--enable-cublas Use cuBLAS (default is YES).
--enable-curand Use cuRAND (default is YES).
--enable-gpu-profiling Use NVTX on CUDA, rocTX on HIP (default is NO).
--enable-gpu-aware-mpi Use GPU memory aware MPI
--enable-rocsparse Use rocSPARSE (default is YES).
--enable-rocblas Use rocBLAS (default is NO).
--enable-rocrand Use rocRAND (default is YES).
--enable-gpu-profiling Use NVTX on CUDA, rocTX on HIP (default is NO).
--enable-gpu-aware-mpi Use GPU memory aware MPI
--enable-cublas Use cuBLAS (default is YES with CUDA, otherwise is
NO).
--enable-curand Use cuRAND (default is YES with CUDA, otherwise is
NO).
--enable-cuda-streams Use CUDA streams (default is YES with CUDA,
otherwise is NO).
--enable-cusparse Use cuSPARSE (default is YES with CUDA, otherwise is
NO).
--enable-cusolver Use cuSOLVER (default is NO).
--enable-onemklsparse Use oneMKL sparse (default is YES).
--enable-onemklblas Use oneMKL blas (default is YES).
--enable-onemklrand Use oneMKL rand (default is YES).
@ -2806,9 +2810,9 @@ hypre_using_um=no
hypre_gpu_mpi=no
hypre_using_gpu_profiling=no
hypre_using_cuda_streams=no
hypre_using_cusparse=yes
hypre_using_cublas=yes
hypre_using_curand=yes
hypre_using_cusparse=no
hypre_using_cublas=no
hypre_using_curand=no
hypre_using_cusolver=no
hypre_using_device_pool=no
hypre_using_device_malloc_async=no
@ -3141,45 +3145,6 @@ else
fi
# Check whether --enable-cuda-streams was given.
if test "${enable_cuda_streams+set}" = set; then :
enableval=$enable_cuda_streams; case "${enableval}" in
yes) hypre_using_cuda_streams=yes ;;
no) hypre_using_cuda_streams=no ;;
*) hypre_using_cuda_streams=yes ;;
esac
else
hypre_using_cuda_streams=yes
fi
# Check whether --enable-cusparse was given.
if test "${enable_cusparse+set}" = set; then :
enableval=$enable_cusparse; case "${enableval}" in
yes) hypre_using_cusparse=yes ;;
no) hypre_using_cusparse=no ;;
*) hypre_using_cusparse=yes ;;
esac
else
hypre_using_cusparse=yes
fi
# Check whether --enable-cusolver was given.
if test "${enable_cusolver+set}" = set; then :
enableval=$enable_cusolver; case "${enableval}" in
yes) hypre_using_cusolver=yes ;;
no) hypre_using_cusolver=no ;;
*) hypre_using_cusolver=yes ;;
esac
else
hypre_using_cusolver=no
fi
# Check whether --enable-device-memory-pool was given.
if test "${enable_device_memory_pool+set}" = set; then :
enableval=$enable_device_memory_pool; case "${enableval}" in
@ -3206,73 +3171,6 @@ else
fi
# Check whether --enable-cublas was given.
if test "${enable_cublas+set}" = set; then :
enableval=$enable_cublas; case "${enableval}" in
yes) hypre_using_cublas=yes ;;
no) hypre_using_cublas=no ;;
*) hypre_using_cublas=yes ;;
esac
else
hypre_using_cublas=yes
fi
# Check whether --enable-curand was given.
if test "${enable_curand+set}" = set; then :
enableval=$enable_curand; case "${enableval}" in
yes) hypre_using_curand=yes ;;
no) hypre_using_curand=no ;;
*) hypre_using_curand=yes ;;
esac
else
hypre_using_curand=yes
fi
# Check whether --enable-rocsparse was given.
if test "${enable_rocsparse+set}" = set; then :
enableval=$enable_rocsparse; case "${enableval}" in
yes) hypre_using_rocsparse=yes ;;
no) hypre_using_rocsparse=no ;;
*) hypre_using_rocsparse=yes ;;
esac
else
hypre_using_rocsparse=yes
fi
# Check whether --enable-rocblas was given.
if test "${enable_rocblas+set}" = set; then :
enableval=$enable_rocblas; case "${enableval}" in
yes) hypre_using_rocblas=yes ;;
no) hypre_using_rocblas=no ;;
*) hypre_using_rocblas=no ;;
esac
else
hypre_using_rocblas=no
fi
# Check whether --enable-rocrand was given.
if test "${enable_rocrand+set}" = set; then :
enableval=$enable_rocrand; case "${enableval}" in
yes) hypre_using_rocrand=yes ;;
no) hypre_using_rocrand=no ;;
*) hypre_using_rocrand=yes ;;
esac
else
hypre_using_rocrand=yes
fi
# Check whether --enable-gpu-profiling was given.
if test "${enable_gpu_profiling+set}" = set; then :
enableval=$enable_gpu_profiling; case "${enableval}" in
@ -3299,45 +3197,6 @@ else
fi
# Check whether --enable-onemklsparse was given.
if test "${enable_onemklsparse+set}" = set; then :
enableval=$enable_onemklsparse; case "${enableval}" in
yes) hypre_using_onemklsparse=yes ;;
no) hypre_using_onemklsparse=no ;;
*) hypre_using_onemklsparse=yes ;;
esac
else
hypre_using_onemklsparse=yes
fi
# Check whether --enable-onemklblas was given.
if test "${enable_onemklblas+set}" = set; then :
enableval=$enable_onemklblas; case "${enableval}" in
yes) hypre_using_onemklblas=yes ;;
no) hypre_using_onemklblas=no ;;
*) hypre_using_onemklblas=yes ;;
esac
else
hypre_using_onemklblas=yes
fi
# Check whether --enable-onemklrand was given.
if test "${enable_onemklrand+set}" = set; then :
enableval=$enable_onemklrand; case "${enableval}" in
yes) hypre_using_onemklrand=yes ;;
no) hypre_using_onemklrand=no ;;
*) hypre_using_onemklrand=yes ;;
esac
else
hypre_using_onemklrand=yes
fi
if test "x$LDFLAGS" = "x"
then
@ -4148,6 +4007,45 @@ else
fi
# Check whether --enable-rocsparse was given.
if test "${enable_rocsparse+set}" = set; then :
enableval=$enable_rocsparse; case "${enableval}" in
yes) hypre_using_rocsparse=yes ;;
no) hypre_using_rocsparse=no ;;
*) hypre_using_rocsparse=yes ;;
esac
else
hypre_using_rocsparse=yes
fi
# Check whether --enable-rocblas was given.
if test "${enable_rocblas+set}" = set; then :
enableval=$enable_rocblas; case "${enableval}" in
yes) hypre_using_rocblas=yes ;;
no) hypre_using_rocblas=no ;;
*) hypre_using_rocblas=no ;;
esac
else
hypre_using_rocblas=no
fi
# Check whether --enable-rocrand was given.
if test "${enable_rocrand+set}" = set; then :
enableval=$enable_rocrand; case "${enableval}" in
yes) hypre_using_rocrand=yes ;;
no) hypre_using_rocrand=no ;;
*) hypre_using_rocrand=yes ;;
esac
else
hypre_using_rocrand=yes
fi
# Check whether --with-sycl was given.
if test "${with_sycl+set}" = set; then :
@ -4190,6 +4088,85 @@ if test "${with_gpu_arch+set}" = set; then :
fi
# Check whether --enable-cublas was given.
if test "${enable_cublas+set}" = set; then :
enableval=$enable_cublas; case "${enableval}" in
yes) hypre_using_cublas=yes ;;
no) hypre_using_cublas=no ;;
*) hypre_using_cublas=no ;;
esac
else
case "$hypre_using_cuda" in
yes) hypre_using_cublas=yes ;;
no) hypre_using_cublas=no ;;
*) hypre_using_cublas=no ;;
esac
fi
# Check whether --enable-curand was given.
if test "${enable_curand+set}" = set; then :
enableval=$enable_curand; case "${enableval}" in
yes) hypre_using_curand=yes ;;
no) hypre_using_curand=no ;;
*) hypre_using_curand=no ;;
esac
else
case "$hypre_using_cuda" in
yes) hypre_using_curand=yes ;;
no) hypre_using_curand=no ;;
*) hypre_using_curand=no ;;
esac
fi
# Check whether --enable-cuda-streams was given.
if test "${enable_cuda_streams+set}" = set; then :
enableval=$enable_cuda_streams; case "${enableval}" in
yes) hypre_using_cuda_streams=yes ;;
no) hypre_using_cuda_streams=no ;;
*) hypre_using_cuda_streams=yes ;;
esac
else
case "$hypre_using_cuda" in
yes) hypre_using_cuda_streams=yes ;;
no) hypre_using_cuda_streams=no ;;
*) hypre_using_cuda_streams=yes ;;
esac
fi
# Check whether --enable-cusparse was given.
if test "${enable_cusparse+set}" = set; then :
enableval=$enable_cusparse; case "${enableval}" in
yes) hypre_using_cusparse=yes ;;
no) hypre_using_cusparse=no ;;
*) hypre_using_cusparse=no ;;
esac
else
case "$hypre_using_cuda" in
yes) hypre_using_cusparse=yes ;;
no) hypre_using_cusparse=no ;;
*) hypre_using_cusparse=no ;;
esac
fi
# Check whether --enable-cusolver was given.
if test "${enable_cusolver+set}" = set; then :
enableval=$enable_cusolver; case "${enableval}" in
yes) hypre_using_cusolver=yes ;;
no) hypre_using_cusolver=no ;;
*) hypre_using_cusolver=no ;;
esac
else
hypre_using_cusolver=no
fi
# Check whether --with-sycl-target was given.
@ -4223,6 +4200,45 @@ if test "${with_sycl_target_backend+set}" = set; then :
fi
# Check whether --enable-onemklsparse was given.
if test "${enable_onemklsparse+set}" = set; then :
enableval=$enable_onemklsparse; case "${enableval}" in
yes) hypre_using_onemklsparse=yes ;;
no) hypre_using_onemklsparse=no ;;
*) hypre_using_onemklsparse=yes ;;
esac
else
hypre_using_onemklsparse=yes
fi
# Check whether --enable-onemklblas was given.
if test "${enable_onemklblas+set}" = set; then :
enableval=$enable_onemklblas; case "${enableval}" in
yes) hypre_using_onemklblas=yes ;;
no) hypre_using_onemklblas=no ;;
*) hypre_using_onemklblas=yes ;;
esac
else
hypre_using_onemklblas=yes
fi
# Check whether --enable-onemklrand was given.
if test "${enable_onemklrand+set}" = set; then :
enableval=$enable_onemklrand; case "${enableval}" in
yes) hypre_using_onemklrand=yes ;;
no) hypre_using_onemklrand=no ;;
*) hypre_using_onemklrand=yes ;;
esac
else
hypre_using_onemklrand=yes
fi
# Check whether --with-raja was given.
@ -8926,6 +8942,7 @@ then
as_fn_error $? "Asked for unified memory, but not using CUDA, HIP, SYCL, or device OpenMP!" "$LINENO" 5
fi
fi
if test "$hypre_using_cuda" = "yes"
then
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5
@ -9103,6 +9120,305 @@ done
fi
if test "$hypre_using_cusparse" = "yes"
then
as_ac_File=`$as_echo "ac_cv_file_${HYPRE_CUDA_PATH}/include/cusparse.h" | $as_tr_sh`
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${HYPRE_CUDA_PATH}/include/cusparse.h" >&5
$as_echo_n "checking for ${HYPRE_CUDA_PATH}/include/cusparse.h... " >&6; }
if eval \${$as_ac_File+:} false; then :
$as_echo_n "(cached) " >&6
else
test "$cross_compiling" = yes &&
as_fn_error $? "cannot check for file existence when cross compiling" "$LINENO" 5
if test -r "${HYPRE_CUDA_PATH}/include/cusparse.h"; then
eval "$as_ac_File=yes"
else
eval "$as_ac_File=no"
fi
fi
eval ac_res=\$$as_ac_File
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
$as_echo "$ac_res" >&6; }
if eval test \"x\$"$as_ac_File"\" = x"yes"; then :
hypre_found_cusparse=yes; HYPRE_VENDOR_MATH_PATH=${HYPRE_CUDA_PATH}
fi
if test "x$hypre_found_cusparse" != "xyes"
then
as_ac_File=`$as_echo "ac_cv_file_${HYPRE_CUDA_PATH}/../math_libs/include/cusparse.h" | $as_tr_sh`
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${HYPRE_CUDA_PATH}/../math_libs/include/cusparse.h" >&5
$as_echo_n "checking for ${HYPRE_CUDA_PATH}/../math_libs/include/cusparse.h... " >&6; }
if eval \${$as_ac_File+:} false; then :
$as_echo_n "(cached) " >&6
else
test "$cross_compiling" = yes &&
as_fn_error $? "cannot check for file existence when cross compiling" "$LINENO" 5
if test -r "${HYPRE_CUDA_PATH}/../math_libs/include/cusparse.h"; then
eval "$as_ac_File=yes"
else
eval "$as_ac_File=no"
fi
fi
eval ac_res=\$$as_ac_File
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
$as_echo "$ac_res" >&6; }
if eval test \"x\$"$as_ac_File"\" = x"yes"; then :
hypre_found_cusparse=yes; HYPRE_VENDOR_MATH_PATH=$(readlink -f ${HYPRE_CUDA_PATH}/../math_libs); { $as_echo "$as_me:${as_lineno-$LINENO}: setting vendor math path to ${HYPRE_VENDOR_MATH_PATH}" >&5
$as_echo "$as_me: setting vendor math path to ${HYPRE_VENDOR_MATH_PATH}" >&6;}
fi
fi
if test "x$hypre_found_cusparse" != "xyes"
then
as_ac_File=`$as_echo "ac_cv_file_${HYPRE_CUDA_PATH}/../../math_libs/include/cusparse.h" | $as_tr_sh`
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${HYPRE_CUDA_PATH}/../../math_libs/include/cusparse.h" >&5
$as_echo_n "checking for ${HYPRE_CUDA_PATH}/../../math_libs/include/cusparse.h... " >&6; }
if eval \${$as_ac_File+:} false; then :
$as_echo_n "(cached) " >&6
else
test "$cross_compiling" = yes &&
as_fn_error $? "cannot check for file existence when cross compiling" "$LINENO" 5
if test -r "${HYPRE_CUDA_PATH}/../../math_libs/include/cusparse.h"; then
eval "$as_ac_File=yes"
else
eval "$as_ac_File=no"
fi
fi
eval ac_res=\$$as_ac_File
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
$as_echo "$ac_res" >&6; }
if eval test \"x\$"$as_ac_File"\" = x"yes"; then :
hypre_found_cusparse=yes; HYPRE_VENDOR_MATH_PATH=$(readlink -f ${HYPRE_CUDA_PATH}/../../math_libs); { $as_echo "$as_me:${as_lineno-$LINENO}: setting vendor math path to ${HYPRE_VENDOR_MATH_PATH}" >&5
$as_echo "$as_me: setting vendor math path to ${HYPRE_VENDOR_MATH_PATH}" >&6;}
fi
fi
if test "x$hypre_found_cusparse" != "xyes"
then
as_fn_error $? "unable to find cusparse.h ..." "$LINENO" 5
fi
fi
if test "$hypre_using_cublas" = "yes"
then
as_ac_File=`$as_echo "ac_cv_file_${HYPRE_CUDA_PATH}/include/cublas.h" | $as_tr_sh`
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${HYPRE_CUDA_PATH}/include/cublas.h" >&5
$as_echo_n "checking for ${HYPRE_CUDA_PATH}/include/cublas.h... " >&6; }
if eval \${$as_ac_File+:} false; then :
$as_echo_n "(cached) " >&6
else
test "$cross_compiling" = yes &&
as_fn_error $? "cannot check for file existence when cross compiling" "$LINENO" 5
if test -r "${HYPRE_CUDA_PATH}/include/cublas.h"; then
eval "$as_ac_File=yes"
else
eval "$as_ac_File=no"
fi
fi
eval ac_res=\$$as_ac_File
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
$as_echo "$ac_res" >&6; }
if eval test \"x\$"$as_ac_File"\" = x"yes"; then :
hypre_found_cublas=yes; HYPRE_VENDOR_MATH_PATH=${HYPRE_CUDA_PATH}
fi
if test "x$hypre_found_cublas" != "xyes" && test "x${HYPRE_VENDOR_MATH_PATH}" != "x"
then
as_ac_File=`$as_echo "ac_cv_file_${HYPRE_VENDOR_MATH_PATH}/include/cublas.h" | $as_tr_sh`
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${HYPRE_VENDOR_MATH_PATH}/include/cublas.h" >&5
$as_echo_n "checking for ${HYPRE_VENDOR_MATH_PATH}/include/cublas.h... " >&6; }
if eval \${$as_ac_File+:} false; then :
$as_echo_n "(cached) " >&6
else
test "$cross_compiling" = yes &&
as_fn_error $? "cannot check for file existence when cross compiling" "$LINENO" 5
if test -r "${HYPRE_VENDOR_MATH_PATH}/include/cublas.h"; then
eval "$as_ac_File=yes"
else
eval "$as_ac_File=no"
fi
fi
eval ac_res=\$$as_ac_File
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
$as_echo "$ac_res" >&6; }
if eval test \"x\$"$as_ac_File"\" = x"yes"; then :
hypre_found_cublas=yes;
fi
fi
if test "x$hypre_found_cublas" != "xyes"
then
as_ac_File=`$as_echo "ac_cv_file_${HYPRE_CUDA_PATH}/../math_libs/include/cublas.h" | $as_tr_sh`
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${HYPRE_CUDA_PATH}/../math_libs/include/cublas.h" >&5
$as_echo_n "checking for ${HYPRE_CUDA_PATH}/../math_libs/include/cublas.h... " >&6; }
if eval \${$as_ac_File+:} false; then :
$as_echo_n "(cached) " >&6
else
test "$cross_compiling" = yes &&
as_fn_error $? "cannot check for file existence when cross compiling" "$LINENO" 5
if test -r "${HYPRE_CUDA_PATH}/../math_libs/include/cublas.h"; then
eval "$as_ac_File=yes"
else
eval "$as_ac_File=no"
fi
fi
eval ac_res=\$$as_ac_File
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
$as_echo "$ac_res" >&6; }
if eval test \"x\$"$as_ac_File"\" = x"yes"; then :
hypre_found_cublas=yes; HYPRE_VENDOR_MATH_PATH=$(readlink -f ${HYPRE_CUDA_PATH}/../math_libs); { $as_echo "$as_me:${as_lineno-$LINENO}: setting vendor math path to ${HYPRE_VENDOR_MATH_PATH}" >&5
$as_echo "$as_me: setting vendor math path to ${HYPRE_VENDOR_MATH_PATH}" >&6;}
fi
fi
if test "x$hypre_found_cublas" != "xyes"
then
as_ac_File=`$as_echo "ac_cv_file_${HYPRE_CUDA_PATH}/../../math_libs/include/cublas.h" | $as_tr_sh`
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${HYPRE_CUDA_PATH}/../../math_libs/include/cublas.h" >&5
$as_echo_n "checking for ${HYPRE_CUDA_PATH}/../../math_libs/include/cublas.h... " >&6; }
if eval \${$as_ac_File+:} false; then :
$as_echo_n "(cached) " >&6
else
test "$cross_compiling" = yes &&
as_fn_error $? "cannot check for file existence when cross compiling" "$LINENO" 5
if test -r "${HYPRE_CUDA_PATH}/../../math_libs/include/cublas.h"; then
eval "$as_ac_File=yes"
else
eval "$as_ac_File=no"
fi
fi
eval ac_res=\$$as_ac_File
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
$as_echo "$ac_res" >&6; }
if eval test \"x\$"$as_ac_File"\" = x"yes"; then :
hypre_found_cublas=yes; HYPRE_VENDOR_MATH_PATH=$(readlink -f ${HYPRE_CUDA_PATH}/../../math_libs); { $as_echo "$as_me:${as_lineno-$LINENO}: setting vendor math path to ${HYPRE_VENDOR_MATH_PATH}" >&5
$as_echo "$as_me: setting vendor math path to ${HYPRE_VENDOR_MATH_PATH}" >&6;}
fi
fi
if test "x$hypre_found_cublas" != "xyes"
then
as_fn_error $? "unable to find cublas.h ..." "$LINENO" 5
fi
fi
if test "$hypre_using_cusolver" = "yes"
then
as_ac_File=`$as_echo "ac_cv_file_${HYPRE_CUDA_PATH}/include/cusolverDn.h" | $as_tr_sh`
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${HYPRE_CUDA_PATH}/include/cusolverDn.h" >&5
$as_echo_n "checking for ${HYPRE_CUDA_PATH}/include/cusolverDn.h... " >&6; }
if eval \${$as_ac_File+:} false; then :
$as_echo_n "(cached) " >&6
else
test "$cross_compiling" = yes &&
as_fn_error $? "cannot check for file existence when cross compiling" "$LINENO" 5
if test -r "${HYPRE_CUDA_PATH}/include/cusolverDn.h"; then
eval "$as_ac_File=yes"
else
eval "$as_ac_File=no"
fi
fi
eval ac_res=\$$as_ac_File
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
$as_echo "$ac_res" >&6; }
if eval test \"x\$"$as_ac_File"\" = x"yes"; then :
hypre_found_cusolver=yes; HYPRE_VENDOR_MATH_PATH=${HYPRE_CUDA_PATH}
fi
if test "x$hypre_found_cusolver" != "xyes" && test "x${HYPRE_VENDOR_MATH_PATH}" != "x"
then
as_ac_File=`$as_echo "ac_cv_file_${HYPRE_VENDOR_MATH_PATH}/include/cusolverDn.h" | $as_tr_sh`
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${HYPRE_VENDOR_MATH_PATH}/include/cusolverDn.h" >&5
$as_echo_n "checking for ${HYPRE_VENDOR_MATH_PATH}/include/cusolverDn.h... " >&6; }
if eval \${$as_ac_File+:} false; then :
$as_echo_n "(cached) " >&6
else
test "$cross_compiling" = yes &&
as_fn_error $? "cannot check for file existence when cross compiling" "$LINENO" 5
if test -r "${HYPRE_VENDOR_MATH_PATH}/include/cusolverDn.h"; then
eval "$as_ac_File=yes"
else
eval "$as_ac_File=no"
fi
fi
eval ac_res=\$$as_ac_File
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
$as_echo "$ac_res" >&6; }
if eval test \"x\$"$as_ac_File"\" = x"yes"; then :
hypre_found_cusolver=yes;
fi
fi
if test "x$hypre_found_cusolver" != "xyes"
then
as_ac_File=`$as_echo "ac_cv_file_${HYPRE_CUDA_PATH}/../math_libs/include/cusolverDn.h" | $as_tr_sh`
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${HYPRE_CUDA_PATH}/../math_libs/include/cusolverDn.h" >&5
$as_echo_n "checking for ${HYPRE_CUDA_PATH}/../math_libs/include/cusolverDn.h... " >&6; }
if eval \${$as_ac_File+:} false; then :
$as_echo_n "(cached) " >&6
else
test "$cross_compiling" = yes &&
as_fn_error $? "cannot check for file existence when cross compiling" "$LINENO" 5
if test -r "${HYPRE_CUDA_PATH}/../math_libs/include/cusolverDn.h"; then
eval "$as_ac_File=yes"
else
eval "$as_ac_File=no"
fi
fi
eval ac_res=\$$as_ac_File
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
$as_echo "$ac_res" >&6; }
if eval test \"x\$"$as_ac_File"\" = x"yes"; then :
hypre_found_cusolver=yes; HYPRE_VENDOR_MATH_PATH=$(readlink -f ${HYPRE_CUDA_PATH}/../math_libs); { $as_echo "$as_me:${as_lineno-$LINENO}: setting vendor math path to ${HYPRE_VENDOR_MATH_PATH}" >&5
$as_echo "$as_me: setting vendor math path to ${HYPRE_VENDOR_MATH_PATH}" >&6;}
fi
fi
if test "x$hypre_found_cusolver" != "xyes"
then
as_ac_File=`$as_echo "ac_cv_file_${HYPRE_CUDA_PATH}/../../math_libs/include/cusolverDn.h" | $as_tr_sh`
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${HYPRE_CUDA_PATH}/../../math_libs/include/cusolverDn.h" >&5
$as_echo_n "checking for ${HYPRE_CUDA_PATH}/../../math_libs/include/cusolverDn.h... " >&6; }
if eval \${$as_ac_File+:} false; then :
$as_echo_n "(cached) " >&6
else
test "$cross_compiling" = yes &&
as_fn_error $? "cannot check for file existence when cross compiling" "$LINENO" 5
if test -r "${HYPRE_CUDA_PATH}/../../math_libs/include/cusolverDn.h"; then
eval "$as_ac_File=yes"
else
eval "$as_ac_File=no"
fi
fi
eval ac_res=\$$as_ac_File
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
$as_echo "$ac_res" >&6; }
if eval test \"x\$"$as_ac_File"\" = x"yes"; then :
hypre_found_cusolver=yes; HYPRE_VENDOR_MATH_PATH=$(readlink -f ${HYPRE_CUDA_PATH}/../../math_libs); { $as_echo "$as_me:${as_lineno-$LINENO}: setting vendor math path to ${HYPRE_VENDOR_MATH_PATH}" >&5
$as_echo "$as_me: setting vendor math path to ${HYPRE_VENDOR_MATH_PATH}" >&6;}
fi
fi
if test "x$hypre_found_cusolver" != "xyes"
then
as_fn_error $? "unable to find cusolverDn.h ..." "$LINENO" 5
fi
fi
if test x"$hypre_using_hip" == x"yes" ; then :
if test -n "$ROCM_PATH"; then :
HYPRE_ROCM_PREFIX=$ROCM_PATH
@ -9254,6 +9570,13 @@ $as_echo "#define HYPRE_USING_CUDA 1" >>confdefs.h
HYPRE_CUDA_INCLUDE='-I${HYPRE_CUDA_PATH}/include'
HYPRE_CUDA_LIBS='-L${HYPRE_CUDA_PATH}/lib64 -lcudart'
if test x"$hypre_using_cusparse" == x"yes" || test x"$hypre_using_cublas" == x"yes" || test x"$hypre_using_cusolver" == x"yes"; then :
if test "x$HYPRE_CUDA_PATH" != "x$HYPRE_VENDOR_MATH_PATH"; then :
HYPRE_CUDA_INCLUDE+=" -I${HYPRE_VENDOR_MATH_PATH}/include"
HYPRE_CUDA_LIBS+=" -L${HYPRE_VENDOR_MATH_PATH}/lib64"
fi
fi
if test "$hypre_using_gpu_profiling" = "yes"
then