117f48955SJacob Faibussowitsch #include <petsc/private/cupmblasinterface.hpp> 217f48955SJacob Faibussowitsch 3*9371c9d4SSatish Balay namespace Petsc { 417f48955SJacob Faibussowitsch 5*9371c9d4SSatish Balay namespace Device { 617f48955SJacob Faibussowitsch 7*9371c9d4SSatish Balay namespace CUPM { 817f48955SJacob Faibussowitsch 9*9371c9d4SSatish Balay namespace Impl { 1017f48955SJacob Faibussowitsch 11*9371c9d4SSatish Balay #define PETSC_CUPMBLAS_STATIC_VARIABLE_DEFN(THEIRS, DEVICE, OURS) const decltype(THEIRS) BlasInterface<DeviceType::DEVICE>::OURS; 1217f48955SJacob Faibussowitsch 1317f48955SJacob Faibussowitsch // in case either one or the other don't agree on a name, you can specify all three here: 1417f48955SJacob Faibussowitsch // 1517f48955SJacob Faibussowitsch // PETSC_CUPMBLAS_DEFINE_STATIC_VARIABLE_EXACT(CUBLAS_STATUS_SUCCESS, rocblas_status_success, 1617f48955SJacob Faibussowitsch // CUPMBLAS_STATUS_SUCCESS) -> 1717f48955SJacob Faibussowitsch // const decltype(CUBLAS_STATUS_SUCCESS) BlasInterface<DeviceType::CUDA>::CUPMBLAS_STATUS_SUCCESS; 1817f48955SJacob Faibussowitsch // const decltype(rocblas_status_success) BlasInterface<DeviceType::HIP>::CUPMBLAS_STATUS_SUCCESS; 1917f48955SJacob Faibussowitsch #define PETSC_CUPMBLAS_DEFINE_STATIC_VARIABLE_EXACT(CUORIGINAL, HIPORIGINAL, OURS) \ 20*9371c9d4SSatish Balay PetscIfPetscDefined(HAVE_CUDA, PETSC_CUPMBLAS_STATIC_VARIABLE_DEFN, PetscExpandToNothing)(CUORIGINAL, CUDA, OURS) PetscIfPetscDefined(HAVE_HIP, PETSC_CUPMBLAS_STATIC_VARIABLE_DEFN, PetscExpandToNothing)(HIPORIGINAL, HIP, OURS) 2117f48955SJacob Faibussowitsch 2217f48955SJacob Faibussowitsch // if both cuda and hip agree on the same naming scheme i.e. CUBLAS_STATUS_SUCCESS and 2317f48955SJacob Faibussowitsch // HIPBLAS_STATUS_SUCCESS: 2417f48955SJacob Faibussowitsch // 2517f48955SJacob Faibussowitsch // PETSC_CUPMBLAS_DEFINE_STATIC_VARIABLE_MATCHING_PREFIX(STATUS_SUCCESS) -> 2617f48955SJacob Faibussowitsch // const decltype(CUBLAS_STATUS_SUCCESS) BlasInterface<DeviceType::CUDA>::CUPMBLAS_STATUS_SUCCESS; 2717f48955SJacob Faibussowitsch // const decltype(HIPBLAS_STATUS_SUCCESS) BlasInterface<DeviceType::HIP>::CUPMBLAS_STATUS_SUCCESS; 28*9371c9d4SSatish Balay #define PETSC_CUPMBLAS_DEFINE_STATIC_VARIABLE_MATCHING_SCHEME(SUFFIX) PETSC_CUPMBLAS_DEFINE_STATIC_VARIABLE_EXACT(PetscConcat(CUBLAS_, SUFFIX), PetscConcat(HIPBLAS_, SUFFIX), PetscConcat(CUPMBLAS_, SUFFIX)) 2917f48955SJacob Faibussowitsch 3017f48955SJacob Faibussowitsch PETSC_CUPMBLAS_DEFINE_STATIC_VARIABLE_MATCHING_SCHEME(STATUS_SUCCESS) 3117f48955SJacob Faibussowitsch PETSC_CUPMBLAS_DEFINE_STATIC_VARIABLE_MATCHING_SCHEME(STATUS_NOT_INITIALIZED) 3217f48955SJacob Faibussowitsch PETSC_CUPMBLAS_DEFINE_STATIC_VARIABLE_MATCHING_SCHEME(STATUS_ALLOC_FAILED) 3317f48955SJacob Faibussowitsch 3417f48955SJacob Faibussowitsch } // namespace Impl 3517f48955SJacob Faibussowitsch 3617f48955SJacob Faibussowitsch } // namespace CUPM 3717f48955SJacob Faibussowitsch 3817f48955SJacob Faibussowitsch } // namespace Device 3917f48955SJacob Faibussowitsch 4017f48955SJacob Faibussowitsch } // namespace Petsc 41