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