196a4b4d9SJacob Faibussowitsch #include <petsc/private/cupmsolverinterface.hpp> 296a4b4d9SJacob Faibussowitsch #include <petsc/private/petscadvancedmacros.h> 396a4b4d9SJacob Faibussowitsch 496a4b4d9SJacob Faibussowitsch namespace Petsc 596a4b4d9SJacob Faibussowitsch { 696a4b4d9SJacob Faibussowitsch 796a4b4d9SJacob Faibussowitsch namespace device 896a4b4d9SJacob Faibussowitsch { 996a4b4d9SJacob Faibussowitsch 1096a4b4d9SJacob Faibussowitsch namespace cupm 1196a4b4d9SJacob Faibussowitsch { 1296a4b4d9SJacob Faibussowitsch 1396a4b4d9SJacob Faibussowitsch namespace impl 1496a4b4d9SJacob Faibussowitsch { 1596a4b4d9SJacob Faibussowitsch 1696a4b4d9SJacob Faibussowitsch #define PETSC_CUPMSOLVER_STATIC_VARIABLE_DEFN(THEIRS, DEVICE, OURS) const decltype(THEIRS) SolverInterfaceImpl<DeviceType::DEVICE>::OURS; 1796a4b4d9SJacob Faibussowitsch 1896a4b4d9SJacob Faibussowitsch #define PETSC_CUPMSOLVER_DEFINE_STATIC_VARIABLE_EXACT(CUORIGINAL, HIPORIGINAL, OURS) \ 1996a4b4d9SJacob Faibussowitsch PetscIfPetscDefined(HAVE_CUDA, PETSC_CUPMSOLVER_STATIC_VARIABLE_DEFN, PetscExpandToNothing)(CUORIGINAL, CUDA, OURS) PetscIfPetscDefined(HAVE_HIP, PETSC_CUPMSOLVER_STATIC_VARIABLE_DEFN, PetscExpandToNothing)(HIPORIGINAL, HIP, OURS) 2096a4b4d9SJacob Faibussowitsch 2196a4b4d9SJacob Faibussowitsch #define PETSC_CUPMSOLVER_DEFINE_STATIC_VARIABLE_MATCHING_SCHEME(SUFFIX) PETSC_CUPMSOLVER_DEFINE_STATIC_VARIABLE_EXACT(PetscConcat(CUSOLVER_, SUFFIX), PetscConcat(HIPSOLVER_, SUFFIX), PetscConcat(CUPMSOLVER_, SUFFIX)) 2296a4b4d9SJacob Faibussowitsch 2396a4b4d9SJacob Faibussowitsch PETSC_CUPMSOLVER_DEFINE_STATIC_VARIABLE_MATCHING_SCHEME(STATUS_SUCCESS) 2496a4b4d9SJacob Faibussowitsch PETSC_CUPMSOLVER_DEFINE_STATIC_VARIABLE_MATCHING_SCHEME(STATUS_NOT_INITIALIZED) 2596a4b4d9SJacob Faibussowitsch PETSC_CUPMSOLVER_DEFINE_STATIC_VARIABLE_MATCHING_SCHEME(STATUS_ALLOC_FAILED) 2696a4b4d9SJacob Faibussowitsch PETSC_CUPMSOLVER_DEFINE_STATIC_VARIABLE_MATCHING_SCHEME(STATUS_INTERNAL_ERROR) 2796a4b4d9SJacob Faibussowitsch 2896a4b4d9SJacob Faibussowitsch PETSC_CUPMSOLVER_DEFINE_STATIC_VARIABLE_EXACT(CUBLAS_OP_T, HIPSOLVER_OP_T, CUPMSOLVER_OP_T) 2996a4b4d9SJacob Faibussowitsch PETSC_CUPMSOLVER_DEFINE_STATIC_VARIABLE_EXACT(CUBLAS_OP_N, HIPSOLVER_OP_N, CUPMSOLVER_OP_N) 3096a4b4d9SJacob Faibussowitsch PETSC_CUPMSOLVER_DEFINE_STATIC_VARIABLE_EXACT(CUBLAS_OP_C, HIPSOLVER_OP_C, CUPMSOLVER_OP_C) 3196a4b4d9SJacob Faibussowitsch 3296a4b4d9SJacob Faibussowitsch PETSC_CUPMSOLVER_DEFINE_STATIC_VARIABLE_EXACT(CUBLAS_FILL_MODE_LOWER, HIPSOLVER_FILL_MODE_LOWER, CUPMSOLVER_FILL_MODE_LOWER) 3396a4b4d9SJacob Faibussowitsch PETSC_CUPMSOLVER_DEFINE_STATIC_VARIABLE_EXACT(CUBLAS_FILL_MODE_UPPER, HIPSOLVER_FILL_MODE_UPPER, CUPMSOLVER_FILL_MODE_UPPER) 3496a4b4d9SJacob Faibussowitsch 3596a4b4d9SJacob Faibussowitsch PETSC_CUPMSOLVER_DEFINE_STATIC_VARIABLE_EXACT(CUBLAS_SIDE_LEFT, HIPSOLVER_SIDE_LEFT, CUPMSOLVER_SIDE_LEFT) 3696a4b4d9SJacob Faibussowitsch PETSC_CUPMSOLVER_DEFINE_STATIC_VARIABLE_EXACT(CUBLAS_SIDE_RIGHT, HIPSOLVER_SIDE_RIGHT, CUPMSOLVER_SIDE_RIGHT) 3796a4b4d9SJacob Faibussowitsch 38*a0fd03d2SJacob Faibussowitsch #if PetscDefined(HAVE_CUDA) 39*a0fd03d2SJacob Faibussowitsch template struct SolverInterface<DeviceType::CUDA>; 40*a0fd03d2SJacob Faibussowitsch #endif 41*a0fd03d2SJacob Faibussowitsch 42*a0fd03d2SJacob Faibussowitsch #if PetscDefined(HAVE_HIP) 43*a0fd03d2SJacob Faibussowitsch template struct SolverInterface<DeviceType::HIP>; 44*a0fd03d2SJacob Faibussowitsch #endif 45*a0fd03d2SJacob Faibussowitsch 4696a4b4d9SJacob Faibussowitsch } // namespace impl 4796a4b4d9SJacob Faibussowitsch 4896a4b4d9SJacob Faibussowitsch } // namespace cupm 4996a4b4d9SJacob Faibussowitsch 5096a4b4d9SJacob Faibussowitsch } // namespace device 5196a4b4d9SJacob Faibussowitsch 5296a4b4d9SJacob Faibussowitsch } // namespace Petsc 53