Add optional LAPACK/vendor library bindings for dense linear algebra
Starting this PR for discussion about a proposed interface to LAPACK/cuSOLVER/rocSOLVER in this branch.
The first use case is kernels for a future LOBPCG eigenvalue solver, which is why I started by adding a kernel to a newlobpcg namespace. The symmetric generalized eigenvalue problem ([he/sy]gvd) is the first addition, with Reference and Cuda support as of opening this branch, but I think we will need at least two other routines for LOBPCG. Once everything is settled with the interface, rocSOLVER support should be simple to add. Dpcpp support should be able to be added through expanding the existing oneMKL bindings.
Right now, only LAPACK with 32-bit integers will work. We can enforce this during CMake configuration, but it would require increasing the minimum CMake requirement quite a bit (to 3.22).
(Note: 5217d60cc4efaa70afdc65650f90452f39b2e11f is actually part of 3c600f1ff1d35ae51f05779e57595e3c6d9f90ae, but I missed checking in the new file. Can be cleaned up when doing a future rebase 🙂 ) Edit: This cleanup has been done, and the new commit is afd6e009d69974cd2c5d230eb24b86f3a63a70c5.
Error: The following files need to be formatted:
accessor/cuda_helper.hpp
accessor/hip_helper.hpp
accessor/reduced_row_major_reference.hpp
accessor/reference_helper.hpp
accessor/sycl_helper.hpp
common/cuda_hip/base/math.hpp
common/cuda_hip/base/types.hpp
common/cuda_hip/components/atomic.hpp
common/cuda_hip/factorization/par_ic_kernels.cpp
common/cuda_hip/factorization/par_ict_kernels.cpp
common/cuda_hip/factorization/par_ilu_kernels.cpp
common/cuda_hip/factorization/par_ilut_select_common.cpp
common/cuda_hip/factorization/par_ilut_select_kernels.cpp
common/cuda_hip/factorization/par_ilut_sweep_kernels.cpp
common/cuda_hip/matrix/coo_kernels.cpp
common/cuda_hip/preconditioner/batch_jacobi_kernels.hpp
common/cuda_hip/preconditioner/isai_kernels.cpp
common/cuda_hip/solver/batch_bicgstab_kernels.hpp
common/cuda_hip/solver/batch_cg_kernels.hpp
common/cuda_hip/solver/idr_kernels.cpp
core/base/batch_multi_vector.cpp
core/base/block_operator.cpp
core/base/mixed_precision_types.hpp
core/base/mtx_io.cpp
core/config/dispatch.hpp
core/config/type_descriptor_helper.hpp
core/log/solver_progress.cpp
core/matrix/batch_csr.cpp
core/matrix/batch_dense.cpp
core/matrix/batch_ell.cpp
core/matrix/dense.cpp
core/matrix/diagonal.cpp
core/matrix/ell.cpp
core/matrix/fbcsr.cpp
core/matrix/hybrid.cpp
core/matrix/permutation.cpp
core/matrix/row_gatherer.cpp
core/matrix/sellp.cpp
core/test/base/extended_float.cpp
core/test/base/floating_bit_helper.hpp
core/test/base/half.cpp
core/test/base/mtx_io.cpp
core/test/utils/matrix_generator.hpp
core/test/utils/matrix_generator_test.cpp
core/test/utils/matrix_utils_test.cpp
cuda/base/types.hpp
cuda/solver/common_trs_kernels.cuh
cuda/test/base/math.cu
dpcpp/base/complex.hpp
dpcpp/base/math.hpp
dpcpp/base/types.hpp
dpcpp/components/reduction.dp.hpp
dpcpp/factorization/par_ilut_select_common.dp.cpp
dpcpp/factorization/par_ilut_select_kernels.hpp.inc
dpcpp/matrix/coo_kernels.dp.cpp
dpcpp/preconditioner/batch_block_jacobi.hpp
dpcpp/solver/batch_bicgstab_kernels.dp.cpp
dpcpp/solver/batch_bicgstab_kernels.hpp
dpcpp/solver/batch_cg_kernels.hpp
dpcpp/solver/idr_kernels.dp.cpp
hip/base/types.hip.hpp
hip/components/cooperative_groups.hip.hpp
hip/test/base/math.hip.cpp
hip/test/matrix/fbcsr_kernels.cpp
include/ginkgo/core/base/batch_multi_vector.hpp
include/ginkgo/core/base/math.hpp
include/ginkgo/core/log/logger.hpp
include/ginkgo/core/matrix/batch_csr.hpp
include/ginkgo/core/matrix/batch_dense.hpp
include/ginkgo/core/matrix/batch_ell.hpp
include/ginkgo/core/matrix/diagonal.hpp
include/ginkgo/core/matrix/ell.hpp
include/ginkgo/core/matrix/fbcsr.hpp
include/ginkgo/core/matrix/hybrid.hpp
include/ginkgo/core/matrix/sellp.hpp
omp/components/atomic.hpp
reference/solver/batch_bicgstab_kernels.hpp
reference/solver/batch_cg_kernels.hpp
reference/test/factorization/par_ilut_kernels.cpp
reference/test/preconditioner/ilu.cpp
reference/test/preconditioner/isai_kernels.cpp
reference/test/reorder/mc64_kernels.cpp
reference/test/solver/batch_bicgstab_kernels.cpp
reference/test/solver/batch_cg_kernels.cpp
reference/test/solver/cgs_kernels.cpp
test/components/reduce_array_kernels.cpp
test/factorization/par_ict_kernels.cpp
test/factorization/par_ilut_kernels.cpp
You can find a formatting patch under Artifacts here or run format! if you have write access to Ginkgo