1*17f48955SJacob Faibussowitsch #include <petsc/private/cupmblasinterface.hpp> 2*17f48955SJacob Faibussowitsch 3*17f48955SJacob Faibussowitsch namespace Petsc 4*17f48955SJacob Faibussowitsch { 5*17f48955SJacob Faibussowitsch 6*17f48955SJacob Faibussowitsch namespace Device 7*17f48955SJacob Faibussowitsch { 8*17f48955SJacob Faibussowitsch 9*17f48955SJacob Faibussowitsch namespace CUPM 10*17f48955SJacob Faibussowitsch { 11*17f48955SJacob Faibussowitsch 12*17f48955SJacob Faibussowitsch namespace Impl 13*17f48955SJacob Faibussowitsch { 14*17f48955SJacob Faibussowitsch 15*17f48955SJacob Faibussowitsch #define PETSC_CUPMBLAS_STATIC_VARIABLE_DEFN(THEIRS,DEVICE,OURS) \ 16*17f48955SJacob Faibussowitsch const decltype(THEIRS) BlasInterface<DeviceType::DEVICE>::OURS; 17*17f48955SJacob Faibussowitsch 18*17f48955SJacob Faibussowitsch // in case either one or the other don't agree on a name, you can specify all three here: 19*17f48955SJacob Faibussowitsch // 20*17f48955SJacob Faibussowitsch // PETSC_CUPMBLAS_DEFINE_STATIC_VARIABLE_EXACT(CUBLAS_STATUS_SUCCESS, rocblas_status_success, 21*17f48955SJacob Faibussowitsch // CUPMBLAS_STATUS_SUCCESS) -> 22*17f48955SJacob Faibussowitsch // const decltype(CUBLAS_STATUS_SUCCESS) BlasInterface<DeviceType::CUDA>::CUPMBLAS_STATUS_SUCCESS; 23*17f48955SJacob Faibussowitsch // const decltype(rocblas_status_success) BlasInterface<DeviceType::HIP>::CUPMBLAS_STATUS_SUCCESS; 24*17f48955SJacob Faibussowitsch #define PETSC_CUPMBLAS_DEFINE_STATIC_VARIABLE_EXACT(CUORIGINAL,HIPORIGINAL,OURS) \ 25*17f48955SJacob Faibussowitsch PetscIfPetscDefined(HAVE_CUDA,PETSC_CUPMBLAS_STATIC_VARIABLE_DEFN,PetscExpandToNothing)(CUORIGINAL,CUDA,OURS) \ 26*17f48955SJacob Faibussowitsch PetscIfPetscDefined(HAVE_HIP,PETSC_CUPMBLAS_STATIC_VARIABLE_DEFN,PetscExpandToNothing)(HIPORIGINAL,HIP,OURS) 27*17f48955SJacob Faibussowitsch 28*17f48955SJacob Faibussowitsch // if both cuda and hip agree on the same naming scheme i.e. CUBLAS_STATUS_SUCCESS and 29*17f48955SJacob Faibussowitsch // HIPBLAS_STATUS_SUCCESS: 30*17f48955SJacob Faibussowitsch // 31*17f48955SJacob Faibussowitsch // PETSC_CUPMBLAS_DEFINE_STATIC_VARIABLE_MATCHING_PREFIX(STATUS_SUCCESS) -> 32*17f48955SJacob Faibussowitsch // const decltype(CUBLAS_STATUS_SUCCESS) BlasInterface<DeviceType::CUDA>::CUPMBLAS_STATUS_SUCCESS; 33*17f48955SJacob Faibussowitsch // const decltype(HIPBLAS_STATUS_SUCCESS) BlasInterface<DeviceType::HIP>::CUPMBLAS_STATUS_SUCCESS; 34*17f48955SJacob Faibussowitsch #define PETSC_CUPMBLAS_DEFINE_STATIC_VARIABLE_MATCHING_SCHEME(SUFFIX) \ 35*17f48955SJacob Faibussowitsch PETSC_CUPMBLAS_DEFINE_STATIC_VARIABLE_EXACT(PetscConcat(CUBLAS_,SUFFIX),PetscConcat(HIPBLAS_,SUFFIX),PetscConcat(CUPMBLAS_,SUFFIX)) 36*17f48955SJacob Faibussowitsch 37*17f48955SJacob Faibussowitsch PETSC_CUPMBLAS_DEFINE_STATIC_VARIABLE_MATCHING_SCHEME(STATUS_SUCCESS) 38*17f48955SJacob Faibussowitsch PETSC_CUPMBLAS_DEFINE_STATIC_VARIABLE_MATCHING_SCHEME(STATUS_NOT_INITIALIZED) 39*17f48955SJacob Faibussowitsch PETSC_CUPMBLAS_DEFINE_STATIC_VARIABLE_MATCHING_SCHEME(STATUS_ALLOC_FAILED) 40*17f48955SJacob Faibussowitsch 41*17f48955SJacob Faibussowitsch } // namespace Impl 42*17f48955SJacob Faibussowitsch 43*17f48955SJacob Faibussowitsch } // namespace CUPM 44*17f48955SJacob Faibussowitsch 45*17f48955SJacob Faibussowitsch } // namespace Device 46*17f48955SJacob Faibussowitsch 47*17f48955SJacob Faibussowitsch } // namespace Petsc 48