28 #define max(a, b) ((a) > (b) ? (a) : (b))
31 #define min(a, b) ((a) < (b) ? (a) : (b))
49 int info_ortho, info_factorization;
59 if ((!A1)||(!A2)||(!Q)){
60 printf(
"Out of Memory \n ");
66 printf(
"-- PLASMA is initialized to run on %d cores. \n",cores);
72 LAPACKE_clarnv_work(
IONE,
ISEED, LDAxN, A1);
73 for (i = 0; i < M; i++)
74 for (j = 0; j < N; j++)
75 A2[LDA*j+i] = A1[LDA*j+i] ;
82 for (i = 0; i < K; i++)
90 printf(
"--- info %d %d %d \n",info_factorization,info_ortho,info);
91 if ((info_ortho != 0)|(info_factorization != 0)|(info != 0))
92 printf(
"-- Error in CGEQRF example ! \n");
94 printf(
"-- Run of CGEQRF example successful ! \n");
96 free(A1); free(A2); free(Q); free(T);
113 int minMN =
min(M, N);
115 float *work = (
float *)malloc(minMN*
sizeof(
float));
117 eps = LAPACKE_slamch_work(
'e');
124 for (i = 0; i < minMN; i++)
129 cblas_cherk(
CblasColMajor,
CblasUpper,
CblasConjTrans, N, M, alpha, Q, LDQ, beta, Id, N);
131 cblas_cherk(
CblasColMajor,
CblasUpper,
CblasNoTrans, M, N, alpha, Q, LDQ, beta, Id, M);
135 printf(
"============\n");
136 printf(
"Checking the orthogonality of Q \n");
137 printf(
"||Id-Q'*Q||_oo / (N*eps) = %e \n",normQ/(minMN*eps));
139 if ( isnan(normQ / (minMN * eps)) || (normQ / (minMN * eps) > 10.0) ) {
140 printf(
"-- Orthogonality is suspicious ! \n");
144 printf(
"-- Orthogonality is CORRECT ! \n");
148 free(work); free(Id);
161 int info_factorization;
165 eps = LAPACKE_slamch_work(
'e');
169 float *work = (
float *)malloc(
max(M,N)*
sizeof(float));
178 LAPACKE_clacpy_work(LAPACK_COL_MAJOR,
'u', M, N, A2, LDA, R, N);
182 cblas_cgemm(
CblasColMajor,
CblasNoTrans,
CblasNoTrans, M, N, N,
CBLAS_SADDR(alpha), Q, LDA, R, N,
CBLAS_SADDR(beta), Ql, M);
189 LAPACKE_clacpy_work(LAPACK_COL_MAJOR,
'l', M, N, A2, LDA, L, M);
193 cblas_cgemm(
CblasColMajor,
CblasNoTrans,
CblasNoTrans, M, N, M,
CBLAS_SADDR(alpha), L, M, Q, LDA,
CBLAS_SADDR(beta), Ql, M);
198 for (i = 0; i < M; i++)
199 for (j = 0 ; j < N; j++)
200 Residual[j*M+i] = A1[j*LDA+i]-Ql[j*M+i];
206 printf(
"============\n");
207 printf(
"Checking the QR Factorization \n");
208 printf(
"-- ||A-QR||_oo/(||A||_oo.N.eps) = %e \n",Rnorm/(Anorm*N*eps));
211 printf(
"============\n");
212 printf(
"Checking the LQ Factorization \n");
213 printf(
"-- ||A-LQ||_oo/(||A||_oo.N.eps) = %e \n",Rnorm/(Anorm*N*eps));
216 if (isnan(Rnorm / (Anorm * N *eps)) || (Rnorm / (Anorm * N * eps) > 10.0) ) {
217 printf(
"-- Factorization is suspicious ! \n");
218 info_factorization = 1;
221 printf(
"-- Factorization is CORRECT ! \n");
222 info_factorization = 0;
225 free(work); free(Ql); free(Residual);
227 return info_factorization;