Actual source code: cupmblasinterface.cxx
1: #include <petsc/private/cupmblasinterface.hpp>
3: namespace Petsc
4: {
6: namespace Device
7: {
9: namespace CUPM
10: {
12: namespace Impl
13: {
15: #define PETSC_CUPMBLAS_STATIC_VARIABLE_DEFN(THEIRS,DEVICE,OURS) \
16: const decltype(THEIRS) BlasInterface<DeviceType::DEVICE>::OURS;
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)
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))
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)
41: } // namespace Impl
43: } // namespace CUPM
45: } // namespace Device
47: } // namespace Petsc