uint64_t t1ha2_atonce(const void *data, size_t length, uint64_t seed) { t1ha_state256_t state; init_ab(&state, seed, length); #if T1HA_SYS_UNALIGNED_ACCESS == T1HA_UNALIGNED_ACCESS__EFFICIENT if (unlikely(length > 32)) { init_cd(&state, seed, length); T1HA2_LOOP(le, unaligned, &state, data, length); squash(&state); length &= 31; } T1HA2_TAIL_AB(le, unaligned, &state, data, length); #else const bool misaligned = (((uintptr_t)data) & (ALIGNMENT_64 - 1)) != 0; if (misaligned) { if (unlikely(length > 32)) { init_cd(&state, seed, length); T1HA2_LOOP(le, unaligned, &state, data, length); squash(&state); length &= 31; } T1HA2_TAIL_AB(le, unaligned, &state, data, length); } else { if (unlikely(length > 32)) { init_cd(&state, seed, length); T1HA2_LOOP(le, aligned, &state, data, length); squash(&state); length &= 31; } T1HA2_TAIL_AB(le, aligned, &state, data, length); } #endif }
int main(void) { /* Local scalars */ char norm, norm_i; char uplo, uplo_i; char diag, diag_i; lapack_int n, n_i; lapack_int kd, kd_i; lapack_int ldab, ldab_i; lapack_int ldab_r; float rcond, rcond_i; lapack_int info, info_i; lapack_int i; int failed; /* Local arrays */ lapack_complex_float *ab = NULL, *ab_i = NULL; lapack_complex_float *work = NULL, *work_i = NULL; float *rwork = NULL, *rwork_i = NULL; lapack_complex_float *ab_r = NULL; /* Iniitialize the scalar parameters */ init_scalars_ctbcon( &norm, &uplo, &diag, &n, &kd, &ldab ); ldab_r = n+2; norm_i = norm; uplo_i = uplo; diag_i = diag; n_i = n; kd_i = kd; ldab_i = ldab; /* Allocate memory for the LAPACK routine arrays */ ab = (lapack_complex_float *) LAPACKE_malloc( ldab*n * sizeof(lapack_complex_float) ); work = (lapack_complex_float *) LAPACKE_malloc( 2*n * sizeof(lapack_complex_float) ); rwork = (float *)LAPACKE_malloc( n * sizeof(float) ); /* Allocate memory for the C interface function arrays */ ab_i = (lapack_complex_float *) LAPACKE_malloc( ldab*n * sizeof(lapack_complex_float) ); work_i = (lapack_complex_float *) LAPACKE_malloc( 2*n * sizeof(lapack_complex_float) ); rwork_i = (float *)LAPACKE_malloc( n * sizeof(float) ); /* Allocate memory for the row-major arrays */ ab_r = (lapack_complex_float *) LAPACKE_malloc( (kd+1)*(n+2) * sizeof(lapack_complex_float) ); /* Initialize input arrays */ init_ab( ldab*n, ab ); init_work( 2*n, work ); init_rwork( n, rwork ); /* Call the LAPACK routine */ ctbcon_( &norm, &uplo, &diag, &n, &kd, ab, &ldab, &rcond, work, rwork, &info ); /* Initialize input data, call the column-major middle-level * interface to LAPACK routine and check the results */ for( i = 0; i < ldab*n; i++ ) { ab_i[i] = ab[i]; } for( i = 0; i < 2*n; i++ ) { work_i[i] = work[i]; } for( i = 0; i < n; i++ ) { rwork_i[i] = rwork[i]; } info_i = LAPACKE_ctbcon_work( LAPACK_COL_MAJOR, norm_i, uplo_i, diag_i, n_i, kd_i, ab_i, ldab_i, &rcond_i, work_i, rwork_i ); failed = compare_ctbcon( rcond, rcond_i, info, info_i ); if( failed == 0 ) { printf( "PASSED: column-major middle-level interface to ctbcon\n" ); } else { printf( "FAILED: column-major middle-level interface to ctbcon\n" ); } /* Initialize input data, call the column-major high-level * interface to LAPACK routine and check the results */ for( i = 0; i < ldab*n; i++ ) { ab_i[i] = ab[i]; } for( i = 0; i < 2*n; i++ ) { work_i[i] = work[i]; } for( i = 0; i < n; i++ ) { rwork_i[i] = rwork[i]; } info_i = LAPACKE_ctbcon( LAPACK_COL_MAJOR, norm_i, uplo_i, diag_i, n_i, kd_i, ab_i, ldab_i, &rcond_i ); failed = compare_ctbcon( rcond, rcond_i, info, info_i ); if( failed == 0 ) { printf( "PASSED: column-major high-level interface to ctbcon\n" ); } else { printf( "FAILED: column-major high-level interface to ctbcon\n" ); } /* Initialize input data, call the row-major middle-level * interface to LAPACK routine and check the results */ for( i = 0; i < ldab*n; i++ ) { ab_i[i] = ab[i]; } for( i = 0; i < 2*n; i++ ) { work_i[i] = work[i]; } for( i = 0; i < n; i++ ) { rwork_i[i] = rwork[i]; } LAPACKE_cge_trans( LAPACK_COL_MAJOR, kd+1, n, ab_i, ldab, ab_r, n+2 ); info_i = LAPACKE_ctbcon_work( LAPACK_ROW_MAJOR, norm_i, uplo_i, diag_i, n_i, kd_i, ab_r, ldab_r, &rcond_i, work_i, rwork_i ); failed = compare_ctbcon( rcond, rcond_i, info, info_i ); if( failed == 0 ) { printf( "PASSED: row-major middle-level interface to ctbcon\n" ); } else { printf( "FAILED: row-major middle-level interface to ctbcon\n" ); } /* Initialize input data, call the row-major high-level * interface to LAPACK routine and check the results */ for( i = 0; i < ldab*n; i++ ) { ab_i[i] = ab[i]; } for( i = 0; i < 2*n; i++ ) { work_i[i] = work[i]; } for( i = 0; i < n; i++ ) { rwork_i[i] = rwork[i]; } /* Init row_major arrays */ LAPACKE_cge_trans( LAPACK_COL_MAJOR, kd+1, n, ab_i, ldab, ab_r, n+2 ); info_i = LAPACKE_ctbcon( LAPACK_ROW_MAJOR, norm_i, uplo_i, diag_i, n_i, kd_i, ab_r, ldab_r, &rcond_i ); failed = compare_ctbcon( rcond, rcond_i, info, info_i ); if( failed == 0 ) { printf( "PASSED: row-major high-level interface to ctbcon\n" ); } else { printf( "FAILED: row-major high-level interface to ctbcon\n" ); } /* Release memory */ if( ab != NULL ) { LAPACKE_free( ab ); } if( ab_i != NULL ) { LAPACKE_free( ab_i ); } if( ab_r != NULL ) { LAPACKE_free( ab_r ); } if( work != NULL ) { LAPACKE_free( work ); } if( work_i != NULL ) { LAPACKE_free( work_i ); } if( rwork != NULL ) { LAPACKE_free( rwork ); } if( rwork_i != NULL ) { LAPACKE_free( rwork_i ); } return 0; }
int main(void) { /* Local scalars */ char vect, vect_i; char uplo, uplo_i; lapack_int n, n_i; lapack_int kd, kd_i; lapack_int ldab, ldab_i; lapack_int ldab_r; lapack_int ldq, ldq_i; lapack_int ldq_r; lapack_int info, info_i; lapack_int i; int failed; /* Local arrays */ double *ab = NULL, *ab_i = NULL; double *d = NULL, *d_i = NULL; double *e = NULL, *e_i = NULL; double *q = NULL, *q_i = NULL; double *work = NULL, *work_i = NULL; double *ab_save = NULL; double *d_save = NULL; double *e_save = NULL; double *q_save = NULL; double *ab_r = NULL; double *q_r = NULL; /* Iniitialize the scalar parameters */ init_scalars_dsbtrd( &vect, &uplo, &n, &kd, &ldab, &ldq ); ldab_r = n+2; ldq_r = n+2; vect_i = vect; uplo_i = uplo; n_i = n; kd_i = kd; ldab_i = ldab; ldq_i = ldq; /* Allocate memory for the LAPACK routine arrays */ ab = (double *)LAPACKE_malloc( ldab*n * sizeof(double) ); d = (double *)LAPACKE_malloc( n * sizeof(double) ); e = (double *)LAPACKE_malloc( (n-1) * sizeof(double) ); q = (double *)LAPACKE_malloc( ldq*n * sizeof(double) ); work = (double *)LAPACKE_malloc( n * sizeof(double) ); /* Allocate memory for the C interface function arrays */ ab_i = (double *)LAPACKE_malloc( ldab*n * sizeof(double) ); d_i = (double *)LAPACKE_malloc( n * sizeof(double) ); e_i = (double *)LAPACKE_malloc( (n-1) * sizeof(double) ); q_i = (double *)LAPACKE_malloc( ldq*n * sizeof(double) ); work_i = (double *)LAPACKE_malloc( n * sizeof(double) ); /* Allocate memory for the backup arrays */ ab_save = (double *)LAPACKE_malloc( ldab*n * sizeof(double) ); d_save = (double *)LAPACKE_malloc( n * sizeof(double) ); e_save = (double *)LAPACKE_malloc( (n-1) * sizeof(double) ); q_save = (double *)LAPACKE_malloc( ldq*n * sizeof(double) ); /* Allocate memory for the row-major arrays */ ab_r = (double *)LAPACKE_malloc( (kd+1)*(n+2) * sizeof(double) ); q_r = (double *)LAPACKE_malloc( n*(n+2) * sizeof(double) ); /* Initialize input arrays */ init_ab( ldab*n, ab ); init_d( n, d ); init_e( (n-1), e ); init_q( ldq*n, q ); init_work( n, work ); /* Backup the ouptut arrays */ for( i = 0; i < ldab*n; i++ ) { ab_save[i] = ab[i]; } for( i = 0; i < n; i++ ) { d_save[i] = d[i]; } for( i = 0; i < (n-1); i++ ) { e_save[i] = e[i]; } for( i = 0; i < ldq*n; i++ ) { q_save[i] = q[i]; } /* Call the LAPACK routine */ dsbtrd_( &vect, &uplo, &n, &kd, ab, &ldab, d, e, q, &ldq, work, &info ); /* Initialize input data, call the column-major middle-level * interface to LAPACK routine and check the results */ for( i = 0; i < ldab*n; i++ ) { ab_i[i] = ab_save[i]; } for( i = 0; i < n; i++ ) { d_i[i] = d_save[i]; } for( i = 0; i < (n-1); i++ ) { e_i[i] = e_save[i]; } for( i = 0; i < ldq*n; i++ ) { q_i[i] = q_save[i]; } for( i = 0; i < n; i++ ) { work_i[i] = work[i]; } info_i = LAPACKE_dsbtrd_work( LAPACK_COL_MAJOR, vect_i, uplo_i, n_i, kd_i, ab_i, ldab_i, d_i, e_i, q_i, ldq_i, work_i ); failed = compare_dsbtrd( ab, ab_i, d, d_i, e, e_i, q, q_i, info, info_i, ldab, ldq, n, vect ); if( failed == 0 ) { printf( "PASSED: column-major middle-level interface to dsbtrd\n" ); } else { printf( "FAILED: column-major middle-level interface to dsbtrd\n" ); } /* Initialize input data, call the column-major high-level * interface to LAPACK routine and check the results */ for( i = 0; i < ldab*n; i++ ) { ab_i[i] = ab_save[i]; } for( i = 0; i < n; i++ ) { d_i[i] = d_save[i]; } for( i = 0; i < (n-1); i++ ) { e_i[i] = e_save[i]; } for( i = 0; i < ldq*n; i++ ) { q_i[i] = q_save[i]; } for( i = 0; i < n; i++ ) { work_i[i] = work[i]; } info_i = LAPACKE_dsbtrd( LAPACK_COL_MAJOR, vect_i, uplo_i, n_i, kd_i, ab_i, ldab_i, d_i, e_i, q_i, ldq_i ); failed = compare_dsbtrd( ab, ab_i, d, d_i, e, e_i, q, q_i, info, info_i, ldab, ldq, n, vect ); if( failed == 0 ) { printf( "PASSED: column-major high-level interface to dsbtrd\n" ); } else { printf( "FAILED: column-major high-level interface to dsbtrd\n" ); } /* Initialize input data, call the row-major middle-level * interface to LAPACK routine and check the results */ for( i = 0; i < ldab*n; i++ ) { ab_i[i] = ab_save[i]; } for( i = 0; i < n; i++ ) { d_i[i] = d_save[i]; } for( i = 0; i < (n-1); i++ ) { e_i[i] = e_save[i]; } for( i = 0; i < ldq*n; i++ ) { q_i[i] = q_save[i]; } for( i = 0; i < n; i++ ) { work_i[i] = work[i]; } LAPACKE_dge_trans( LAPACK_COL_MAJOR, kd+1, n, ab_i, ldab, ab_r, n+2 ); if( LAPACKE_lsame( vect, 'u' ) || LAPACKE_lsame( vect, 'v' ) ) { LAPACKE_dge_trans( LAPACK_COL_MAJOR, n, n, q_i, ldq, q_r, n+2 ); } info_i = LAPACKE_dsbtrd_work( LAPACK_ROW_MAJOR, vect_i, uplo_i, n_i, kd_i, ab_r, ldab_r, d_i, e_i, q_r, ldq_r, work_i ); LAPACKE_dge_trans( LAPACK_ROW_MAJOR, kd+1, n, ab_r, n+2, ab_i, ldab ); if( LAPACKE_lsame( vect, 'u' ) || LAPACKE_lsame( vect, 'v' ) ) { LAPACKE_dge_trans( LAPACK_ROW_MAJOR, n, n, q_r, n+2, q_i, ldq ); } failed = compare_dsbtrd( ab, ab_i, d, d_i, e, e_i, q, q_i, info, info_i, ldab, ldq, n, vect ); if( failed == 0 ) { printf( "PASSED: row-major middle-level interface to dsbtrd\n" ); } else { printf( "FAILED: row-major middle-level interface to dsbtrd\n" ); } /* Initialize input data, call the row-major high-level * interface to LAPACK routine and check the results */ for( i = 0; i < ldab*n; i++ ) { ab_i[i] = ab_save[i]; } for( i = 0; i < n; i++ ) { d_i[i] = d_save[i]; } for( i = 0; i < (n-1); i++ ) { e_i[i] = e_save[i]; } for( i = 0; i < ldq*n; i++ ) { q_i[i] = q_save[i]; } for( i = 0; i < n; i++ ) { work_i[i] = work[i]; } /* Init row_major arrays */ LAPACKE_dge_trans( LAPACK_COL_MAJOR, kd+1, n, ab_i, ldab, ab_r, n+2 ); if( LAPACKE_lsame( vect, 'u' ) || LAPACKE_lsame( vect, 'v' ) ) { LAPACKE_dge_trans( LAPACK_COL_MAJOR, n, n, q_i, ldq, q_r, n+2 ); } info_i = LAPACKE_dsbtrd( LAPACK_ROW_MAJOR, vect_i, uplo_i, n_i, kd_i, ab_r, ldab_r, d_i, e_i, q_r, ldq_r ); LAPACKE_dge_trans( LAPACK_ROW_MAJOR, kd+1, n, ab_r, n+2, ab_i, ldab ); if( LAPACKE_lsame( vect, 'u' ) || LAPACKE_lsame( vect, 'v' ) ) { LAPACKE_dge_trans( LAPACK_ROW_MAJOR, n, n, q_r, n+2, q_i, ldq ); } failed = compare_dsbtrd( ab, ab_i, d, d_i, e, e_i, q, q_i, info, info_i, ldab, ldq, n, vect ); if( failed == 0 ) { printf( "PASSED: row-major high-level interface to dsbtrd\n" ); } else { printf( "FAILED: row-major high-level interface to dsbtrd\n" ); } /* Release memory */ if( ab != NULL ) { LAPACKE_free( ab ); } if( ab_i != NULL ) { LAPACKE_free( ab_i ); } if( ab_r != NULL ) { LAPACKE_free( ab_r ); } if( ab_save != NULL ) { LAPACKE_free( ab_save ); } if( d != NULL ) { LAPACKE_free( d ); } if( d_i != NULL ) { LAPACKE_free( d_i ); } if( d_save != NULL ) { LAPACKE_free( d_save ); } if( e != NULL ) { LAPACKE_free( e ); } if( e_i != NULL ) { LAPACKE_free( e_i ); } if( e_save != NULL ) { LAPACKE_free( e_save ); } if( q != NULL ) { LAPACKE_free( q ); } if( q_i != NULL ) { LAPACKE_free( q_i ); } if( q_r != NULL ) { LAPACKE_free( q_r ); } if( q_save != NULL ) { LAPACKE_free( q_save ); } if( work != NULL ) { LAPACKE_free( work ); } if( work_i != NULL ) { LAPACKE_free( work_i ); } return 0; }
int main(void) { /* Local scalars */ char uplo, uplo_i; lapack_int n, n_i; lapack_int kd, kd_i; lapack_int nrhs, nrhs_i; lapack_int ldab, ldab_i; lapack_int ldab_r; lapack_int ldafb, ldafb_i; lapack_int ldafb_r; lapack_int ldb, ldb_i; lapack_int ldb_r; lapack_int ldx, ldx_i; lapack_int ldx_r; lapack_int info, info_i; lapack_int i; int failed; /* Local arrays */ float *ab = NULL, *ab_i = NULL; float *afb = NULL, *afb_i = NULL; float *b = NULL, *b_i = NULL; float *x = NULL, *x_i = NULL; float *ferr = NULL, *ferr_i = NULL; float *berr = NULL, *berr_i = NULL; float *work = NULL, *work_i = NULL; lapack_int *iwork = NULL, *iwork_i = NULL; float *x_save = NULL; float *ferr_save = NULL; float *berr_save = NULL; float *ab_r = NULL; float *afb_r = NULL; float *b_r = NULL; float *x_r = NULL; /* Iniitialize the scalar parameters */ init_scalars_spbrfs( &uplo, &n, &kd, &nrhs, &ldab, &ldafb, &ldb, &ldx ); ldab_r = n+2; ldafb_r = n+2; ldb_r = nrhs+2; ldx_r = nrhs+2; uplo_i = uplo; n_i = n; kd_i = kd; nrhs_i = nrhs; ldab_i = ldab; ldafb_i = ldafb; ldb_i = ldb; ldx_i = ldx; /* Allocate memory for the LAPACK routine arrays */ ab = (float *)LAPACKE_malloc( ldab*n * sizeof(float) ); afb = (float *)LAPACKE_malloc( ldafb*n * sizeof(float) ); b = (float *)LAPACKE_malloc( ldb*nrhs * sizeof(float) ); x = (float *)LAPACKE_malloc( ldx*nrhs * sizeof(float) ); ferr = (float *)LAPACKE_malloc( nrhs * sizeof(float) ); berr = (float *)LAPACKE_malloc( nrhs * sizeof(float) ); work = (float *)LAPACKE_malloc( 3*n * sizeof(float) ); iwork = (lapack_int *)LAPACKE_malloc( n * sizeof(lapack_int) ); /* Allocate memory for the C interface function arrays */ ab_i = (float *)LAPACKE_malloc( ldab*n * sizeof(float) ); afb_i = (float *)LAPACKE_malloc( ldafb*n * sizeof(float) ); b_i = (float *)LAPACKE_malloc( ldb*nrhs * sizeof(float) ); x_i = (float *)LAPACKE_malloc( ldx*nrhs * sizeof(float) ); ferr_i = (float *)LAPACKE_malloc( nrhs * sizeof(float) ); berr_i = (float *)LAPACKE_malloc( nrhs * sizeof(float) ); work_i = (float *)LAPACKE_malloc( 3*n * sizeof(float) ); iwork_i = (lapack_int *)LAPACKE_malloc( n * sizeof(lapack_int) ); /* Allocate memory for the backup arrays */ x_save = (float *)LAPACKE_malloc( ldx*nrhs * sizeof(float) ); ferr_save = (float *)LAPACKE_malloc( nrhs * sizeof(float) ); berr_save = (float *)LAPACKE_malloc( nrhs * sizeof(float) ); /* Allocate memory for the row-major arrays */ ab_r = (float *)LAPACKE_malloc( (kd+1)*(n+2) * sizeof(float) ); afb_r = (float *)LAPACKE_malloc( (kd+1)*(n+2) * sizeof(float) ); b_r = (float *)LAPACKE_malloc( n*(nrhs+2) * sizeof(float) ); x_r = (float *)LAPACKE_malloc( n*(nrhs+2) * sizeof(float) ); /* Initialize input arrays */ init_ab( ldab*n, ab ); init_afb( ldafb*n, afb ); init_b( ldb*nrhs, b ); init_x( ldx*nrhs, x ); init_ferr( nrhs, ferr ); init_berr( nrhs, berr ); init_work( 3*n, work ); init_iwork( n, iwork ); /* Backup the ouptut arrays */ for( i = 0; i < ldx*nrhs; i++ ) { x_save[i] = x[i]; } for( i = 0; i < nrhs; i++ ) { ferr_save[i] = ferr[i]; } for( i = 0; i < nrhs; i++ ) { berr_save[i] = berr[i]; } /* Call the LAPACK routine */ spbrfs_( &uplo, &n, &kd, &nrhs, ab, &ldab, afb, &ldafb, b, &ldb, x, &ldx, ferr, berr, work, iwork, &info ); /* Initialize input data, call the column-major middle-level * interface to LAPACK routine and check the results */ for( i = 0; i < ldab*n; i++ ) { ab_i[i] = ab[i]; } for( i = 0; i < ldafb*n; i++ ) { afb_i[i] = afb[i]; } for( i = 0; i < ldb*nrhs; i++ ) { b_i[i] = b[i]; } for( i = 0; i < ldx*nrhs; i++ ) { x_i[i] = x_save[i]; } for( i = 0; i < nrhs; i++ ) { ferr_i[i] = ferr_save[i]; } for( i = 0; i < nrhs; i++ ) { berr_i[i] = berr_save[i]; } for( i = 0; i < 3*n; i++ ) { work_i[i] = work[i]; } for( i = 0; i < n; i++ ) { iwork_i[i] = iwork[i]; } info_i = LAPACKE_spbrfs_work( LAPACK_COL_MAJOR, uplo_i, n_i, kd_i, nrhs_i, ab_i, ldab_i, afb_i, ldafb_i, b_i, ldb_i, x_i, ldx_i, ferr_i, berr_i, work_i, iwork_i ); failed = compare_spbrfs( x, x_i, ferr, ferr_i, berr, berr_i, info, info_i, ldx, nrhs ); if( failed == 0 ) { printf( "PASSED: column-major middle-level interface to spbrfs\n" ); } else { printf( "FAILED: column-major middle-level interface to spbrfs\n" ); } /* Initialize input data, call the column-major high-level * interface to LAPACK routine and check the results */ for( i = 0; i < ldab*n; i++ ) { ab_i[i] = ab[i]; } for( i = 0; i < ldafb*n; i++ ) { afb_i[i] = afb[i]; } for( i = 0; i < ldb*nrhs; i++ ) { b_i[i] = b[i]; } for( i = 0; i < ldx*nrhs; i++ ) { x_i[i] = x_save[i]; } for( i = 0; i < nrhs; i++ ) { ferr_i[i] = ferr_save[i]; } for( i = 0; i < nrhs; i++ ) { berr_i[i] = berr_save[i]; } for( i = 0; i < 3*n; i++ ) { work_i[i] = work[i]; } for( i = 0; i < n; i++ ) { iwork_i[i] = iwork[i]; } info_i = LAPACKE_spbrfs( LAPACK_COL_MAJOR, uplo_i, n_i, kd_i, nrhs_i, ab_i, ldab_i, afb_i, ldafb_i, b_i, ldb_i, x_i, ldx_i, ferr_i, berr_i ); failed = compare_spbrfs( x, x_i, ferr, ferr_i, berr, berr_i, info, info_i, ldx, nrhs ); if( failed == 0 ) { printf( "PASSED: column-major high-level interface to spbrfs\n" ); } else { printf( "FAILED: column-major high-level interface to spbrfs\n" ); } /* Initialize input data, call the row-major middle-level * interface to LAPACK routine and check the results */ for( i = 0; i < ldab*n; i++ ) { ab_i[i] = ab[i]; } for( i = 0; i < ldafb*n; i++ ) { afb_i[i] = afb[i]; } for( i = 0; i < ldb*nrhs; i++ ) { b_i[i] = b[i]; } for( i = 0; i < ldx*nrhs; i++ ) { x_i[i] = x_save[i]; } for( i = 0; i < nrhs; i++ ) { ferr_i[i] = ferr_save[i]; } for( i = 0; i < nrhs; i++ ) { berr_i[i] = berr_save[i]; } for( i = 0; i < 3*n; i++ ) { work_i[i] = work[i]; } for( i = 0; i < n; i++ ) { iwork_i[i] = iwork[i]; } LAPACKE_sge_trans( LAPACK_COL_MAJOR, kd+1, n, ab_i, ldab, ab_r, n+2 ); LAPACKE_sge_trans( LAPACK_COL_MAJOR, kd+1, n, afb_i, ldafb, afb_r, n+2 ); LAPACKE_sge_trans( LAPACK_COL_MAJOR, n, nrhs, b_i, ldb, b_r, nrhs+2 ); LAPACKE_sge_trans( LAPACK_COL_MAJOR, n, nrhs, x_i, ldx, x_r, nrhs+2 ); info_i = LAPACKE_spbrfs_work( LAPACK_ROW_MAJOR, uplo_i, n_i, kd_i, nrhs_i, ab_r, ldab_r, afb_r, ldafb_r, b_r, ldb_r, x_r, ldx_r, ferr_i, berr_i, work_i, iwork_i ); LAPACKE_sge_trans( LAPACK_ROW_MAJOR, n, nrhs, x_r, nrhs+2, x_i, ldx ); failed = compare_spbrfs( x, x_i, ferr, ferr_i, berr, berr_i, info, info_i, ldx, nrhs ); if( failed == 0 ) { printf( "PASSED: row-major middle-level interface to spbrfs\n" ); } else { printf( "FAILED: row-major middle-level interface to spbrfs\n" ); } /* Initialize input data, call the row-major high-level * interface to LAPACK routine and check the results */ for( i = 0; i < ldab*n; i++ ) { ab_i[i] = ab[i]; } for( i = 0; i < ldafb*n; i++ ) { afb_i[i] = afb[i]; } for( i = 0; i < ldb*nrhs; i++ ) { b_i[i] = b[i]; } for( i = 0; i < ldx*nrhs; i++ ) { x_i[i] = x_save[i]; } for( i = 0; i < nrhs; i++ ) { ferr_i[i] = ferr_save[i]; } for( i = 0; i < nrhs; i++ ) { berr_i[i] = berr_save[i]; } for( i = 0; i < 3*n; i++ ) { work_i[i] = work[i]; } for( i = 0; i < n; i++ ) { iwork_i[i] = iwork[i]; } /* Init row_major arrays */ LAPACKE_sge_trans( LAPACK_COL_MAJOR, kd+1, n, ab_i, ldab, ab_r, n+2 ); LAPACKE_sge_trans( LAPACK_COL_MAJOR, kd+1, n, afb_i, ldafb, afb_r, n+2 ); LAPACKE_sge_trans( LAPACK_COL_MAJOR, n, nrhs, b_i, ldb, b_r, nrhs+2 ); LAPACKE_sge_trans( LAPACK_COL_MAJOR, n, nrhs, x_i, ldx, x_r, nrhs+2 ); info_i = LAPACKE_spbrfs( LAPACK_ROW_MAJOR, uplo_i, n_i, kd_i, nrhs_i, ab_r, ldab_r, afb_r, ldafb_r, b_r, ldb_r, x_r, ldx_r, ferr_i, berr_i ); LAPACKE_sge_trans( LAPACK_ROW_MAJOR, n, nrhs, x_r, nrhs+2, x_i, ldx ); failed = compare_spbrfs( x, x_i, ferr, ferr_i, berr, berr_i, info, info_i, ldx, nrhs ); if( failed == 0 ) { printf( "PASSED: row-major high-level interface to spbrfs\n" ); } else { printf( "FAILED: row-major high-level interface to spbrfs\n" ); } /* Release memory */ if( ab != NULL ) { LAPACKE_free( ab ); } if( ab_i != NULL ) { LAPACKE_free( ab_i ); } if( ab_r != NULL ) { LAPACKE_free( ab_r ); } if( afb != NULL ) { LAPACKE_free( afb ); } if( afb_i != NULL ) { LAPACKE_free( afb_i ); } if( afb_r != NULL ) { LAPACKE_free( afb_r ); } if( b != NULL ) { LAPACKE_free( b ); } if( b_i != NULL ) { LAPACKE_free( b_i ); } if( b_r != NULL ) { LAPACKE_free( b_r ); } if( x != NULL ) { LAPACKE_free( x ); } if( x_i != NULL ) { LAPACKE_free( x_i ); } if( x_r != NULL ) { LAPACKE_free( x_r ); } if( x_save != NULL ) { LAPACKE_free( x_save ); } if( ferr != NULL ) { LAPACKE_free( ferr ); } if( ferr_i != NULL ) { LAPACKE_free( ferr_i ); } if( ferr_save != NULL ) { LAPACKE_free( ferr_save ); } if( berr != NULL ) { LAPACKE_free( berr ); } if( berr_i != NULL ) { LAPACKE_free( berr_i ); } if( berr_save != NULL ) { LAPACKE_free( berr_save ); } if( work != NULL ) { LAPACKE_free( work ); } if( work_i != NULL ) { LAPACKE_free( work_i ); } if( iwork != NULL ) { LAPACKE_free( iwork ); } if( iwork_i != NULL ) { LAPACKE_free( iwork_i ); } return 0; }
int main(void) { /* Local scalars */ char trans, trans_i; lapack_int n, n_i; lapack_int kl, kl_i; lapack_int ku, ku_i; lapack_int nrhs, nrhs_i; lapack_int ldab, ldab_i; lapack_int ldab_r; lapack_int ldb, ldb_i; lapack_int ldb_r; lapack_int info, info_i; lapack_int i; int failed; /* Local arrays */ lapack_complex_double *ab = NULL, *ab_i = NULL; lapack_int *ipiv = NULL, *ipiv_i = NULL; lapack_complex_double *b = NULL, *b_i = NULL; lapack_complex_double *b_save = NULL; lapack_complex_double *ab_r = NULL; lapack_complex_double *b_r = NULL; /* Iniitialize the scalar parameters */ init_scalars_zgbtrs( &trans, &n, &kl, &ku, &nrhs, &ldab, &ldb ); ldab_r = n+2; ldb_r = nrhs+2; trans_i = trans; n_i = n; kl_i = kl; ku_i = ku; nrhs_i = nrhs; ldab_i = ldab; ldb_i = ldb; /* Allocate memory for the LAPACK routine arrays */ ab = (lapack_complex_double *) LAPACKE_malloc( ldab*n * sizeof(lapack_complex_double) ); ipiv = (lapack_int *)LAPACKE_malloc( n * sizeof(lapack_int) ); b = (lapack_complex_double *) LAPACKE_malloc( ldb*nrhs * sizeof(lapack_complex_double) ); /* Allocate memory for the C interface function arrays */ ab_i = (lapack_complex_double *) LAPACKE_malloc( ldab*n * sizeof(lapack_complex_double) ); ipiv_i = (lapack_int *)LAPACKE_malloc( n * sizeof(lapack_int) ); b_i = (lapack_complex_double *) LAPACKE_malloc( ldb*nrhs * sizeof(lapack_complex_double) ); /* Allocate memory for the backup arrays */ b_save = (lapack_complex_double *) LAPACKE_malloc( ldb*nrhs * sizeof(lapack_complex_double) ); /* Allocate memory for the row-major arrays */ ab_r = (lapack_complex_double *) LAPACKE_malloc( ((2*kl+ku+1)*(n+2)) * sizeof(lapack_complex_double) ); b_r = (lapack_complex_double *) LAPACKE_malloc( n*(nrhs+2) * sizeof(lapack_complex_double) ); /* Initialize input arrays */ init_ab( ldab*n, ab ); init_ipiv( n, ipiv ); init_b( ldb*nrhs, b ); /* Backup the ouptut arrays */ for( i = 0; i < ldb*nrhs; i++ ) { b_save[i] = b[i]; } /* Call the LAPACK routine */ zgbtrs_( &trans, &n, &kl, &ku, &nrhs, ab, &ldab, ipiv, b, &ldb, &info ); /* Initialize input data, call the column-major middle-level * interface to LAPACK routine and check the results */ for( i = 0; i < ldab*n; i++ ) { ab_i[i] = ab[i]; } for( i = 0; i < n; i++ ) { ipiv_i[i] = ipiv[i]; } for( i = 0; i < ldb*nrhs; i++ ) { b_i[i] = b_save[i]; } info_i = LAPACKE_zgbtrs_work( LAPACK_COL_MAJOR, trans_i, n_i, kl_i, ku_i, nrhs_i, ab_i, ldab_i, ipiv_i, b_i, ldb_i ); failed = compare_zgbtrs( b, b_i, info, info_i, ldb, nrhs ); if( failed == 0 ) { printf( "PASSED: column-major middle-level interface to zgbtrs\n" ); } else { printf( "FAILED: column-major middle-level interface to zgbtrs\n" ); } /* Initialize input data, call the column-major high-level * interface to LAPACK routine and check the results */ for( i = 0; i < ldab*n; i++ ) { ab_i[i] = ab[i]; } for( i = 0; i < n; i++ ) { ipiv_i[i] = ipiv[i]; } for( i = 0; i < ldb*nrhs; i++ ) { b_i[i] = b_save[i]; } info_i = LAPACKE_zgbtrs( LAPACK_COL_MAJOR, trans_i, n_i, kl_i, ku_i, nrhs_i, ab_i, ldab_i, ipiv_i, b_i, ldb_i ); failed = compare_zgbtrs( b, b_i, info, info_i, ldb, nrhs ); if( failed == 0 ) { printf( "PASSED: column-major high-level interface to zgbtrs\n" ); } else { printf( "FAILED: column-major high-level interface to zgbtrs\n" ); } /* Initialize input data, call the row-major middle-level * interface to LAPACK routine and check the results */ for( i = 0; i < ldab*n; i++ ) { ab_i[i] = ab[i]; } for( i = 0; i < n; i++ ) { ipiv_i[i] = ipiv[i]; } for( i = 0; i < ldb*nrhs; i++ ) { b_i[i] = b_save[i]; } LAPACKE_zge_trans( LAPACK_COL_MAJOR, 2*kl+ku+1, n, ab_i, ldab, ab_r, n+2 ); LAPACKE_zge_trans( LAPACK_COL_MAJOR, n, nrhs, b_i, ldb, b_r, nrhs+2 ); info_i = LAPACKE_zgbtrs_work( LAPACK_ROW_MAJOR, trans_i, n_i, kl_i, ku_i, nrhs_i, ab_r, ldab_r, ipiv_i, b_r, ldb_r ); LAPACKE_zge_trans( LAPACK_ROW_MAJOR, n, nrhs, b_r, nrhs+2, b_i, ldb ); failed = compare_zgbtrs( b, b_i, info, info_i, ldb, nrhs ); if( failed == 0 ) { printf( "PASSED: row-major middle-level interface to zgbtrs\n" ); } else { printf( "FAILED: row-major middle-level interface to zgbtrs\n" ); } /* Initialize input data, call the row-major high-level * interface to LAPACK routine and check the results */ for( i = 0; i < ldab*n; i++ ) { ab_i[i] = ab[i]; } for( i = 0; i < n; i++ ) { ipiv_i[i] = ipiv[i]; } for( i = 0; i < ldb*nrhs; i++ ) { b_i[i] = b_save[i]; } /* Init row_major arrays */ LAPACKE_zge_trans( LAPACK_COL_MAJOR, 2*kl+ku+1, n, ab_i, ldab, ab_r, n+2 ); LAPACKE_zge_trans( LAPACK_COL_MAJOR, n, nrhs, b_i, ldb, b_r, nrhs+2 ); info_i = LAPACKE_zgbtrs( LAPACK_ROW_MAJOR, trans_i, n_i, kl_i, ku_i, nrhs_i, ab_r, ldab_r, ipiv_i, b_r, ldb_r ); LAPACKE_zge_trans( LAPACK_ROW_MAJOR, n, nrhs, b_r, nrhs+2, b_i, ldb ); failed = compare_zgbtrs( b, b_i, info, info_i, ldb, nrhs ); if( failed == 0 ) { printf( "PASSED: row-major high-level interface to zgbtrs\n" ); } else { printf( "FAILED: row-major high-level interface to zgbtrs\n" ); } /* Release memory */ if( ab != NULL ) { LAPACKE_free( ab ); } if( ab_i != NULL ) { LAPACKE_free( ab_i ); } if( ab_r != NULL ) { LAPACKE_free( ab_r ); } if( ipiv != NULL ) { LAPACKE_free( ipiv ); } if( ipiv_i != NULL ) { LAPACKE_free( ipiv_i ); } if( b != NULL ) { LAPACKE_free( b ); } if( b_i != NULL ) { LAPACKE_free( b_i ); } if( b_r != NULL ) { LAPACKE_free( b_r ); } if( b_save != NULL ) { LAPACKE_free( b_save ); } return 0; }