24 using namespace shogun;
26 #if defined(HAVE_MKL) || defined(HAVE_ACML)
42 #define DGESVD dgesvd_
44 #define DPOTRF dpotrf_
45 #define DPOTRI dpotri_
46 #define DGETRI dgetri_
47 #define DGETRF dgetrf_
48 #define DGEQRF dgeqrf_
49 #define DORGQR dorgqr_
50 #define DSYEVR dsyevr_
51 #define DGETRS dgetrs_
52 #define DPOTRS dpotrs_
53 #define DSYGVX dsygvx_
57 int clapack_dpotrf(
const CBLAS_ORDER Order,
const CBLAS_UPLO Uplo,
58 const int N,
double *A,
const int LDA)
62 if (Order==CblasRowMajor)
67 else if (Uplo==CblasLower)
72 DPOTRF(uplo, N, A, LDA, &info);
76 DPOTRF(&uplo, &n, A, &lda, &info);
82 int clapack_dpotri(
const CBLAS_ORDER Order,
const CBLAS_UPLO Uplo,
83 const int N,
double *A,
const int LDA)
87 if (Order==CblasRowMajor)
92 else if (Uplo==CblasLower)
97 DPOTRI(uplo, N, A, LDA, &info);
101 DPOTRI(&uplo, &n, A, &lda, &info);
112 int clapack_dposv(
const CBLAS_ORDER Order,
const CBLAS_UPLO Uplo,
113 const int N,
const int NRHS,
double *A,
const int lda,
114 double *B,
const int ldb)
118 if (Order==CblasRowMajor)
120 if (Uplo==CblasUpper)
123 else if (Uplo==CblasLower)
128 DPOSV(uplo,N,NRHS,A,lda,B,ldb,&info);
134 DPOSV(&uplo, &n, &nrhs, A, &LDA, B, &LDB, &info);
140 int clapack_dgetrf(
const CBLAS_ORDER Order,
const int M,
const int N,
141 double *A,
const int lda,
int *ipiv)
146 DGETRF(M,N,A,lda,ipiv,&info);
151 DGETRF(&m,&n,A,&LDA,ipiv,&info);
158 int clapack_dgetri(
const CBLAS_ORDER Order,
const int N,
double *A,
159 const int lda,
int* ipiv)
163 DGETRI(N,A,lda,ipiv,&info);
170 DGETRI(&n,A,&LDA,ipiv,&work1,&lwork,&info);
173 DGETRI(&n,A,&LDA,ipiv,work,&lwork,&info);
181 int clapack_dgetrs(
const CBLAS_ORDER Order,
const CBLAS_TRANSPOSE Transpose,
182 const int N,
const int NRHS,
double *A,
const int lda,
183 int *ipiv,
double *B,
const int ldb)
187 if (Transpose==CblasTrans)
192 DGETRS(trans,N,NRHS,A,lda,ipiv,B,ldb,info);
198 DGETRS(&trans,&n,&nrhs,A,&LDA,ipiv,B,&LDB,&info);
205 int clapack_dpotrs(
const CBLAS_ORDER Order,
const CBLAS_UPLO Uplo,
206 const int N,
const int NRHS,
double *A,
const int lda,
207 double *B,
const int ldb)
211 if (Uplo==CblasLower)
216 DPOTRS(uplo,N,NRHS,A,lda,B,ldb,info);
222 DPOTRS(&uplo,&n,&nrhs,A,&LDA,B,&LDB,&info);
232 void wrap_dsyev(
char jobz,
char uplo,
int n,
double *a,
int lda,
double *w,
int *info)
235 DSYEV(jobz, uplo, n, a, lda, w, info);
239 DSYEV(&jobz, &uplo, &n, a, &lda, w, &work1, &lwork, info);
244 DSYEV(&jobz, &uplo, &n, a, &lda, w, work, &lwork, info);
250 void wrap_dgesvd(
char jobu,
char jobvt,
int m,
int n,
double *a,
int lda,
double *sing,
251 double *u,
int ldu,
double *vt,
int ldvt,
int *info)
254 DGESVD(jobu, jobvt, m, n, a, lda, sing, u, ldu, vt, ldvt, info);
258 DGESVD(&jobu, &jobvt, &m, &n, a, &lda, sing, u, &ldu, vt, &ldvt, &work1, &lworka, info);
260 lworka = (int) work1;
261 double* worka =
SG_MALLOC(
double, lworka);
262 DGESVD(&jobu, &jobvt, &m, &n, a, &lda, sing, u, &ldu, vt, &ldvt, worka, &lworka, info);
268 void wrap_dgeqrf(
int m,
int n,
double *a,
int lda,
double *tau,
int *info)
271 DGEQRF(m, n, a, lda, tau, info);
275 DGEQRF(&m, &n, a, &lda, tau, &work1, &lwork, info);
280 DGEQRF(&m, &n, a, &lda, tau, work, &lwork, info);
286 void wrap_dorgqr(
int m,
int n,
int k,
double *a,
int lda,
double *tau,
int *info)
289 DORGQR(m, n, k, a, lda, tau, info);
293 DORGQR(&m, &n, &k, a, &lda, tau, &work1, &lwork, info);
298 DORGQR(&m, &n, &k, a, &lda, tau, work, &lwork, info);
304 void wrap_dsyevr(
char jobz,
char uplo,
int n,
double *a,
int lda,
int il,
int iu,
305 double *eigenvalues,
double *eigenvectors,
int *info)
313 DSYEVR(jobz,I,uplo,n,a,lda,vl,vu,il,iu,abstol,m,
314 eigenvalues,eigenvectors,n,isuppz,info);
320 DSYEVR(&jobz,&I,&uplo,&n,a,&lda,&vl,&vu,&il,&iu,&abstol,
321 &m,eigenvalues,eigenvectors,&n,isuppz,
322 &work1,&lwork,&work2,&liwork,info);
328 DSYEVR(&jobz,&I,&uplo,&n,a,&lda,&vl,&vu,&il,&iu,&abstol,
329 &m,eigenvalues,eigenvectors,&n,isuppz,
330 work,&lwork,iwork,&liwork,info);
339 void wrap_dsygvx(
int itype,
char jobz,
char uplo,
int n,
double *a,
int lda,
double *b,
340 int ldb,
int il,
int iu,
double *eigenvalues,
double *eigenvectors,
int *info)
348 DSYGVX(itype,jobz,I,uplo,n,a,lda,b,ldb,vl,vu,
349 il,iu,abstol,m,eigenvalues,
350 eigenvectors,n,ifail,info);
355 DSYGVX(&itype,&jobz,&I,&uplo,&n,a,&lda,b,&ldb,&vl,&vu,
356 &il,&iu,&abstol,&m,eigenvalues,eigenvectors,
357 &n,&work1,&lwork,iwork,ifail,info);
360 DSYGVX(&itype,&jobz,&I,&uplo,&n,a,&lda,b,&ldb,&vl,&vu,
361 &il,&iu,&abstol,&m,eigenvalues,eigenvectors,
362 &n,work,&lwork,iwork,ifail,info);