xref: /petsc/src/sys/objects/device/impls/cupm/cupmblasinterface.cxx (revision 2f1953c436c71e828507cd2f301e2bf2613d8582)
117f48955SJacob Faibussowitsch #include <petsc/private/cupmblasinterface.hpp>
2*96a4b4d9SJacob Faibussowitsch #include <petsc/private/petscadvancedmacros.h>
317f48955SJacob Faibussowitsch 
4d71ae5a4SJacob Faibussowitsch namespace Petsc
5d71ae5a4SJacob Faibussowitsch {
617f48955SJacob Faibussowitsch 
7d71ae5a4SJacob Faibussowitsch namespace device
8d71ae5a4SJacob Faibussowitsch {
917f48955SJacob Faibussowitsch 
10d71ae5a4SJacob Faibussowitsch namespace cupm
11d71ae5a4SJacob Faibussowitsch {
1217f48955SJacob Faibussowitsch 
13d71ae5a4SJacob Faibussowitsch namespace impl
14d71ae5a4SJacob Faibussowitsch {
1517f48955SJacob Faibussowitsch 
160e6b6b59SJacob Faibussowitsch #define PETSC_CUPMBLAS_STATIC_VARIABLE_DEFN(THEIRS, DEVICE, OURS) const decltype(THEIRS) BlasInterfaceImpl<DeviceType::DEVICE>::OURS;
1717f48955SJacob Faibussowitsch 
1817f48955SJacob Faibussowitsch // in case either one or the other don't agree on a name, you can specify all three here:
1917f48955SJacob Faibussowitsch //
2017f48955SJacob Faibussowitsch // PETSC_CUPMBLAS_DEFINE_STATIC_VARIABLE_EXACT(CUBLAS_STATUS_SUCCESS, rocblas_status_success,
2117f48955SJacob Faibussowitsch // CUPMBLAS_STATUS_SUCCESS) ->
2217f48955SJacob Faibussowitsch // const decltype(CUBLAS_STATUS_SUCCESS)  BlasInterface<DeviceType::CUDA>::CUPMBLAS_STATUS_SUCCESS;
2317f48955SJacob Faibussowitsch // const decltype(rocblas_status_success) BlasInterface<DeviceType::HIP>::CUPMBLAS_STATUS_SUCCESS;
2417f48955SJacob Faibussowitsch #define PETSC_CUPMBLAS_DEFINE_STATIC_VARIABLE_EXACT(CUORIGINAL, HIPORIGINAL, OURS) \
259371c9d4SSatish 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)
2617f48955SJacob Faibussowitsch 
2717f48955SJacob Faibussowitsch // if both cuda and hip agree on the same naming scheme i.e. CUBLAS_STATUS_SUCCESS and
2817f48955SJacob Faibussowitsch // HIPBLAS_STATUS_SUCCESS:
2917f48955SJacob Faibussowitsch //
3017f48955SJacob Faibussowitsch // PETSC_CUPMBLAS_DEFINE_STATIC_VARIABLE_MATCHING_PREFIX(STATUS_SUCCESS) ->
3117f48955SJacob Faibussowitsch // const decltype(CUBLAS_STATUS_SUCCESS)  BlasInterface<DeviceType::CUDA>::CUPMBLAS_STATUS_SUCCESS;
3217f48955SJacob Faibussowitsch // const decltype(HIPBLAS_STATUS_SUCCESS) BlasInterface<DeviceType::HIP>::CUPMBLAS_STATUS_SUCCESS;
339371c9d4SSatish 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))
3417f48955SJacob Faibussowitsch 
3517f48955SJacob Faibussowitsch PETSC_CUPMBLAS_DEFINE_STATIC_VARIABLE_MATCHING_SCHEME(STATUS_SUCCESS)
3617f48955SJacob Faibussowitsch PETSC_CUPMBLAS_DEFINE_STATIC_VARIABLE_MATCHING_SCHEME(STATUS_NOT_INITIALIZED)
3717f48955SJacob Faibussowitsch PETSC_CUPMBLAS_DEFINE_STATIC_VARIABLE_MATCHING_SCHEME(STATUS_ALLOC_FAILED)
380e6b6b59SJacob Faibussowitsch PETSC_CUPMBLAS_DEFINE_STATIC_VARIABLE_MATCHING_SCHEME(POINTER_MODE_HOST)
390e6b6b59SJacob Faibussowitsch PETSC_CUPMBLAS_DEFINE_STATIC_VARIABLE_MATCHING_SCHEME(POINTER_MODE_DEVICE)
40*96a4b4d9SJacob Faibussowitsch PETSC_CUPMBLAS_DEFINE_STATIC_VARIABLE_MATCHING_SCHEME(OP_T)
41*96a4b4d9SJacob Faibussowitsch PETSC_CUPMBLAS_DEFINE_STATIC_VARIABLE_MATCHING_SCHEME(OP_N)
42*96a4b4d9SJacob Faibussowitsch PETSC_CUPMBLAS_DEFINE_STATIC_VARIABLE_MATCHING_SCHEME(OP_C)
43*96a4b4d9SJacob Faibussowitsch PETSC_CUPMBLAS_DEFINE_STATIC_VARIABLE_MATCHING_SCHEME(FILL_MODE_LOWER)
44*96a4b4d9SJacob Faibussowitsch PETSC_CUPMBLAS_DEFINE_STATIC_VARIABLE_MATCHING_SCHEME(FILL_MODE_UPPER)
45*96a4b4d9SJacob Faibussowitsch PETSC_CUPMBLAS_DEFINE_STATIC_VARIABLE_MATCHING_SCHEME(SIDE_LEFT)
46*96a4b4d9SJacob Faibussowitsch PETSC_CUPMBLAS_DEFINE_STATIC_VARIABLE_MATCHING_SCHEME(DIAG_NON_UNIT)
4717f48955SJacob Faibussowitsch 
480e6b6b59SJacob Faibussowitsch #if PetscDefined(HAVE_CUDA)
490e6b6b59SJacob Faibussowitsch template struct BlasInterface<DeviceType::CUDA>;
500e6b6b59SJacob Faibussowitsch #endif
5117f48955SJacob Faibussowitsch 
520e6b6b59SJacob Faibussowitsch #if PetscDefined(HAVE_HIP)
530e6b6b59SJacob Faibussowitsch template struct BlasInterface<DeviceType::HIP>;
540e6b6b59SJacob Faibussowitsch #endif
5517f48955SJacob Faibussowitsch 
560e6b6b59SJacob Faibussowitsch } // namespace impl
570e6b6b59SJacob Faibussowitsch 
580e6b6b59SJacob Faibussowitsch } // namespace cupm
590e6b6b59SJacob Faibussowitsch 
600e6b6b59SJacob Faibussowitsch } // namespace device
6117f48955SJacob Faibussowitsch 
6217f48955SJacob Faibussowitsch } // namespace Petsc
63