void PLASMA_ZPOSV(PLASMA_enum *uplo, int *N, int *NRHS, PLASMA_Complex64_t *A, int *LDA, PLASMA_Complex64_t *B, int *LDB, int *INFO) { *INFO = PLASMA_zposv(*uplo, *N, *NRHS, A, *LDA, B, *LDB); }
static int RunTest(int *iparam, double *dparam, real_Double_t *t_) { PLASMA_Complex64_t *A, *Acpy = NULL, *b = NULL, *x; real_Double_t t; int n = iparam[TIMING_N]; int nrhs = iparam[TIMING_NRHS]; int check = iparam[TIMING_CHECK]; int lda = n; int ldb = n; /* Allocate Data */ A = (PLASMA_Complex64_t *)malloc(lda*n* sizeof(PLASMA_Complex64_t)); x = (PLASMA_Complex64_t *)malloc(ldb*nrhs*sizeof(PLASMA_Complex64_t)); /* Check if unable to allocate memory */ if ( (!A) || (!x) ) { printf("Out of Memory \n "); exit(0); } /* Initialize Plasma */ PLASMA_Init( iparam[TIMING_THRDNBR] ); if ( iparam[TIMING_SCHEDULER] ) PLASMA_Set(PLASMA_SCHEDULING_MODE, PLASMA_DYNAMIC_SCHEDULING ); else PLASMA_Set(PLASMA_SCHEDULING_MODE, PLASMA_STATIC_SCHEDULING ); /*if ( !iparam[TIMING_AUTOTUNING] ) {*/ PLASMA_Disable(PLASMA_AUTOTUNING); PLASMA_Set(PLASMA_TILE_SIZE, iparam[TIMING_NB] ); /* } */ /* Initialiaze Data */ PLASMA_zplghe((double)n, n, A, lda, 51 ); LAPACKE_zlarnv_work(1, ISEED, n*nrhs, x); /* Save A and b */ if (check) { Acpy = (PLASMA_Complex64_t *)malloc(lda*n* sizeof(PLASMA_Complex64_t)); b = (PLASMA_Complex64_t *)malloc(ldb*nrhs*sizeof(PLASMA_Complex64_t)); LAPACKE_zlacpy_work(LAPACK_COL_MAJOR,' ', n, n, A, lda, Acpy, lda); LAPACKE_zlacpy_work(LAPACK_COL_MAJOR,' ', n, nrhs, x, ldb, b, ldb); } /* PLASMA ZPOSV */ t = -cWtime(); PLASMA_zposv(PlasmaUpper, n, nrhs, A, lda, x, ldb); t += cWtime(); *t_ = t; /* Check the solution */ if (check) { dparam[TIMING_RES] = z_check_solution(n, n, nrhs, Acpy, lda, b, x, ldb, &(dparam[TIMING_ANORM]), &(dparam[TIMING_BNORM]), &(dparam[TIMING_XNORM])); free(Acpy); free(b); } free(A); free(x); PLASMA_Finalize(); return 0; }
int testing_zposv(int argc, char **argv) { /* Check for number of arguments*/ if (argc != 4){ USAGE("POSV", "N LDA NRHS LDB", " - N : the size of the matrix\n" " - LDA : leading dimension of the matrix A\n" " - NRHS : number of RHS\n" " - LDB : leading dimension of the RHS B\n"); return -1; } int N = atoi(argv[0]); int LDA = atoi(argv[1]); int NRHS = atoi(argv[2]); int LDB = atoi(argv[3]); double eps; int info_solution, info_factorization; int u, trans1, trans2; PLASMA_Complex64_t *A1 = (PLASMA_Complex64_t *)malloc(LDA*N*sizeof(PLASMA_Complex64_t)); PLASMA_Complex64_t *A2 = (PLASMA_Complex64_t *)malloc(LDA*N*sizeof(PLASMA_Complex64_t)); PLASMA_Complex64_t *B1 = (PLASMA_Complex64_t *)malloc(LDB*NRHS*sizeof(PLASMA_Complex64_t)); PLASMA_Complex64_t *B2 = (PLASMA_Complex64_t *)malloc(LDB*NRHS*sizeof(PLASMA_Complex64_t)); /* Check if unable to allocate memory */ if ((!A1)||(!A2)||(!B1)||(!B2)){ printf("Out of Memory \n "); return -2; } eps = BLAS_dfpinfo( blas_eps ); for(u=0; u<2; u++) { trans1 = uplo[u] == PlasmaUpper ? PlasmaConjTrans : PlasmaNoTrans; trans2 = uplo[u] == PlasmaUpper ? PlasmaNoTrans : PlasmaConjTrans; /*------------------------------------------------------------- * TESTING ZPOSV */ /* Initialize A1 and A2 for Symmetric Positif Matrix */ PLASMA_zplghe( (double)N, N, A1, LDA, 51 ); PLASMA_zlacpy( PlasmaUpperLower, N, N, A1, LDA, A2, LDA ); /* Initialize B1 and B2 */ PLASMA_zplrnt( N, NRHS, B1, LDB, 371 ); PLASMA_zlacpy( PlasmaUpperLower, N, NRHS, B1, LDB, B2, LDB ); printf("\n"); printf("------ TESTS FOR PLASMA ZPOSV ROUTINE ------- \n"); printf(" Size of the Matrix %d by %d\n", N, N); printf("\n"); printf(" The matrix A is randomly generated for each test.\n"); printf("============\n"); printf(" The relative machine precision (eps) is to be %e \n", eps); printf(" Computational tests pass if scaled residuals are less than 60.\n"); /* PLASMA ZPOSV */ PLASMA_zposv(uplo[u], N, NRHS, A2, LDA, B2, LDB); /* Check the factorization and the solution */ info_factorization = check_factorization( N, A1, A2, LDA, uplo[u], eps); info_solution = check_solution(N, NRHS, A1, LDA, B1, B2, LDB, eps); if ( (info_solution == 0) && (info_factorization == 0) ) { printf("***************************************************\n"); printf(" ---- TESTING ZPOSV(%s) ...................... PASSED !\n", uplostr[u]); printf("***************************************************\n"); } else { printf("***************************************************\n"); printf(" - TESTING ZPOSV(%s) ... FAILED !\n", uplostr[u]); printf("***************************************************\n"); } /*------------------------------------------------------------- * TESTING ZPOTRF + ZPOTRS */ /* Initialize A1 and A2 for Symmetric Positif Matrix */ PLASMA_zplghe( (double)N, N, A1, LDA, 51 ); PLASMA_zlacpy( PlasmaUpperLower, N, N, A1, LDA, A2, LDA ); /* Initialize B1 and B2 */ PLASMA_zplrnt( N, NRHS, B1, LDB, 371 ); PLASMA_zlacpy( PlasmaUpperLower, N, NRHS, B1, LDB, B2, LDB ); /* Plasma routines */ PLASMA_zpotrf(uplo[u], N, A2, LDA); PLASMA_zpotrs(uplo[u], N, NRHS, A2, LDA, B2, LDB); printf("\n"); printf("------ TESTS FOR PLASMA ZPOTRF + ZPOTRS ROUTINE ------- \n"); printf(" Size of the Matrix %d by %d\n", N, N); printf("\n"); printf(" The matrix A is randomly generated for each test.\n"); printf("============\n"); printf(" The relative machine precision (eps) is to be %e \n", eps); printf(" Computational tests pass if scaled residuals are less than 60.\n"); /* Check the factorization and the solution */ info_factorization = check_factorization( N, A1, A2, LDA, uplo[u], eps); info_solution = check_solution(N, NRHS, A1, LDA, B1, B2, LDB, eps); if ((info_solution == 0)&(info_factorization == 0)){ printf("***************************************************\n"); printf(" ---- TESTING ZPOTRF + ZPOTRS (%s)............ PASSED !\n", uplostr[u]); printf("***************************************************\n"); } else{ printf("****************************************************\n"); printf(" - TESTING ZPOTRF + ZPOTRS (%s)... FAILED !\n", uplostr[u]); printf("****************************************************\n"); } /*------------------------------------------------------------- * TESTING ZPOTRF + ZPTRSM + ZTRSM */ /* Initialize A1 and A2 for Symmetric Positif Matrix */ PLASMA_zplghe( (double)N, N, A1, LDA, 51 ); PLASMA_zlacpy( PlasmaUpperLower, N, N, A1, LDA, A2, LDA ); /* Initialize B1 and B2 */ PLASMA_zplrnt( N, NRHS, B1, LDB, 371 ); PLASMA_zlacpy( PlasmaUpperLower, N, NRHS, B1, LDB, B2, LDB ); /* PLASMA routines */ PLASMA_zpotrf(uplo[u], N, A2, LDA); PLASMA_ztrsm(PlasmaLeft, uplo[u], trans1, PlasmaNonUnit, N, NRHS, 1.0, A2, LDA, B2, LDB); PLASMA_ztrsm(PlasmaLeft, uplo[u], trans2, PlasmaNonUnit, N, NRHS, 1.0, A2, LDA, B2, LDB); printf("\n"); printf("------ TESTS FOR PLASMA ZPOTRF + ZTRSM + ZTRSM ROUTINE ------- \n"); printf(" Size of the Matrix %d by %d\n", N, N); printf("\n"); printf(" The matrix A is randomly generated for each test.\n"); printf("============\n"); printf(" The relative machine precision (eps) is to be %e \n", eps); printf(" Computational tests pass if scaled residuals are less than 60.\n"); /* Check the factorization and the solution */ info_factorization = check_factorization( N, A1, A2, LDA, uplo[u], eps); info_solution = check_solution(N, NRHS, A1, LDA, B1, B2, LDB, eps); if ((info_solution == 0)&(info_factorization == 0)){ printf("***************************************************\n"); printf(" ---- TESTING ZPOTRF + ZTRSM + ZTRSM (%s)..... PASSED !\n", uplostr[u]); printf("***************************************************\n"); } else{ printf("***************************************************\n"); printf(" - TESTING ZPOTRF + ZTRSM + ZTRSM (%s)... FAILED !\n", uplostr[u]); printf("***************************************************\n"); } /*------------------------------------------------------------- * TESTING ZPOCON on the last call */ { double Anorm = PLASMA_zlanhe( PlasmaOneNorm, uplo[u], N, A1, LDA ); double Acond; info_solution = PLASMA_zpocon(uplo[u], N, A2, LDA, Anorm, &Acond); if ( info_solution == 0 ) { info_solution = check_estimator(uplo[u], N, A1, LDA, A2, Anorm, Acond, eps); } else { printf(" PLASMA_zpocon returned info = %d\n", info_solution ); } if ((info_solution == 0)){ printf("***************************************************\n"); printf(" ---- TESTING ZPOTRF + ZPOCON (%s) ........... PASSED !\n", uplostr[u]); printf("***************************************************\n"); } else{ printf("**************************************************\n"); printf(" - TESTING ZPOTRF + ZPOCON (%s) ... FAILED !\n", uplostr[u]); printf("**************************************************\n"); } } } free(A1); free(A2); free(B1); free(B2); return 0; }