11namespace hipSolverConnector {
15void trtri (hipsolverHandle_t& hipsolver_handle,
const char& uplo,
const char& diag,
const int& n,
T* A,
const int& lda)
17 size_t d_lwork = 0, h_lwork = 0;
19 void* d_work =
nullptr, *h_work =
nullptr;
22 h_work = malloc(h_lwork);
23 if (h_work ==
nullptr) {
24 throw std::bad_alloc();
28 int* d_info =
nullptr;
29 hipErrcheck(hipMalloc((
void**)&d_info,
sizeof(
int)));
31 hipsolverErrcheck(hipsolverDnXtrtri(hipsolver_handle, hipsolver_fill_mode(uplo), hipblas_diag_type(diag), n,
GetTypeRocm<T>::cuda_data_type, A, n, d_work, d_lwork, h_work, h_lwork, d_info));
32 hipErrcheck(hipMemcpy(&h_info, d_info,
sizeof(
int), hipMemcpyDeviceToHost));
34 throw std::runtime_error(
"trtri: failed to invert matrix");
42void potri (hipsolverHandle_t& hipsolver_handle,
const char& uplo,
const char& diag,
const int& n,
float * A,
const int& lda)
45 hipsolverErrcheck(hipsolverDnSpotri_bufferSize(hipsolver_handle, hipsolver_fill_mode(uplo), n, A, n, &lwork));
47 hipErrcheck(hipMalloc((
void**)&work, lwork *
sizeof(
float)));
49 hipsolverErrcheck(hipsolverDnSpotri(hipsolver_handle, hipsolver_fill_mode(uplo), n, A, n, work, lwork,
nullptr));
53void potri (hipsolverHandle_t& hipsolver_handle,
const char& uplo,
const char& diag,
const int& n,
double * A,
const int& lda)
56 hipsolverErrcheck(hipsolverDnDpotri_bufferSize(hipsolver_handle, hipsolver_fill_mode(uplo), n, A, n, &lwork));
58 hipErrcheck(hipMalloc((
void**)&work, lwork *
sizeof(
double)));
60 hipsolverErrcheck(hipsolverDnDpotri(hipsolver_handle, hipsolver_fill_mode(uplo), n, A, n, work, lwork,
nullptr));
64void potri (hipsolverHandle_t& hipsolver_handle,
const char& uplo,
const char& diag,
const int& n, std::complex<float> * A,
const int& lda)
67 hipsolverErrcheck(hipsolverDnCpotri_bufferSize(hipsolver_handle, hipsolver_fill_mode(uplo), n,
reinterpret_cast<hipFloatComplex *
>(A), n, &lwork));
68 hipFloatComplex* work;
69 hipErrcheck(hipMalloc((
void**)&work, lwork *
sizeof(hipFloatComplex)));
71 hipsolverErrcheck(hipsolverDnCpotri(hipsolver_handle, hipsolver_fill_mode(uplo), n,
reinterpret_cast<hipFloatComplex *
>(A), n, work, lwork,
nullptr));
75void potri (hipsolverHandle_t& hipsolver_handle,
const char& uplo,
const char& diag,
const int& n, std::complex<double> * A,
const int& lda)
78 hipsolverErrcheck(hipsolverDnZpotri_bufferSize(hipsolver_handle, hipsolver_fill_mode(uplo), n,
reinterpret_cast<hipDoubleComplex *
>(A), n, &lwork));
79 hipDoubleComplex* work;
80 hipErrcheck(hipMalloc((
void**)&work, lwork *
sizeof(hipDoubleComplex)));
82 hipsolverErrcheck(hipsolverDnZpotri(hipsolver_handle, hipsolver_fill_mode(uplo), n,
reinterpret_cast<hipDoubleComplex *
>(A), n, work, lwork,
nullptr));
88void potrf (hipsolverHandle_t& hipsolver_handle,
const char& uplo,
const int& n,
float * A,
const int& lda)
91 hipsolverErrcheck(hipsolverDnSpotrf_bufferSize(hipsolver_handle, hipsolver_fill_mode(uplo), n, A, n, &lwork));
93 hipErrcheck(hipMalloc((
void**)&work, lwork *
sizeof(
float)));
95 hipsolverErrcheck(hipsolverDnSpotrf(hipsolver_handle, hipsolver_fill_mode(uplo), n, A, n, work, lwork,
nullptr));
99void potrf (hipsolverHandle_t& hipsolver_handle,
const char& uplo,
const int& n,
double * A,
const int& lda)
102 hipsolverErrcheck(hipsolverDnDpotrf_bufferSize(hipsolver_handle, hipsolver_fill_mode(uplo), n, A, n, &lwork));
104 hipErrcheck(hipMalloc((
void**)&work, lwork *
sizeof(
double)));
106 hipsolverErrcheck(hipsolverDnDpotrf(hipsolver_handle, hipsolver_fill_mode(uplo), n, A, n, work, lwork,
nullptr));
110void potrf (hipsolverHandle_t& hipsolver_handle,
const char& uplo,
const int& n, std::complex<float> * A,
const int& lda)
113 hipsolverErrcheck(hipsolverDnCpotrf_bufferSize(hipsolver_handle, hipsolver_fill_mode(uplo), n,
reinterpret_cast<hipFloatComplex*
>(A), n, &lwork));
114 hipFloatComplex* work;
115 hipErrcheck(hipMalloc((
void**)&work, lwork *
sizeof(hipFloatComplex)));
117 hipsolverErrcheck(hipsolverDnCpotrf(hipsolver_handle, hipsolver_fill_mode(uplo), n,
reinterpret_cast<hipFloatComplex*
>(A), n, work, lwork,
nullptr));
121void potrf (hipsolverHandle_t& hipsolver_handle,
const char& uplo,
const int& n, std::complex<double> * A,
const int& lda)
124 hipsolverErrcheck(hipsolverDnZpotrf_bufferSize(hipsolver_handle, hipsolver_fill_mode(uplo), n,
reinterpret_cast<hipDoubleComplex*
>(A), n, &lwork));
125 hipDoubleComplex* work;
126 hipErrcheck(hipMalloc((
void**)&work, lwork *
sizeof(hipDoubleComplex)));
128 hipsolverErrcheck(hipsolverDnZpotrf(hipsolver_handle, hipsolver_fill_mode(uplo), n,
reinterpret_cast<hipDoubleComplex*
>(A), n, work, lwork,
nullptr));
134void dnevd (hipsolverHandle_t& hipsolver_handle,
const char& jobz,
const char& uplo,
const int& n,
float* A,
const int& lda,
float * W)
139 int* d_info =
nullptr;
140 float* d_work =
nullptr;
141 hipErrcheck(hipMalloc((
void**)&d_info,
sizeof(
int)));
144 hipsolverErrcheck(hipsolverDnSsyevd_bufferSize(hipsolver_handle, hipblas_eig_mode(jobz), hipsolver_fill_mode(uplo),
145 n, A, lda, W, &lwork));
147 hipErrcheck(hipMalloc((
void**)&d_work,
sizeof(
float) * lwork));
149 hipsolverErrcheck(hipsolverDnSsyevd(hipsolver_handle, hipblas_eig_mode(jobz), hipsolver_fill_mode(uplo),
150 n, A, lda, W, d_work, lwork, d_info));
152 hipErrcheck(hipMemcpy(&h_info, d_info,
sizeof(
int), hipMemcpyDeviceToHost));
154 throw std::runtime_error(
"dnevd: failed to invert matrix");
160void dnevd (hipsolverHandle_t& hipsolver_handle,
const char& jobz,
const char& uplo,
const int& n,
double* A,
const int& lda,
double * W)
165 int* d_info =
nullptr;
166 double* d_work =
nullptr;
167 hipErrcheck(hipMalloc((
void**)&d_info,
sizeof(
int)));
170 hipsolverErrcheck(hipsolverDnDsyevd_bufferSize(hipsolver_handle, hipblas_eig_mode(jobz), hipsolver_fill_mode(uplo),
171 n, A, lda, W, &lwork));
173 hipErrcheck(hipMalloc((
void**)&d_work,
sizeof(
double) * lwork));
175 hipsolverErrcheck(hipsolverDnDsyevd(hipsolver_handle, hipblas_eig_mode(jobz), hipsolver_fill_mode(uplo),
176 n, A, lda, W, d_work, lwork, d_info));
178 hipErrcheck(hipMemcpy(&h_info, d_info,
sizeof(
int), hipMemcpyDeviceToHost));
180 throw std::runtime_error(
"dnevd: failed to invert matrix");
186void dnevd (hipsolverHandle_t& hipsolver_handle,
const char& jobz,
const char& uplo,
const int& n, std::complex<float>* A,
const int& lda,
float * W)
191 int* d_info =
nullptr;
192 hipFloatComplex* d_work =
nullptr;
193 hipErrcheck(hipMalloc((
void**)&d_info,
sizeof(
int)));
196 hipsolverErrcheck(hipsolverDnCheevd_bufferSize(hipsolver_handle, hipblas_eig_mode(jobz), hipsolver_fill_mode(uplo),
197 n,
reinterpret_cast<hipFloatComplex*
>(A), lda, W, &lwork));
199 hipErrcheck(hipMalloc((
void**)&d_work,
sizeof(hipFloatComplex) * lwork));
201 hipsolverErrcheck(hipsolverDnCheevd(hipsolver_handle, hipblas_eig_mode(jobz), hipsolver_fill_mode(uplo),
202 n,
reinterpret_cast<hipFloatComplex*
>(A), lda, W, d_work, lwork, d_info));
204 hipErrcheck(hipMemcpy(&h_info, d_info,
sizeof(
int), hipMemcpyDeviceToHost));
206 throw std::runtime_error(
"dnevd: failed to invert matrix");
212void dnevd (hipsolverHandle_t& hipsolver_handle,
const char& jobz,
const char& uplo,
const int& n, std::complex<double>* A,
const int& lda,
double* W)
217 int* d_info =
nullptr;
218 hipDoubleComplex* d_work =
nullptr;
219 hipErrcheck(hipMalloc((
void**)&d_info,
sizeof(
int)));
222 hipsolverErrcheck(hipsolverDnZheevd_bufferSize(hipsolver_handle, hipblas_eig_mode(jobz), hipsolver_fill_mode(uplo),
223 n,
reinterpret_cast<hipDoubleComplex*
>(A), lda, W, &lwork));
225 hipErrcheck(hipMalloc((
void**)&d_work,
sizeof(hipDoubleComplex) * lwork));
227 hipsolverErrcheck(hipsolverDnZheevd(hipsolver_handle, hipblas_eig_mode(jobz), hipsolver_fill_mode(uplo),
228 n,
reinterpret_cast<hipDoubleComplex*
>(A), lda, W, d_work, lwork, d_info));
230 hipErrcheck(hipMemcpy(&h_info, d_info,
sizeof(
int), hipMemcpyDeviceToHost));
232 throw std::runtime_error(
"dnevd: failed to invert matrix");
239void dngvd (hipsolverHandle_t& hipsolver_handle,
const int& itype,
const char& jobz,
const char& uplo,
const int& n,
float* A,
const int& lda,
float* B,
const int& ldb,
float * W)
244 int* d_info =
nullptr;
245 float* d_work =
nullptr;
246 hipErrcheck(hipMalloc((
void**)&d_info,
sizeof(
int)));
249 hipsolverErrcheck(hipsolverDnSsygvd_bufferSize(hipsolver_handle, hipblas_eig_type(itype), hipblas_eig_mode(jobz), hipsolver_fill_mode(uplo),
250 n, A, lda, B, ldb, W, &lwork));
252 hipErrcheck(hipMalloc((
void**)&d_work,
sizeof(
float) * lwork));
254 hipsolverErrcheck(hipsolverDnSsygvd(hipsolver_handle, hipblas_eig_type(itype), hipblas_eig_mode(jobz), hipsolver_fill_mode(uplo),
255 n, A, lda, B, ldb, W, d_work, lwork, d_info));
257 hipErrcheck(hipMemcpy(&h_info, d_info,
sizeof(
int), hipMemcpyDeviceToHost));
259 throw std::runtime_error(
"dnevd: failed to invert matrix");
265void dngvd (hipsolverHandle_t& hipsolver_handle,
const int& itype,
const char& jobz,
const char& uplo,
const int& n,
double* A,
const int& lda,
double* B,
const int& ldb,
double * W)
270 int* d_info =
nullptr;
271 double* d_work =
nullptr;
272 hipErrcheck(hipMalloc((
void**)&d_info,
sizeof(
int)));
275 hipsolverErrcheck(hipsolverDnDsygvd_bufferSize(hipsolver_handle, hipblas_eig_type(itype), hipblas_eig_mode(jobz), hipsolver_fill_mode(uplo),
276 n, A, lda, B, ldb, W, &lwork));
278 hipErrcheck(hipMalloc((
void**)&d_work,
sizeof(
double) * lwork));
280 hipsolverErrcheck(hipsolverDnDsygvd(hipsolver_handle, hipblas_eig_type(itype), hipblas_eig_mode(jobz), hipsolver_fill_mode(uplo),
281 n, A, lda, B, ldb, W, d_work, lwork, d_info));
283 hipErrcheck(hipMemcpy(&h_info, d_info,
sizeof(
int), hipMemcpyDeviceToHost));
285 throw std::runtime_error(
"dnevd: failed to invert matrix");
291void dngvd (hipsolverHandle_t& hipsolver_handle,
const int& itype,
const char& jobz,
const char& uplo,
const int& n, std::complex<float>* A,
const int& lda, std::complex<float>* B,
const int& ldb,
float* W)
296 int* d_info =
nullptr;
297 hipFloatComplex* d_work =
nullptr;
298 hipErrcheck(hipMalloc((
void**)&d_info,
sizeof(
int)));
301 hipsolverErrcheck(hipsolverDnChegvd_bufferSize(hipsolver_handle, hipblas_eig_type(itype), hipblas_eig_mode(jobz), hipsolver_fill_mode(uplo),
302 n,
reinterpret_cast<hipFloatComplex*
>(A), lda,
reinterpret_cast<hipFloatComplex*
>(B), ldb, W, &lwork));
304 hipErrcheck(hipMalloc((
void**)&d_work,
sizeof(hipFloatComplex) * lwork));
306 hipsolverErrcheck(hipsolverDnChegvd(hipsolver_handle, hipblas_eig_type(itype), hipblas_eig_mode(jobz), hipsolver_fill_mode(uplo),
307 n,
reinterpret_cast<hipFloatComplex*
>(A), lda,
reinterpret_cast<hipFloatComplex*
>(B), ldb, W, d_work, lwork, d_info));
309 hipErrcheck(hipMemcpy(&h_info, d_info,
sizeof(
int), hipMemcpyDeviceToHost));
311 throw std::runtime_error(
"dnevd: failed to invert matrix");
317void dngvd (hipsolverHandle_t& hipsolver_handle,
const int& itype,
const char& jobz,
const char& uplo,
const int& n, std::complex<double>* A,
const int& lda, std::complex<double>* B,
const int& ldb,
double* W)
322 int* d_info =
nullptr;
323 hipDoubleComplex* d_work =
nullptr;
324 hipErrcheck(hipMalloc((
void**)&d_info,
sizeof(
int)));
327 hipsolverErrcheck(hipsolverDnZhegvd_bufferSize(hipsolver_handle, hipblas_eig_type(itype), hipblas_eig_mode(jobz), hipsolver_fill_mode(uplo),
328 n,
reinterpret_cast<hipDoubleComplex*
>(A), lda,
reinterpret_cast<hipDoubleComplex*
>(B), ldb, W, &lwork));
330 hipErrcheck(hipMalloc((
void**)&d_work,
sizeof(hipDoubleComplex) * lwork));
332 hipsolverErrcheck(hipsolverDnZhegvd(hipsolver_handle, hipblas_eig_type(itype), hipblas_eig_mode(jobz), hipsolver_fill_mode(uplo),
333 n,
reinterpret_cast<hipDoubleComplex*
>(A), lda,
reinterpret_cast<hipDoubleComplex*
>(B), ldb, W, d_work, lwork, d_info));
335 hipErrcheck(hipMemcpy(&h_info, d_info,
sizeof(
int), hipMemcpyDeviceToHost));
337 throw std::runtime_error(
"dnevd: failed to invert matrix");