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