27 int check_solution(
int,
int ,
float *,
int,
float *,
float *,
int);
44 int LDBxNRHS = LDB*NRHS;
46 float *A1 = (
float *)malloc(LDA*N*(
sizeof*A1));
47 float *A2 = (
float *)malloc(LDA*N*(
sizeof*A2));
48 float *B1 = (
float *)malloc(LDB*NRHS*(
sizeof*B1));
49 float *B2 = (
float *)malloc(LDB*NRHS*(
sizeof*B2));
54 if ((!A1)||(!A2)||(!B1)||(!B2)){
55 printf(
"Out of Memory \n ");
61 printf(
"-- PLASMA is initialized to run on %d cores. \n",cores);
64 LAPACKE_slarnv_work(
IONE,
ISEED, LDAxN, A1);
65 for ( i = 0; i < N; i++)
66 for ( j = 0; j < N; j++)
67 A2[LDA*j+i] = A1[LDA*j+i];
70 LAPACKE_slarnv_work(
IONE,
ISEED, LDBxNRHS, B1);
71 for ( i = 0; i < N; i++)
72 for ( j = 0; j < NRHS; j++)
73 B2[LDB*j+i] = B1[LDB*j+i];
88 if ((info_solution != 0)|(info != 0))
89 printf(
"-- Error in SGETRS example ! \n");
91 printf(
"-- Run of SGETRS example successful ! \n");
93 free(A1); free(A2); free(B1); free(B2); free(IPIV); free(L);
104 int check_solution(
int N,
int NRHS,
float *A1,
int LDA,
float *B1,
float *B2,
int LDB)
107 float Rnorm, Anorm, Xnorm, Bnorm;
109 float *work = (
float *)malloc(N*
sizeof(
float));
112 eps = LAPACKE_slamch_work(
'e');
121 cblas_sgemm(
CblasColMajor,
CblasNoTrans,
CblasNoTrans, N, NRHS, N, (alpha), A1, LDA, B2, LDB, (beta), B1, LDB);
124 printf(
"============\n");
125 printf(
"Checking the Residual of the solution \n");
126 printf(
"-- ||Ax-B||_oo/((||A||_oo||x||_oo+||B||_oo).N.eps) = %e \n",Rnorm/((Anorm*Xnorm+Bnorm)*N*eps));
128 if ( isnan(Rnorm/((Anorm*Xnorm+Bnorm)*N*eps)) || (Rnorm/((Anorm*Xnorm+Bnorm)*N*eps) > 10.0) ){
129 printf(
"-- The solution is suspicious ! \n");
133 printf(
"-- The solution is CORRECT ! \n");
139 return info_solution;