Actual source code: blas_cyclic_cupm.cxx

  1: #include "blas_cyclic_cupm.h"
  2: #include "blas_cyclic_cupm_impl.hpp"

  4: namespace Petsc
  5: {

  7: namespace device
  8: {

 10: namespace cupm
 11: {

 13: namespace impl
 14: {
 15: #if PetscDefined(HAVE_CUDA)
 16: template struct BLASCyclic<DeviceType::CUDA>;
 17: #endif

 19: #if PetscDefined(HAVE_HIP)
 20: template struct BLASCyclic<DeviceType::HIP>;
 21: #endif
 22: } // namespace impl

 24: } // namespace cupm

 26: } // namespace device

 28: } // namespace Petsc

 30: PETSC_INTERN PetscErrorCode AXPBYCyclic_CUPM_Private(PetscInt m, PetscInt oldest, PetscInt next, PetscScalar alpha, const PetscScalar x[], PetscScalar beta, PetscScalar y[], PetscInt y_stride)
 31: {
 32:   PetscDeviceContext dctx;
 33:   PetscDeviceType    device_type;

 35:   PetscFunctionBegin;
 36:   PetscCall(PetscDeviceContextGetCurrentContext(&dctx));
 37:   PetscCall(PetscDeviceContextGetDeviceType(dctx, &device_type));
 38:   switch (device_type) {
 39: #if PetscDefined(HAVE_CUDA)
 40:   case PETSC_DEVICE_CUDA:
 41:     PetscCall(::Petsc::device::cupm::impl::BLASCyclic<::Petsc::device::cupm::DeviceType::CUDA>::axpby(dctx, m, oldest, next, alpha, x, beta, y, y_stride));
 42:     break;
 43: #endif
 44: #if PetscDefined(HAVE_HIP)
 45:   case PETSC_DEVICE_HIP:
 46:     PetscCall(::Petsc::device::cupm::impl::BLASCyclic<::Petsc::device::cupm::DeviceType::HIP>::axpby(dctx, m, oldest, next, alpha, x, beta, y, y_stride));
 47:     break;
 48: #endif
 49:   default:
 50:     SETERRQ(PETSC_COMM_SELF, PETSC_ERR_SUP, "Unsupported device type %s", PetscDeviceTypes[device_type]);
 51:   }
 52:   PetscFunctionReturn(PETSC_SUCCESS);
 53: }

 55: PETSC_INTERN PetscErrorCode DMVCyclic_CUPM_Private(PetscBool hermitian_transpose, PetscInt m, PetscInt oldest, PetscInt next, PetscScalar alpha, const PetscScalar A[], const PetscScalar x[], PetscScalar beta, PetscScalar y[])
 56: {
 57:   PetscDeviceContext dctx;
 58:   PetscDeviceType    device_type;

 60:   PetscFunctionBegin;
 61:   PetscCall(PetscDeviceContextGetCurrentContext(&dctx));
 62:   PetscCall(PetscDeviceContextGetDeviceType(dctx, &device_type));
 63:   switch (device_type) {
 64: #if PetscDefined(HAVE_CUDA)
 65:   case PETSC_DEVICE_CUDA:
 66:     PetscCall(::Petsc::device::cupm::impl::BLASCyclic<::Petsc::device::cupm::DeviceType::CUDA>::dmv(dctx, hermitian_transpose, m, oldest, next, alpha, A, x, beta, y));
 67:     break;
 68: #endif
 69: #if PetscDefined(HAVE_HIP)
 70:   case PETSC_DEVICE_HIP:
 71:     PetscCall(::Petsc::device::cupm::impl::BLASCyclic<::Petsc::device::cupm::DeviceType::HIP>::dmv(dctx, hermitian_transpose, m, oldest, next, alpha, A, x, beta, y));
 72:     break;
 73: #endif
 74:   default:
 75:     SETERRQ(PETSC_COMM_SELF, PETSC_ERR_SUP, "Unsupported device type %s", PetscDeviceTypes[device_type]);
 76:   }
 77:   PetscFunctionReturn(PETSC_SUCCESS);
 78: }

 80: PETSC_INTERN PetscErrorCode DSVCyclic_CUPM_Private(PetscBool hermitian_transpose, PetscInt m, PetscInt oldest, PetscInt next, const PetscScalar A[], const PetscScalar x[], PetscScalar y[])
 81: {
 82:   PetscDeviceContext dctx;
 83:   PetscDeviceType    device_type;

 85:   PetscFunctionBegin;
 86:   PetscCall(PetscDeviceContextGetCurrentContext(&dctx));
 87:   PetscCall(PetscDeviceContextGetDeviceType(dctx, &device_type));
 88:   switch (device_type) {
 89: #if PetscDefined(HAVE_CUDA)
 90:   case PETSC_DEVICE_CUDA:
 91:     PetscCall(::Petsc::device::cupm::impl::BLASCyclic<::Petsc::device::cupm::DeviceType::CUDA>::dsv(dctx, hermitian_transpose, m, oldest, next, A, x, y));
 92:     break;
 93: #endif
 94: #if PetscDefined(HAVE_HIP)
 95:   case PETSC_DEVICE_HIP:
 96:     PetscCall(::Petsc::device::cupm::impl::BLASCyclic<::Petsc::device::cupm::DeviceType::HIP>::dsv(dctx, hermitian_transpose, m, oldest, next, A, x, y));
 97:     break;
 98: #endif
 99:   default:
100:     SETERRQ(PETSC_COMM_SELF, PETSC_ERR_SUP, "Unsupported device type %s", PetscDeviceTypes[device_type]);
101:   }
102:   PetscFunctionReturn(PETSC_SUCCESS);
103: }

105: PETSC_INTERN PetscErrorCode TRSVCyclic_CUPM_Private(PetscBool hermitian_transpose, PetscInt m, PetscInt oldest, PetscInt next, const PetscScalar A[], PetscInt lda, const PetscScalar x[], PetscScalar y[])
106: {
107:   PetscDeviceContext dctx;
108:   PetscDeviceType    device_type;

110:   PetscFunctionBegin;
111:   PetscCall(PetscDeviceContextGetCurrentContext(&dctx));
112:   PetscCall(PetscDeviceContextGetDeviceType(dctx, &device_type));
113:   switch (device_type) {
114: #if PetscDefined(HAVE_CUDA)
115:   case PETSC_DEVICE_CUDA:
116:     PetscCall(::Petsc::device::cupm::impl::BLASCyclic<::Petsc::device::cupm::DeviceType::CUDA>::trsv(dctx, hermitian_transpose, m, oldest, next, A, lda, x, y));
117:     break;
118: #endif
119: #if PetscDefined(HAVE_HIP)
120:   case PETSC_DEVICE_HIP:
121:     PetscCall(::Petsc::device::cupm::impl::BLASCyclic<::Petsc::device::cupm::DeviceType::HIP>::trsv(dctx, hermitian_transpose, m, oldest, next, A, lda, x, y));
122:     break;
123: #endif
124:   default:
125:     SETERRQ(PETSC_COMM_SELF, PETSC_ERR_SUP, "Unsupported device type %s", PetscDeviceTypes[device_type]);
126:   }
127:   PetscFunctionReturn(PETSC_SUCCESS);
128: }

130: PETSC_INTERN PetscErrorCode HEMVCyclic_CUPM_Private(PetscInt m, PetscInt oldest, PetscInt next, PetscScalar alpha, const PetscScalar A[], PetscInt lda, const PetscScalar x[], PetscScalar beta, PetscScalar y[])
131: {
132:   PetscDeviceContext dctx;
133:   PetscDeviceType    device_type;

135:   PetscFunctionBegin;
136:   PetscCall(PetscDeviceContextGetCurrentContext(&dctx));
137:   PetscCall(PetscDeviceContextGetDeviceType(dctx, &device_type));
138:   switch (device_type) {
139: #if PetscDefined(HAVE_CUDA)
140:   case PETSC_DEVICE_CUDA:
141:     PetscCall(::Petsc::device::cupm::impl::BLASCyclic<::Petsc::device::cupm::DeviceType::CUDA>::hemv(dctx, m, oldest, next, alpha, A, lda, x, beta, y));
142:     break;
143: #endif
144: #if PetscDefined(HAVE_HIP)
145:   case PETSC_DEVICE_HIP:
146:     PetscCall(::Petsc::device::cupm::impl::BLASCyclic<::Petsc::device::cupm::DeviceType::HIP>::hemv(dctx, m, oldest, next, alpha, A, lda, x, beta, y));
147:     break;
148: #endif
149:   default:
150:     SETERRQ(PETSC_COMM_SELF, PETSC_ERR_SUP, "Unsupported device type %s", PetscDeviceTypes[device_type]);
151:   }
152:   PetscFunctionReturn(PETSC_SUCCESS);
153: }

155: PETSC_INTERN PetscErrorCode GEMVCyclic_CUPM_Private(PetscBool hermitian_transpose, PetscInt m, PetscInt oldest, PetscInt next, PetscScalar alpha, const PetscScalar A[], PetscInt lda, const PetscScalar x[], PetscScalar beta, PetscScalar y[])
156: {
157:   PetscDeviceContext dctx;
158:   PetscDeviceType    device_type;

160:   PetscFunctionBegin;
161:   PetscCall(PetscDeviceContextGetCurrentContext(&dctx));
162:   PetscCall(PetscDeviceContextGetDeviceType(dctx, &device_type));
163:   switch (device_type) {
164: #if PetscDefined(HAVE_CUDA)
165:   case PETSC_DEVICE_CUDA:
166:     PetscCall(::Petsc::device::cupm::impl::BLASCyclic<::Petsc::device::cupm::DeviceType::CUDA>::gemv(dctx, hermitian_transpose, m, oldest, next, alpha, A, lda, x, beta, y));
167:     break;
168: #endif
169: #if PetscDefined(HAVE_HIP)
170:   case PETSC_DEVICE_HIP:
171:     PetscCall(::Petsc::device::cupm::impl::BLASCyclic<::Petsc::device::cupm::DeviceType::HIP>::gemv(dctx, hermitian_transpose, m, oldest, next, alpha, A, lda, x, beta, y));
172:     break;
173: #endif
174:   default:
175:     SETERRQ(PETSC_COMM_SELF, PETSC_ERR_SUP, "Unsupported device type %s", PetscDeviceTypes[device_type]);
176:   }
177:   PetscFunctionReturn(PETSC_SUCCESS);
178: }