xref: /petsc/src/sys/objects/device/impls/cupm/cupmsolverinterface.cxx (revision a0fd03d2a5a6b7d36057de1ccf1c52febfdc65c0)
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