Browse Source

Update CBLAS3 tests from Reference-LAPACK to add GEMMT(R) testing

pull/5187/head
Martin Kroeker GitHub 1 year ago
parent
commit
088f3b4355
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
13 changed files with 3366 additions and 1186 deletions
  1. +176
    -64
      ctest/c_cblas3.c
  2. +653
    -103
      ctest/c_cblat3.f
  3. +166
    -64
      ctest/c_dblas3.c
  4. +575
    -90
      ctest/c_dblat3.f
  5. +163
    -63
      ctest/c_sblas3.c
  6. +569
    -81
      ctest/c_sblat3.f
  7. +212
    -95
      ctest/c_zblas3.c
  8. +650
    -102
      ctest/c_zblat3.f
  9. +166
    -492
      ctest/cblas_test.h
  10. +3
    -2
      ctest/cin3
  11. +10
    -9
      ctest/din3
  12. +10
    -9
      ctest/sin3
  13. +13
    -12
      ctest/zin3

+ 176
- 64
ctest/c_cblas3.c View File

@@ -5,26 +5,29 @@
* Modified by T. H. Do, 4/15/98, SGI/CRAY Research.
*/
#include <stdlib.h>
#include "common.h"
#include "cblas.h"
#include "cblas_test.h"

#define TEST_COL_MJR 0
#define TEST_ROW_MJR 1
#define UNDEFINED -1

void F77_cgemm(int *order, char *transpa, char *transpb, int *m, int *n,
void F77_cgemm(int *layout, char *transpa, char *transpb, int *m, int *n,
int *k, CBLAS_TEST_COMPLEX *alpha, CBLAS_TEST_COMPLEX *a, int *lda,
CBLAS_TEST_COMPLEX *b, int *ldb, CBLAS_TEST_COMPLEX *beta,
CBLAS_TEST_COMPLEX *c, int *ldc ) {
CBLAS_TEST_COMPLEX *c, int *ldc
#ifdef BLAS_FORTRAN_STRLEN_END
, FORTRAN_STRLEN transpa_len, FORTRAN_STRLEN transpb_len
#endif
) {

CBLAS_TEST_COMPLEX *A, *B, *C;
int i,j,LDA, LDB, LDC;
enum CBLAS_TRANSPOSE transa, transb;
CBLAS_TRANSPOSE transa, transb;

get_transpose_type(transpa, &transa);
get_transpose_type(transpb, &transb);

if (*order == TEST_ROW_MJR) {
if (*layout == TEST_ROW_MJR) {
if (transa == CblasNoTrans) {
LDA = *k+1;
A=(CBLAS_TEST_COMPLEX*)malloc((*m)*LDA*sizeof(CBLAS_TEST_COMPLEX));
@@ -81,7 +84,7 @@ void F77_cgemm(int *order, char *transpa, char *transpb, int *m, int *n,
free(B);
free(C);
}
else if (*order == TEST_COL_MJR)
else if (*layout == TEST_COL_MJR)
cblas_cgemm( CblasColMajor, transa, transb, *m, *n, *k, alpha, a, *lda,
b, *ldb, beta, c, *ldc );
else
@@ -89,20 +92,104 @@ void F77_cgemm(int *order, char *transpa, char *transpb, int *m, int *n,
b, *ldb, beta, c, *ldc );
}

void F77_chemm(int *order, char *rtlf, char *uplow, int *m, int *n,
void F77_cgemmtr(int *layout, char *uplop, char *transpa, char *transpb, int *n,
int *k, CBLAS_TEST_COMPLEX *alpha, CBLAS_TEST_COMPLEX *a, int *lda,
CBLAS_TEST_COMPLEX *b, int *ldb, CBLAS_TEST_COMPLEX *beta,
CBLAS_TEST_COMPLEX *c, int *ldc ) {

CBLAS_TEST_COMPLEX *A, *B, *C;
int i,j,LDA, LDB, LDC;
CBLAS_TRANSPOSE transa, transb;
CBLAS_UPLO uplo;

get_transpose_type(transpa, &transa);
get_transpose_type(transpb, &transb);
get_uplo_type(uplop, &uplo);

if (*layout == TEST_ROW_MJR) {
if (transa == CblasNoTrans) {
LDA = *k+1;
A=(CBLAS_TEST_COMPLEX*)malloc((*n)*LDA*sizeof(CBLAS_TEST_COMPLEX));
for( i=0; i<*n; i++ )
for( j=0; j<*k; j++ ) {
A[i*LDA+j].real=a[j*(*lda)+i].real;
A[i*LDA+j].imag=a[j*(*lda)+i].imag;
}
}
else {
LDA = *n+1;
A=(CBLAS_TEST_COMPLEX* )malloc(LDA*(*k)*sizeof(CBLAS_TEST_COMPLEX));
for( i=0; i<*k; i++ )
for( j=0; j<*n; j++ ) {
A[i*LDA+j].real=a[j*(*lda)+i].real;
A[i*LDA+j].imag=a[j*(*lda)+i].imag;
}
}

if (transb == CblasNoTrans) {
LDB = *n+1;
B=(CBLAS_TEST_COMPLEX* )malloc((*k)*LDB*sizeof(CBLAS_TEST_COMPLEX) );
for( i=0; i<*k; i++ )
for( j=0; j<*n; j++ ) {
B[i*LDB+j].real=b[j*(*ldb)+i].real;
B[i*LDB+j].imag=b[j*(*ldb)+i].imag;
}
}
else {
LDB = *k+1;
B=(CBLAS_TEST_COMPLEX* )malloc(LDB*(*n)*sizeof(CBLAS_TEST_COMPLEX));
for( i=0; i<*n; i++ )
for( j=0; j<*k; j++ ) {
B[i*LDB+j].real=b[j*(*ldb)+i].real;
B[i*LDB+j].imag=b[j*(*ldb)+i].imag;
}
}

LDC = *n+1;
C=(CBLAS_TEST_COMPLEX* )malloc((*n)*LDC*sizeof(CBLAS_TEST_COMPLEX));
for( j=0; j<*n; j++ )
for( i=0; i<*n; i++ ) {
C[i*LDC+j].real=c[j*(*ldc)+i].real;
C[i*LDC+j].imag=c[j*(*ldc)+i].imag;
}
cblas_cgemmtr( CblasRowMajor, uplo, transa, transb, *n, *k, alpha, A, LDA,
B, LDB, beta, C, LDC );
for( j=0; j<*n; j++ )
for( i=0; i<*n; i++ ) {
c[j*(*ldc)+i].real=C[i*LDC+j].real;
c[j*(*ldc)+i].imag=C[i*LDC+j].imag;
}
free(A);
free(B);
free(C);
}
else if (*layout == TEST_COL_MJR)
cblas_cgemmtr( CblasColMajor, uplo, transa, transb, *n, *k, alpha, a, *lda,
b, *ldb, beta, c, *ldc );
else
cblas_cgemmtr( UNDEFINED, uplo, transa, transb, *n, *k, alpha, a, *lda,
b, *ldb, beta, c, *ldc );
}


void F77_chemm(int *layout, char *rtlf, char *uplow, int *m, int *n,
CBLAS_TEST_COMPLEX *alpha, CBLAS_TEST_COMPLEX *a, int *lda,
CBLAS_TEST_COMPLEX *b, int *ldb, CBLAS_TEST_COMPLEX *beta,
CBLAS_TEST_COMPLEX *c, int *ldc ) {
CBLAS_TEST_COMPLEX *b, int *ldb, CBLAS_TEST_COMPLEX *beta,
CBLAS_TEST_COMPLEX *c, int *ldc
#ifdef BLAS_FORTRAN_STRLEN_END
, FORTRAN_STRLEN rtlf_len, FORTRAN_STRLEN uplow_len
#endif
) {

CBLAS_TEST_COMPLEX *A, *B, *C;
int i,j,LDA, LDB, LDC;
enum CBLAS_UPLO uplo;
enum CBLAS_SIDE side;
CBLAS_UPLO uplo;
CBLAS_SIDE side;

get_uplo_type(uplow,&uplo);
get_side_type(rtlf,&side);

if (*order == TEST_ROW_MJR) {
if (*layout == TEST_ROW_MJR) {
if (side == CblasLeft) {
LDA = *m+1;
A= (CBLAS_TEST_COMPLEX* )malloc((*m)*LDA*sizeof(CBLAS_TEST_COMPLEX));
@@ -146,27 +233,31 @@ void F77_chemm(int *order, char *rtlf, char *uplow, int *m, int *n,
free(B);
free(C);
}
else if (*order == TEST_COL_MJR)
else if (*layout == TEST_COL_MJR)
cblas_chemm( CblasColMajor, side, uplo, *m, *n, alpha, a, *lda, b, *ldb,
beta, c, *ldc );
else
cblas_chemm( UNDEFINED, side, uplo, *m, *n, alpha, a, *lda, b, *ldb,
beta, c, *ldc );
}
void F77_csymm(int *order, char *rtlf, char *uplow, int *m, int *n,
void F77_csymm(int *layout, char *rtlf, char *uplow, int *m, int *n,
CBLAS_TEST_COMPLEX *alpha, CBLAS_TEST_COMPLEX *a, int *lda,
CBLAS_TEST_COMPLEX *b, int *ldb, CBLAS_TEST_COMPLEX *beta,
CBLAS_TEST_COMPLEX *c, int *ldc ) {
CBLAS_TEST_COMPLEX *b, int *ldb, CBLAS_TEST_COMPLEX *beta,
CBLAS_TEST_COMPLEX *c, int *ldc
#ifdef BLAS_FORTRAN_STRLEN_END
, FORTRAN_STRLEN rtlf_len, FORTRAN_STRLEN uplow_len
#endif
) {

CBLAS_TEST_COMPLEX *A, *B, *C;
int i,j,LDA, LDB, LDC;
enum CBLAS_UPLO uplo;
enum CBLAS_SIDE side;
CBLAS_UPLO uplo;
CBLAS_SIDE side;

get_uplo_type(uplow,&uplo);
get_side_type(rtlf,&side);

if (*order == TEST_ROW_MJR) {
if (*layout == TEST_ROW_MJR) {
if (side == CblasLeft) {
LDA = *m+1;
A=(CBLAS_TEST_COMPLEX* )malloc((*m)*LDA*sizeof(CBLAS_TEST_COMPLEX));
@@ -200,7 +291,7 @@ void F77_csymm(int *order, char *rtlf, char *uplow, int *m, int *n,
free(B);
free(C);
}
else if (*order == TEST_COL_MJR)
else if (*layout == TEST_COL_MJR)
cblas_csymm( CblasColMajor, side, uplo, *m, *n, alpha, a, *lda, b, *ldb,
beta, c, *ldc );
else
@@ -208,19 +299,23 @@ void F77_csymm(int *order, char *rtlf, char *uplow, int *m, int *n,
beta, c, *ldc );
}

void F77_cherk(int *order, char *uplow, char *transp, int *n, int *k,
void F77_cherk(int *layout, char *uplow, char *transp, int *n, int *k,
float *alpha, CBLAS_TEST_COMPLEX *a, int *lda,
float *beta, CBLAS_TEST_COMPLEX *c, int *ldc ) {
float *beta, CBLAS_TEST_COMPLEX *c, int *ldc
#ifdef BLAS_FORTRAN_STRLEN_END
, FORTRAN_STRLEN uplow_len, FORTRAN_STRLEN transp_len
#endif
) {

int i,j,LDA,LDC;
CBLAS_TEST_COMPLEX *A, *C;
enum CBLAS_UPLO uplo;
enum CBLAS_TRANSPOSE trans;
CBLAS_UPLO uplo;
CBLAS_TRANSPOSE trans;

get_uplo_type(uplow,&uplo);
get_transpose_type(transp,&trans);

if (*order == TEST_ROW_MJR) {
if (*layout == TEST_ROW_MJR) {
if (trans == CblasNoTrans) {
LDA = *k+1;
A=(CBLAS_TEST_COMPLEX* )malloc((*n)*LDA*sizeof(CBLAS_TEST_COMPLEX ) );
@@ -256,7 +351,7 @@ void F77_cherk(int *order, char *uplow, char *transp, int *n, int *k,
free(A);
free(C);
}
else if (*order == TEST_COL_MJR)
else if (*layout == TEST_COL_MJR)
cblas_cherk(CblasColMajor, uplo, trans, *n, *k, *alpha, a, *lda, *beta,
c, *ldc );
else
@@ -264,19 +359,23 @@ void F77_cherk(int *order, char *uplow, char *transp, int *n, int *k,
c, *ldc );
}

void F77_csyrk(int *order, char *uplow, char *transp, int *n, int *k,
void F77_csyrk(int *layout, char *uplow, char *transp, int *n, int *k,
CBLAS_TEST_COMPLEX *alpha, CBLAS_TEST_COMPLEX *a, int *lda,
CBLAS_TEST_COMPLEX *beta, CBLAS_TEST_COMPLEX *c, int *ldc ) {
CBLAS_TEST_COMPLEX *beta, CBLAS_TEST_COMPLEX *c, int *ldc
#ifdef BLAS_FORTRAN_STRLEN_END
, FORTRAN_STRLEN uplow_len, FORTRAN_STRLEN transp_len
#endif
) {

int i,j,LDA,LDC;
CBLAS_TEST_COMPLEX *A, *C;
enum CBLAS_UPLO uplo;
enum CBLAS_TRANSPOSE trans;
CBLAS_UPLO uplo;
CBLAS_TRANSPOSE trans;

get_uplo_type(uplow,&uplo);
get_transpose_type(transp,&trans);

if (*order == TEST_ROW_MJR) {
if (*layout == TEST_ROW_MJR) {
if (trans == CblasNoTrans) {
LDA = *k+1;
A=(CBLAS_TEST_COMPLEX* )malloc((*n)*LDA*sizeof(CBLAS_TEST_COMPLEX));
@@ -312,26 +411,30 @@ void F77_csyrk(int *order, char *uplow, char *transp, int *n, int *k,
free(A);
free(C);
}
else if (*order == TEST_COL_MJR)
else if (*layout == TEST_COL_MJR)
cblas_csyrk(CblasColMajor, uplo, trans, *n, *k, alpha, a, *lda, beta,
c, *ldc );
else
cblas_csyrk(UNDEFINED, uplo, trans, *n, *k, alpha, a, *lda, beta,
c, *ldc );
}
void F77_cher2k(int *order, char *uplow, char *transp, int *n, int *k,
void F77_cher2k(int *layout, char *uplow, char *transp, int *n, int *k,
CBLAS_TEST_COMPLEX *alpha, CBLAS_TEST_COMPLEX *a, int *lda,
CBLAS_TEST_COMPLEX *b, int *ldb, float *beta,
CBLAS_TEST_COMPLEX *c, int *ldc ) {
CBLAS_TEST_COMPLEX *c, int *ldc
#ifdef BLAS_FORTRAN_STRLEN_END
, FORTRAN_STRLEN uplow_len, FORTRAN_STRLEN transp_len
#endif
) {
int i,j,LDA,LDB,LDC;
CBLAS_TEST_COMPLEX *A, *B, *C;
enum CBLAS_UPLO uplo;
enum CBLAS_TRANSPOSE trans;
CBLAS_UPLO uplo;
CBLAS_TRANSPOSE trans;

get_uplo_type(uplow,&uplo);
get_transpose_type(transp,&trans);

if (*order == TEST_ROW_MJR) {
if (*layout == TEST_ROW_MJR) {
if (trans == CblasNoTrans) {
LDA = *k+1;
LDB = *k+1;
@@ -376,26 +479,30 @@ void F77_cher2k(int *order, char *uplow, char *transp, int *n, int *k,
free(B);
free(C);
}
else if (*order == TEST_COL_MJR)
else if (*layout == TEST_COL_MJR)
cblas_cher2k(CblasColMajor, uplo, trans, *n, *k, alpha, a, *lda,
b, *ldb, *beta, c, *ldc );
else
cblas_cher2k(UNDEFINED, uplo, trans, *n, *k, alpha, a, *lda,
b, *ldb, *beta, c, *ldc );
}
void F77_csyr2k(int *order, char *uplow, char *transp, int *n, int *k,
void F77_csyr2k(int *layout, char *uplow, char *transp, int *n, int *k,
CBLAS_TEST_COMPLEX *alpha, CBLAS_TEST_COMPLEX *a, int *lda,
CBLAS_TEST_COMPLEX *b, int *ldb, CBLAS_TEST_COMPLEX *beta,
CBLAS_TEST_COMPLEX *c, int *ldc ) {
CBLAS_TEST_COMPLEX *c, int *ldc
#ifdef BLAS_FORTRAN_STRLEN_END
, FORTRAN_STRLEN uplow_len, FORTRAN_STRLEN transp_len
#endif
) {
int i,j,LDA,LDB,LDC;
CBLAS_TEST_COMPLEX *A, *B, *C;
enum CBLAS_UPLO uplo;
enum CBLAS_TRANSPOSE trans;
CBLAS_UPLO uplo;
CBLAS_TRANSPOSE trans;

get_uplo_type(uplow,&uplo);
get_transpose_type(transp,&trans);

if (*order == TEST_ROW_MJR) {
if (*layout == TEST_ROW_MJR) {
if (trans == CblasNoTrans) {
LDA = *k+1;
LDB = *k+1;
@@ -440,29 +547,33 @@ void F77_csyr2k(int *order, char *uplow, char *transp, int *n, int *k,
free(B);
free(C);
}
else if (*order == TEST_COL_MJR)
else if (*layout == TEST_COL_MJR)
cblas_csyr2k(CblasColMajor, uplo, trans, *n, *k, alpha, a, *lda,
b, *ldb, beta, c, *ldc );
else
cblas_csyr2k(UNDEFINED, uplo, trans, *n, *k, alpha, a, *lda,
b, *ldb, beta, c, *ldc );
}
void F77_ctrmm(int *order, char *rtlf, char *uplow, char *transp, char *diagn,
void F77_ctrmm(int *layout, char *rtlf, char *uplow, char *transp, char *diagn,
int *m, int *n, CBLAS_TEST_COMPLEX *alpha, CBLAS_TEST_COMPLEX *a,
int *lda, CBLAS_TEST_COMPLEX *b, int *ldb) {
int *lda, CBLAS_TEST_COMPLEX *b, int *ldb
#ifdef BLAS_FORTRAN_STRLEN_END
, FORTRAN_STRLEN rtlf_len, FORTRAN_STRLEN uplow_len, FORTRAN_STRLEN transp_len, FORTRAN_STRLEN diagn_len
#endif
) {
int i,j,LDA,LDB;
CBLAS_TEST_COMPLEX *A, *B;
enum CBLAS_SIDE side;
enum CBLAS_DIAG diag;
enum CBLAS_UPLO uplo;
enum CBLAS_TRANSPOSE trans;
CBLAS_SIDE side;
CBLAS_DIAG diag;
CBLAS_UPLO uplo;
CBLAS_TRANSPOSE trans;

get_uplo_type(uplow,&uplo);
get_transpose_type(transp,&trans);
get_diag_type(diagn,&diag);
get_side_type(rtlf,&side);

if (*order == TEST_ROW_MJR) {
if (*layout == TEST_ROW_MJR) {
if (side == CblasLeft) {
LDA = *m+1;
A=(CBLAS_TEST_COMPLEX* )malloc((*m)*LDA*sizeof(CBLAS_TEST_COMPLEX));
@@ -498,7 +609,7 @@ void F77_ctrmm(int *order, char *rtlf, char *uplow, char *transp, char *diagn,
free(A);
free(B);
}
else if (*order == TEST_COL_MJR)
else if (*layout == TEST_COL_MJR)
cblas_ctrmm(CblasColMajor, side, uplo, trans, diag, *m, *n, alpha,
a, *lda, b, *ldb);
else
@@ -506,22 +617,26 @@ void F77_ctrmm(int *order, char *rtlf, char *uplow, char *transp, char *diagn,
a, *lda, b, *ldb);
}

void F77_ctrsm(int *order, char *rtlf, char *uplow, char *transp, char *diagn,
void F77_ctrsm(int *layout, char *rtlf, char *uplow, char *transp, char *diagn,
int *m, int *n, CBLAS_TEST_COMPLEX *alpha, CBLAS_TEST_COMPLEX *a,
int *lda, CBLAS_TEST_COMPLEX *b, int *ldb) {
int *lda, CBLAS_TEST_COMPLEX *b, int *ldb
#ifdef BLAS_FORTRAN_STRLEN_END
, FORTRAN_STRLEN rtlf_len, FORTRAN_STRLEN uplow_len, FORTRAN_STRLEN transp_len, FORTRAN_STRLEN diagn_len
#endif
) {
int i,j,LDA,LDB;
CBLAS_TEST_COMPLEX *A, *B;
enum CBLAS_SIDE side;
enum CBLAS_DIAG diag;
enum CBLAS_UPLO uplo;
enum CBLAS_TRANSPOSE trans;
CBLAS_SIDE side;
CBLAS_DIAG diag;
CBLAS_UPLO uplo;
CBLAS_TRANSPOSE trans;

get_uplo_type(uplow,&uplo);
get_transpose_type(transp,&trans);
get_diag_type(diagn,&diag);
get_side_type(rtlf,&side);

if (*order == TEST_ROW_MJR) {
if (*layout == TEST_ROW_MJR) {
if (side == CblasLeft) {
LDA = *m+1;
A=(CBLAS_TEST_COMPLEX* )malloc( (*m)*LDA*sizeof(CBLAS_TEST_COMPLEX ) );
@@ -557,13 +672,10 @@ void F77_ctrsm(int *order, char *rtlf, char *uplow, char *transp, char *diagn,
free(A);
free(B);
}
else if (*order == TEST_COL_MJR)
else if (*layout == TEST_COL_MJR)
cblas_ctrsm(CblasColMajor, side, uplo, trans, diag, *m, *n, alpha,
a, *lda, b, *ldb);
else
cblas_ctrsm(UNDEFINED, side, uplo, trans, diag, *m, *n, alpha,
a, *lda, b, *ldb);
}




+ 653
- 103
ctest/c_cblat3.f
File diff suppressed because it is too large
View File


+ 166
- 64
ctest/c_dblas3.c View File

@@ -5,55 +5,58 @@
* Modified by T. H. Do, 2/19/98, SGI/CRAY Research.
*/
#include <stdlib.h>
#include "common.h"
#include "cblas.h"
#include "cblas_test.h"

#define TEST_COL_MJR 0
#define TEST_ROW_MJR 1
#define UNDEFINED -1

void F77_dgemm(int *order, char *transpa, char *transpb, int *m, int *n,
void F77_dgemm(int *layout, char *transpa, char *transpb, int *m, int *n,
int *k, double *alpha, double *a, int *lda, double *b, int *ldb,
double *beta, double *c, int *ldc ) {
double *beta, double *c, int *ldc
#ifdef BLAS_FORTRAN_STRLEN_END
, FORTRAN_STRLEN transpa_len, FORTRAN_STRLEN transpb_len
#endif
) {

double *A, *B, *C;
int i,j,LDA, LDB, LDC;
enum CBLAS_TRANSPOSE transa, transb;
CBLAS_TRANSPOSE transa, transb;

get_transpose_type(transpa, &transa);
get_transpose_type(transpb, &transb);

if (*order == TEST_ROW_MJR) {
if (*layout == TEST_ROW_MJR) {
if (transa == CblasNoTrans) {
LDA = *k+1;
A = (double *)malloc( (*m)*(size_t)LDA*sizeof( double ) );
A = (double *)malloc( (*m)*LDA*sizeof( double ) );
for( i=0; i<*m; i++ )
for( j=0; j<*k; j++ )
A[i*LDA+j]=a[j*(*lda)+i];
}
else {
LDA = *m+1;
A = ( double* )malloc( (size_t)LDA*(*k)*sizeof( double ) );
A = ( double* )malloc( LDA*(*k)*sizeof( double ) );
for( i=0; i<*k; i++ )
for( j=0; j<*m; j++ )
A[i*LDA+j]=a[j*(*lda)+i];
}
if (transb == CblasNoTrans) {
LDB = *n+1;
B = ( double* )malloc( (*k)*(size_t)LDB*sizeof( double ) );
B = ( double* )malloc( (*k)*LDB*sizeof( double ) );
for( i=0; i<*k; i++ )
for( j=0; j<*n; j++ )
B[i*LDB+j]=b[j*(*ldb)+i];
}
else {
LDB = *k+1;
B = ( double* )malloc( (size_t)LDB*(*n)*sizeof( double ) );
B = ( double* )malloc( LDB*(*n)*sizeof( double ) );
for( i=0; i<*n; i++ )
for( j=0; j<*k; j++ )
B[i*LDB+j]=b[j*(*ldb)+i];
}
LDC = *n+1;
C = ( double* )malloc( (*m)*(size_t)LDC*sizeof( double ) );
C = ( double* )malloc( (*m)*LDC*sizeof( double ) );
for( j=0; j<*n; j++ )
for( i=0; i<*m; i++ )
C[i*LDC+j]=c[j*(*ldc)+i];
@@ -67,47 +70,130 @@ void F77_dgemm(int *order, char *transpa, char *transpb, int *m, int *n,
free(B);
free(C);
}
else if (*order == TEST_COL_MJR)
else if (*layout == TEST_COL_MJR)
cblas_dgemm( CblasColMajor, transa, transb, *m, *n, *k, *alpha, a, *lda,
b, *ldb, *beta, c, *ldc );
else
cblas_dgemm( UNDEFINED, transa, transb, *m, *n, *k, *alpha, a, *lda,
b, *ldb, *beta, c, *ldc );
}
void F77_dsymm(int *order, char *rtlf, char *uplow, int *m, int *n,

void F77_dgemmtr(int *layout, char *uplop, char *transpa, char *transpb, int *n,
int *k, double *alpha, double *a, int *lda,
double *b, int *ldb, double *beta,
double *c, int *ldc ) {

double *A, *B, *C;
int i,j,LDA, LDB, LDC;
CBLAS_TRANSPOSE transa, transb;
CBLAS_UPLO uplo;

get_transpose_type(transpa, &transa);
get_transpose_type(transpb, &transb);
get_uplo_type(uplop, &uplo);

if (*layout == TEST_ROW_MJR) {
if (transa == CblasNoTrans) {
LDA = *k+1;
A=(double*)malloc((*n)*LDA*sizeof(double));
for( i=0; i<*n; i++ )
for( j=0; j<*k; j++ ) {
A[i*LDA+j]=a[j*(*lda)+i];
}
}
else {
LDA = *n+1;
A=(double* )malloc(LDA*(*k)*sizeof(double));
for( i=0; i<*k; i++ )
for( j=0; j<*n; j++ ) {
A[i*LDA+j]=a[j*(*lda)+i];
}
}

if (transb == CblasNoTrans) {
LDB = *n+1;
B=(double* )malloc((*k)*LDB*sizeof(double) );
for( i=0; i<*k; i++ )
for( j=0; j<*n; j++ ) {
B[i*LDB+j]=b[j*(*ldb)+i];
}
}
else {
LDB = *k+1;
B=(double* )malloc(LDB*(*n)*sizeof(double));
for( i=0; i<*n; i++ )
for( j=0; j<*k; j++ ) {
B[i*LDB+j]=b[j*(*ldb)+i];
}
}

LDC = *n+1;
C=(double* )malloc((*n)*LDC*sizeof(double));
for( j=0; j<*n; j++ )
for( i=0; i<*n; i++ ) {
C[i*LDC+j]=c[j*(*ldc)+i];
}
cblas_dgemmtr( CblasRowMajor, uplo, transa, transb, *n, *k, *alpha, A, LDA,
B, LDB, *beta, C, LDC );
for( j=0; j<*n; j++ )
for( i=0; i<*n; i++ ) {
c[j*(*ldc)+i]=C[i*LDC+j];
}
free(A);
free(B);
free(C);
}
else if (*layout == TEST_COL_MJR){
cblas_dgemmtr( CblasColMajor, uplo, transa, transb, *n, *k, *alpha, a, *lda,
b, *ldb, *beta, c, *ldc );
}
else
cblas_dgemmtr( UNDEFINED, uplo, transa, transb, *n, *k, *alpha, a, *lda,
b, *ldb, *beta, c, *ldc );
}





void F77_dsymm(int *layout, char *rtlf, char *uplow, int *m, int *n,
double *alpha, double *a, int *lda, double *b, int *ldb,
double *beta, double *c, int *ldc ) {
double *beta, double *c, int *ldc
#ifdef BLAS_FORTRAN_STRLEN_END
, FORTRAN_STRLEN rtlf_len, FORTRAN_STRLEN uplow_len
#endif
) {

double *A, *B, *C;
int i,j,LDA, LDB, LDC;
enum CBLAS_UPLO uplo;
enum CBLAS_SIDE side;
CBLAS_UPLO uplo;
CBLAS_SIDE side;

get_uplo_type(uplow,&uplo);
get_side_type(rtlf,&side);

if (*order == TEST_ROW_MJR) {
if (*layout == TEST_ROW_MJR) {
if (side == CblasLeft) {
LDA = *m+1;
A = ( double* )malloc( (*m)*(size_t)LDA*sizeof( double ) );
A = ( double* )malloc( (*m)*LDA*sizeof( double ) );
for( i=0; i<*m; i++ )
for( j=0; j<*m; j++ )
A[i*LDA+j]=a[j*(*lda)+i];
}
else{
LDA = *n+1;
A = ( double* )malloc( (*n)*(size_t)LDA*sizeof( double ) );
A = ( double* )malloc( (*n)*LDA*sizeof( double ) );
for( i=0; i<*n; i++ )
for( j=0; j<*n; j++ )
A[i*LDA+j]=a[j*(*lda)+i];
}
LDB = *n+1;
B = ( double* )malloc( (*m)*(size_t)LDB*sizeof( double ) );
B = ( double* )malloc( (*m)*LDB*sizeof( double ) );
for( i=0; i<*m; i++ )
for( j=0; j<*n; j++ )
B[i*LDB+j]=b[j*(*ldb)+i];
LDC = *n+1;
C = ( double* )malloc( (*m)*(size_t)LDC*sizeof( double ) );
C = ( double* )malloc( (*m)*LDC*sizeof( double ) );
for( j=0; j<*n; j++ )
for( i=0; i<*m; i++ )
C[i*LDC+j]=c[j*(*ldc)+i];
@@ -120,7 +206,7 @@ void F77_dsymm(int *order, char *rtlf, char *uplow, int *m, int *n,
free(B);
free(C);
}
else if (*order == TEST_COL_MJR)
else if (*layout == TEST_COL_MJR)
cblas_dsymm( CblasColMajor, side, uplo, *m, *n, *alpha, a, *lda, b, *ldb,
*beta, c, *ldc );
else
@@ -128,35 +214,39 @@ void F77_dsymm(int *order, char *rtlf, char *uplow, int *m, int *n,
*beta, c, *ldc );
}

void F77_dsyrk(int *order, char *uplow, char *transp, int *n, int *k,
void F77_dsyrk(int *layout, char *uplow, char *transp, int *n, int *k,
double *alpha, double *a, int *lda,
double *beta, double *c, int *ldc ) {
double *beta, double *c, int *ldc
#ifdef BLAS_FORTRAN_STRLEN_END
, FORTRAN_STRLEN uplow_len, FORTRAN_STRLEN transp_len
#endif
) {

int i,j,LDA,LDC;
double *A, *C;
enum CBLAS_UPLO uplo;
enum CBLAS_TRANSPOSE trans;
CBLAS_UPLO uplo;
CBLAS_TRANSPOSE trans;

get_uplo_type(uplow,&uplo);
get_transpose_type(transp,&trans);

if (*order == TEST_ROW_MJR) {
if (*layout == TEST_ROW_MJR) {
if (trans == CblasNoTrans) {
LDA = *k+1;
A = ( double* )malloc( (*n)*(size_t)LDA*sizeof( double ) );
A = ( double* )malloc( (*n)*LDA*sizeof( double ) );
for( i=0; i<*n; i++ )
for( j=0; j<*k; j++ )
A[i*LDA+j]=a[j*(*lda)+i];
}
else{
LDA = *n+1;
A = ( double* )malloc( (*k)*(size_t)LDA*sizeof( double ) );
A = ( double* )malloc( (*k)*LDA*sizeof( double ) );
for( i=0; i<*k; i++ )
for( j=0; j<*n; j++ )
A[i*LDA+j]=a[j*(*lda)+i];
}
LDC = *n+1;
C = ( double* )malloc( (*n)*(size_t)LDC*sizeof( double ) );
C = ( double* )malloc( (*n)*LDC*sizeof( double ) );
for( i=0; i<*n; i++ )
for( j=0; j<*n; j++ )
C[i*LDC+j]=c[j*(*ldc)+i];
@@ -168,7 +258,7 @@ void F77_dsyrk(int *order, char *uplow, char *transp, int *n, int *k,
free(A);
free(C);
}
else if (*order == TEST_COL_MJR)
else if (*layout == TEST_COL_MJR)
cblas_dsyrk(CblasColMajor, uplo, trans, *n, *k, *alpha, a, *lda, *beta,
c, *ldc );
else
@@ -176,23 +266,27 @@ void F77_dsyrk(int *order, char *uplow, char *transp, int *n, int *k,
c, *ldc );
}

void F77_dsyr2k(int *order, char *uplow, char *transp, int *n, int *k,
void F77_dsyr2k(int *layout, char *uplow, char *transp, int *n, int *k,
double *alpha, double *a, int *lda, double *b, int *ldb,
double *beta, double *c, int *ldc ) {
double *beta, double *c, int *ldc
#ifdef BLAS_FORTRAN_STRLEN_END
, FORTRAN_STRLEN uplow_len, FORTRAN_STRLEN transp_len
#endif
) {
int i,j,LDA,LDB,LDC;
double *A, *B, *C;
enum CBLAS_UPLO uplo;
enum CBLAS_TRANSPOSE trans;
CBLAS_UPLO uplo;
CBLAS_TRANSPOSE trans;

get_uplo_type(uplow,&uplo);
get_transpose_type(transp,&trans);

if (*order == TEST_ROW_MJR) {
if (*layout == TEST_ROW_MJR) {
if (trans == CblasNoTrans) {
LDA = *k+1;
LDB = *k+1;
A = ( double* )malloc( (*n)*(size_t)LDA*sizeof( double ) );
B = ( double* )malloc( (*n)*(size_t)LDB*sizeof( double ) );
A = ( double* )malloc( (*n)*LDA*sizeof( double ) );
B = ( double* )malloc( (*n)*LDB*sizeof( double ) );
for( i=0; i<*n; i++ )
for( j=0; j<*k; j++ ) {
A[i*LDA+j]=a[j*(*lda)+i];
@@ -202,8 +296,8 @@ void F77_dsyr2k(int *order, char *uplow, char *transp, int *n, int *k,
else {
LDA = *n+1;
LDB = *n+1;
A = ( double* )malloc( (size_t)LDA*(*k)*sizeof( double ) );
B = ( double* )malloc( (size_t)LDB*(*k)*sizeof( double ) );
A = ( double* )malloc( LDA*(*k)*sizeof( double ) );
B = ( double* )malloc( LDB*(*k)*sizeof( double ) );
for( i=0; i<*k; i++ )
for( j=0; j<*n; j++ ){
A[i*LDA+j]=a[j*(*lda)+i];
@@ -211,7 +305,7 @@ void F77_dsyr2k(int *order, char *uplow, char *transp, int *n, int *k,
}
}
LDC = *n+1;
C = ( double* )malloc( (*n)*(size_t)LDC*sizeof( double ) );
C = ( double* )malloc( (*n)*LDC*sizeof( double ) );
for( i=0; i<*n; i++ )
for( j=0; j<*n; j++ )
C[i*LDC+j]=c[j*(*ldc)+i];
@@ -224,45 +318,49 @@ void F77_dsyr2k(int *order, char *uplow, char *transp, int *n, int *k,
free(B);
free(C);
}
else if (*order == TEST_COL_MJR)
else if (*layout == TEST_COL_MJR)
cblas_dsyr2k(CblasColMajor, uplo, trans, *n, *k, *alpha, a, *lda,
b, *ldb, *beta, c, *ldc );
else
cblas_dsyr2k(UNDEFINED, uplo, trans, *n, *k, *alpha, a, *lda,
b, *ldb, *beta, c, *ldc );
}
void F77_dtrmm(int *order, char *rtlf, char *uplow, char *transp, char *diagn,
void F77_dtrmm(int *layout, char *rtlf, char *uplow, char *transp, char *diagn,
int *m, int *n, double *alpha, double *a, int *lda, double *b,
int *ldb) {
int *ldb
#ifdef BLAS_FORTRAN_STRLEN_END
, FORTRAN_STRLEN rtlf_len, FORTRAN_STRLEN uplow_len, FORTRAN_STRLEN transp_len, FORTRAN_STRLEN diag_len
#endif
) {
int i,j,LDA,LDB;
double *A, *B;
enum CBLAS_SIDE side;
enum CBLAS_DIAG diag;
enum CBLAS_UPLO uplo;
enum CBLAS_TRANSPOSE trans;
CBLAS_SIDE side;
CBLAS_DIAG diag;
CBLAS_UPLO uplo;
CBLAS_TRANSPOSE trans;

get_uplo_type(uplow,&uplo);
get_transpose_type(transp,&trans);
get_diag_type(diagn,&diag);
get_side_type(rtlf,&side);

if (*order == TEST_ROW_MJR) {
if (*layout == TEST_ROW_MJR) {
if (side == CblasLeft) {
LDA = *m+1;
A = ( double* )malloc( (*m)*(size_t)LDA*sizeof( double ) );
A = ( double* )malloc( (*m)*LDA*sizeof( double ) );
for( i=0; i<*m; i++ )
for( j=0; j<*m; j++ )
A[i*LDA+j]=a[j*(*lda)+i];
}
else{
LDA = *n+1;
A = ( double* )malloc( (*n)*(size_t)LDA*sizeof( double ) );
A = ( double* )malloc( (*n)*LDA*sizeof( double ) );
for( i=0; i<*n; i++ )
for( j=0; j<*n; j++ )
A[i*LDA+j]=a[j*(*lda)+i];
}
LDB = *n+1;
B = ( double* )malloc( (*m)*(size_t)LDB*sizeof( double ) );
B = ( double* )malloc( (*m)*LDB*sizeof( double ) );
for( i=0; i<*m; i++ )
for( j=0; j<*n; j++ )
B[i*LDB+j]=b[j*(*ldb)+i];
@@ -274,7 +372,7 @@ void F77_dtrmm(int *order, char *rtlf, char *uplow, char *transp, char *diagn,
free(A);
free(B);
}
else if (*order == TEST_COL_MJR)
else if (*layout == TEST_COL_MJR)
cblas_dtrmm(CblasColMajor, side, uplo, trans, diag, *m, *n, *alpha,
a, *lda, b, *ldb);
else
@@ -282,38 +380,42 @@ void F77_dtrmm(int *order, char *rtlf, char *uplow, char *transp, char *diagn,
a, *lda, b, *ldb);
}

void F77_dtrsm(int *order, char *rtlf, char *uplow, char *transp, char *diagn,
void F77_dtrsm(int *layout, char *rtlf, char *uplow, char *transp, char *diagn,
int *m, int *n, double *alpha, double *a, int *lda, double *b,
int *ldb) {
int *ldb
#ifdef BLAS_FORTRAN_STRLEN_END
, FORTRAN_STRLEN rtlf_len, FORTRAN_STRLEN uplow_len, FORTRAN_STRLEN transp_len, FORTRAN_STRLEN diagn_len
#endif
) {
int i,j,LDA,LDB;
double *A, *B;
enum CBLAS_SIDE side;
enum CBLAS_DIAG diag;
enum CBLAS_UPLO uplo;
enum CBLAS_TRANSPOSE trans;
CBLAS_SIDE side;
CBLAS_DIAG diag;
CBLAS_UPLO uplo;
CBLAS_TRANSPOSE trans;

get_uplo_type(uplow,&uplo);
get_transpose_type(transp,&trans);
get_diag_type(diagn,&diag);
get_side_type(rtlf,&side);

if (*order == TEST_ROW_MJR) {
if (*layout == TEST_ROW_MJR) {
if (side == CblasLeft) {
LDA = *m+1;
A = ( double* )malloc( (*m)*(size_t)LDA*sizeof( double ) );
A = ( double* )malloc( (*m)*LDA*sizeof( double ) );
for( i=0; i<*m; i++ )
for( j=0; j<*m; j++ )
A[i*LDA+j]=a[j*(*lda)+i];
}
else{
LDA = *n+1;
A = ( double* )malloc( (*n)*(size_t)LDA*sizeof( double ) );
A = ( double* )malloc( (*n)*LDA*sizeof( double ) );
for( i=0; i<*n; i++ )
for( j=0; j<*n; j++ )
A[i*LDA+j]=a[j*(*lda)+i];
}
LDB = *n+1;
B = ( double* )malloc( (*m)*(size_t)LDB*sizeof( double ) );
B = ( double* )malloc( (*m)*LDB*sizeof( double ) );
for( i=0; i<*m; i++ )
for( j=0; j<*n; j++ )
B[i*LDB+j]=b[j*(*ldb)+i];
@@ -325,7 +427,7 @@ void F77_dtrsm(int *order, char *rtlf, char *uplow, char *transp, char *diagn,
free(A);
free(B);
}
else if (*order == TEST_COL_MJR)
else if (*layout == TEST_COL_MJR)
cblas_dtrsm(CblasColMajor, side, uplo, trans, diag, *m, *n, *alpha,
a, *lda, b, *ldb);
else


+ 575
- 90
ctest/c_dblat3.f
File diff suppressed because it is too large
View File


+ 163
- 63
ctest/c_sblas3.c View File

@@ -6,51 +6,55 @@
*/
#include <stdio.h>
#include <stdlib.h>
#include "common.h"
#include "cblas.h"
#include "cblas_test.h"

void F77_sgemm(int *order, char *transpa, char *transpb, int *m, int *n,
void F77_sgemm(int *layout, char *transpa, char *transpb, int *m, int *n,
int *k, float *alpha, float *a, int *lda, float *b, int *ldb,
float *beta, float *c, int *ldc ) {
float *beta, float *c, int *ldc
#ifdef BLAS_FORTRAN_STRLEN_END
, FORTRAN_STRLEN transpa_len, FORTRAN_STRLEN transpb_len
#endif
) {

float *A, *B, *C;
int i,j,LDA, LDB, LDC;
enum CBLAS_TRANSPOSE transa, transb;
CBLAS_TRANSPOSE transa, transb;

get_transpose_type(transpa, &transa);
get_transpose_type(transpb, &transb);

if (*order == TEST_ROW_MJR) {
if (*layout == TEST_ROW_MJR) {
if (transa == CblasNoTrans) {
LDA = *k+1;
A = (float *)malloc( (*m)*(size_t)LDA*sizeof( float ) );
A = (float *)malloc( (*m)*LDA*sizeof( float ) );
for( i=0; i<*m; i++ )
for( j=0; j<*k; j++ )
A[i*LDA+j]=a[j*(*lda)+i];
}
else {
LDA = *m+1;
A = ( float* )malloc( (size_t)LDA*(*k)*sizeof( float ) );
A = ( float* )malloc( LDA*(*k)*sizeof( float ) );
for( i=0; i<*k; i++ )
for( j=0; j<*m; j++ )
A[i*LDA+j]=a[j*(*lda)+i];
}
if (transb == CblasNoTrans) {
LDB = *n+1;
B = ( float* )malloc( (*k)*(size_t)LDB*sizeof( float ) );
B = ( float* )malloc( (*k)*LDB*sizeof( float ) );
for( i=0; i<*k; i++ )
for( j=0; j<*n; j++ )
B[i*LDB+j]=b[j*(*ldb)+i];
}
else {
LDB = *k+1;
B = ( float* )malloc( (size_t)LDB*(*n)*sizeof( float ) );
B = ( float* )malloc( LDB*(*n)*sizeof( float ) );
for( i=0; i<*n; i++ )
for( j=0; j<*k; j++ )
B[i*LDB+j]=b[j*(*ldb)+i];
}
LDC = *n+1;
C = ( float* )malloc( (*m)*(size_t)LDC*sizeof( float ) );
C = ( float* )malloc( (*m)*LDC*sizeof( float ) );
for( j=0; j<*n; j++ )
for( i=0; i<*m; i++ )
C[i*LDC+j]=c[j*(*ldc)+i];
@@ -63,47 +67,127 @@ void F77_sgemm(int *order, char *transpa, char *transpb, int *m, int *n,
free(B);
free(C);
}
else if (*order == TEST_COL_MJR)
else if (*layout == TEST_COL_MJR)
cblas_sgemm( CblasColMajor, transa, transb, *m, *n, *k, *alpha, a, *lda,
b, *ldb, *beta, c, *ldc );
else
cblas_sgemm( UNDEFINED, transa, transb, *m, *n, *k, *alpha, a, *lda,
b, *ldb, *beta, c, *ldc );
}
void F77_ssymm(int *order, char *rtlf, char *uplow, int *m, int *n,

void F77_sgemmtr(int *layout, char *uplop, char *transpa, char *transpb, int *n,
int *k, float *alpha, float *a, int *lda,
float *b, int *ldb, float *beta,
float *c, int *ldc ) {

float *A, *B, *C;
int i,j,LDA, LDB, LDC;
CBLAS_TRANSPOSE transa, transb;
CBLAS_UPLO uplo;

get_transpose_type(transpa, &transa);
get_transpose_type(transpb, &transb);
get_uplo_type(uplop, &uplo);

if (*layout == TEST_ROW_MJR) {
if (transa == CblasNoTrans) {
LDA = *k+1;
A=(float*)malloc((*n)*LDA*sizeof(float));
for( i=0; i<*n; i++ )
for( j=0; j<*k; j++ ) {
A[i*LDA+j]=a[j*(*lda)+i];
}
}
else {
LDA = *n+1;
A=(float* )malloc(LDA*(*k)*sizeof(float));
for( i=0; i<*k; i++ )
for( j=0; j<*n; j++ ) {
A[i*LDA+j]=a[j*(*lda)+i];
}
}

if (transb == CblasNoTrans) {
LDB = *n+1;
B=(float* )malloc((*k)*LDB*sizeof(float) );
for( i=0; i<*k; i++ )
for( j=0; j<*n; j++ ) {
B[i*LDB+j]=b[j*(*ldb)+i];
}
}
else {
LDB = *k+1;
B=(float* )malloc(LDB*(*n)*sizeof(float));
for( i=0; i<*n; i++ )
for( j=0; j<*k; j++ ) {
B[i*LDB+j]=b[j*(*ldb)+i];
}
}

LDC = *n+1;
C=(float* )malloc((*n)*LDC*sizeof(float));
for( j=0; j<*n; j++ )
for( i=0; i<*n; i++ ) {
C[i*LDC+j]=c[j*(*ldc)+i];
}
cblas_sgemmtr( CblasRowMajor, uplo, transa, transb, *n, *k, *alpha, A, LDA,
B, LDB, *beta, C, LDC );
for( j=0; j<*n; j++ )
for( i=0; i<*n; i++ ) {
c[j*(*ldc)+i]=C[i*LDC+j];
}
free(A);
free(B);
free(C);
}
else if (*layout == TEST_COL_MJR)
cblas_sgemmtr( CblasColMajor, uplo, transa, transb, *n, *k, *alpha, a, *lda,
b, *ldb, *beta, c, *ldc );
else
cblas_sgemmtr( UNDEFINED, uplo, transa, transb, *n, *k, *alpha, a, *lda,
b, *ldb, *beta, c, *ldc );
}



void F77_ssymm(int *layout, char *rtlf, char *uplow, int *m, int *n,
float *alpha, float *a, int *lda, float *b, int *ldb,
float *beta, float *c, int *ldc ) {
float *beta, float *c, int *ldc
#ifdef BLAS_FORTRAN_STRLEN_END
, FORTRAN_STRLEN rtlf_len, FORTRAN_STRLEN uplow_len
#endif
) {

float *A, *B, *C;
int i,j,LDA, LDB, LDC;
enum CBLAS_UPLO uplo;
enum CBLAS_SIDE side;
CBLAS_UPLO uplo;
CBLAS_SIDE side;

get_uplo_type(uplow,&uplo);
get_side_type(rtlf,&side);

if (*order == TEST_ROW_MJR) {
if (*layout == TEST_ROW_MJR) {
if (side == CblasLeft) {
LDA = *m+1;
A = ( float* )malloc( (*m)*(size_t)LDA*sizeof( float ) );
A = ( float* )malloc( (*m)*LDA*sizeof( float ) );
for( i=0; i<*m; i++ )
for( j=0; j<*m; j++ )
A[i*LDA+j]=a[j*(*lda)+i];
}
else{
LDA = *n+1;
A = ( float* )malloc( (*n)*(size_t)LDA*sizeof( float ) );
A = ( float* )malloc( (*n)*LDA*sizeof( float ) );
for( i=0; i<*n; i++ )
for( j=0; j<*n; j++ )
A[i*LDA+j]=a[j*(*lda)+i];
}
LDB = *n+1;
B = ( float* )malloc( (*m)*(size_t)LDB*sizeof( float ) );
B = ( float* )malloc( (*m)*LDB*sizeof( float ) );
for( i=0; i<*m; i++ )
for( j=0; j<*n; j++ )
B[i*LDB+j]=b[j*(*ldb)+i];
LDC = *n+1;
C = ( float* )malloc( (*m)*(size_t)LDC*sizeof( float ) );
C = ( float* )malloc( (*m)*LDC*sizeof( float ) );
for( j=0; j<*n; j++ )
for( i=0; i<*m; i++ )
C[i*LDC+j]=c[j*(*ldc)+i];
@@ -116,7 +200,7 @@ void F77_ssymm(int *order, char *rtlf, char *uplow, int *m, int *n,
free(B);
free(C);
}
else if (*order == TEST_COL_MJR)
else if (*layout == TEST_COL_MJR)
cblas_ssymm( CblasColMajor, side, uplo, *m, *n, *alpha, a, *lda, b, *ldb,
*beta, c, *ldc );
else
@@ -124,35 +208,39 @@ void F77_ssymm(int *order, char *rtlf, char *uplow, int *m, int *n,
*beta, c, *ldc );
}

void F77_ssyrk(int *order, char *uplow, char *transp, int *n, int *k,
void F77_ssyrk(int *layout, char *uplow, char *transp, int *n, int *k,
float *alpha, float *a, int *lda,
float *beta, float *c, int *ldc ) {
float *beta, float *c, int *ldc
#ifdef BLAS_FORTRAN_STRLEN_END
, FORTRAN_STRLEN uplow_len, FORTRAN_STRLEN transp_len
#endif
) {

int i,j,LDA,LDC;
float *A, *C;
enum CBLAS_UPLO uplo;
enum CBLAS_TRANSPOSE trans;
CBLAS_UPLO uplo;
CBLAS_TRANSPOSE trans;

get_uplo_type(uplow,&uplo);
get_transpose_type(transp,&trans);

if (*order == TEST_ROW_MJR) {
if (*layout == TEST_ROW_MJR) {
if (trans == CblasNoTrans) {
LDA = *k+1;
A = ( float* )malloc( (*n)*(size_t)LDA*sizeof( float ) );
A = ( float* )malloc( (*n)*LDA*sizeof( float ) );
for( i=0; i<*n; i++ )
for( j=0; j<*k; j++ )
A[i*LDA+j]=a[j*(*lda)+i];
}
else{
LDA = *n+1;
A = ( float* )malloc( (*k)*(size_t)LDA*sizeof( float ) );
A = ( float* )malloc( (*k)*LDA*sizeof( float ) );
for( i=0; i<*k; i++ )
for( j=0; j<*n; j++ )
A[i*LDA+j]=a[j*(*lda)+i];
}
LDC = *n+1;
C = ( float* )malloc( (*n)*(size_t)LDC*sizeof( float ) );
C = ( float* )malloc( (*n)*LDC*sizeof( float ) );
for( i=0; i<*n; i++ )
for( j=0; j<*n; j++ )
C[i*LDC+j]=c[j*(*ldc)+i];
@@ -164,7 +252,7 @@ void F77_ssyrk(int *order, char *uplow, char *transp, int *n, int *k,
free(A);
free(C);
}
else if (*order == TEST_COL_MJR)
else if (*layout == TEST_COL_MJR)
cblas_ssyrk(CblasColMajor, uplo, trans, *n, *k, *alpha, a, *lda, *beta,
c, *ldc );
else
@@ -172,23 +260,27 @@ void F77_ssyrk(int *order, char *uplow, char *transp, int *n, int *k,
c, *ldc );
}

void F77_ssyr2k(int *order, char *uplow, char *transp, int *n, int *k,
void F77_ssyr2k(int *layout, char *uplow, char *transp, int *n, int *k,
float *alpha, float *a, int *lda, float *b, int *ldb,
float *beta, float *c, int *ldc ) {
float *beta, float *c, int *ldc
#ifdef BLAS_FORTRAN_STRLEN_END
, FORTRAN_STRLEN uplow_len, FORTRAN_STRLEN transp_len
#endif
) {
int i,j,LDA,LDB,LDC;
float *A, *B, *C;
enum CBLAS_UPLO uplo;
enum CBLAS_TRANSPOSE trans;
CBLAS_UPLO uplo;
CBLAS_TRANSPOSE trans;

get_uplo_type(uplow,&uplo);
get_transpose_type(transp,&trans);

if (*order == TEST_ROW_MJR) {
if (*layout == TEST_ROW_MJR) {
if (trans == CblasNoTrans) {
LDA = *k+1;
LDB = *k+1;
A = ( float* )malloc( (*n)*(size_t)LDA*sizeof( float ) );
B = ( float* )malloc( (*n)*(size_t)LDB*sizeof( float ) );
A = ( float* )malloc( (*n)*LDA*sizeof( float ) );
B = ( float* )malloc( (*n)*LDB*sizeof( float ) );
for( i=0; i<*n; i++ )
for( j=0; j<*k; j++ ) {
A[i*LDA+j]=a[j*(*lda)+i];
@@ -198,8 +290,8 @@ void F77_ssyr2k(int *order, char *uplow, char *transp, int *n, int *k,
else {
LDA = *n+1;
LDB = *n+1;
A = ( float* )malloc( (size_t)LDA*(*k)*sizeof( float ) );
B = ( float* )malloc( (size_t)LDB*(*k)*sizeof( float ) );
A = ( float* )malloc( LDA*(*k)*sizeof( float ) );
B = ( float* )malloc( LDB*(*k)*sizeof( float ) );
for( i=0; i<*k; i++ )
for( j=0; j<*n; j++ ){
A[i*LDA+j]=a[j*(*lda)+i];
@@ -207,7 +299,7 @@ void F77_ssyr2k(int *order, char *uplow, char *transp, int *n, int *k,
}
}
LDC = *n+1;
C = ( float* )malloc( (*n)*(size_t)LDC*sizeof( float ) );
C = ( float* )malloc( (*n)*LDC*sizeof( float ) );
for( i=0; i<*n; i++ )
for( j=0; j<*n; j++ )
C[i*LDC+j]=c[j*(*ldc)+i];
@@ -220,45 +312,49 @@ void F77_ssyr2k(int *order, char *uplow, char *transp, int *n, int *k,
free(B);
free(C);
}
else if (*order == TEST_COL_MJR)
else if (*layout == TEST_COL_MJR)
cblas_ssyr2k(CblasColMajor, uplo, trans, *n, *k, *alpha, a, *lda,
b, *ldb, *beta, c, *ldc );
else
cblas_ssyr2k(UNDEFINED, uplo, trans, *n, *k, *alpha, a, *lda,
b, *ldb, *beta, c, *ldc );
}
void F77_strmm(int *order, char *rtlf, char *uplow, char *transp, char *diagn,
void F77_strmm(int *layout, char *rtlf, char *uplow, char *transp, char *diagn,
int *m, int *n, float *alpha, float *a, int *lda, float *b,
int *ldb) {
int *ldb
#ifdef BLAS_FORTRAN_STRLEN_END
, FORTRAN_STRLEN rtlf_len, FORTRAN_STRLEN uplow_len, FORTRAN_STRLEN transp_len, FORTRAN_STRLEN diagn_len
#endif
) {
int i,j,LDA,LDB;
float *A, *B;
enum CBLAS_SIDE side;
enum CBLAS_DIAG diag;
enum CBLAS_UPLO uplo;
enum CBLAS_TRANSPOSE trans;
CBLAS_SIDE side;
CBLAS_DIAG diag;
CBLAS_UPLO uplo;
CBLAS_TRANSPOSE trans;

get_uplo_type(uplow,&uplo);
get_transpose_type(transp,&trans);
get_diag_type(diagn,&diag);
get_side_type(rtlf,&side);

if (*order == TEST_ROW_MJR) {
if (*layout == TEST_ROW_MJR) {
if (side == CblasLeft) {
LDA = *m+1;
A = ( float* )malloc( (*m)*(size_t)LDA*sizeof( float ) );
A = ( float* )malloc( (*m)*LDA*sizeof( float ) );
for( i=0; i<*m; i++ )
for( j=0; j<*m; j++ )
A[i*LDA+j]=a[j*(*lda)+i];
}
else{
LDA = *n+1;
A = ( float* )malloc( (*n)*(size_t)LDA*sizeof( float ) );
A = ( float* )malloc( (*n)*LDA*sizeof( float ) );
for( i=0; i<*n; i++ )
for( j=0; j<*n; j++ )
A[i*LDA+j]=a[j*(*lda)+i];
}
LDB = *n+1;
B = ( float* )malloc( (*m)*(size_t)LDB*sizeof( float ) );
B = ( float* )malloc( (*m)*LDB*sizeof( float ) );
for( i=0; i<*m; i++ )
for( j=0; j<*n; j++ )
B[i*LDB+j]=b[j*(*ldb)+i];
@@ -270,7 +366,7 @@ void F77_strmm(int *order, char *rtlf, char *uplow, char *transp, char *diagn,
free(A);
free(B);
}
else if (*order == TEST_COL_MJR)
else if (*layout == TEST_COL_MJR)
cblas_strmm(CblasColMajor, side, uplo, trans, diag, *m, *n, *alpha,
a, *lda, b, *ldb);
else
@@ -278,38 +374,42 @@ void F77_strmm(int *order, char *rtlf, char *uplow, char *transp, char *diagn,
a, *lda, b, *ldb);
}

void F77_strsm(int *order, char *rtlf, char *uplow, char *transp, char *diagn,
void F77_strsm(int *layout, char *rtlf, char *uplow, char *transp, char *diagn,
int *m, int *n, float *alpha, float *a, int *lda, float *b,
int *ldb) {
int *ldb
#ifdef BLAS_FORTRAN_STRLEN_END
, FORTRAN_STRLEN rtlf_len, FORTRAN_STRLEN uplow_len, FORTRAN_STRLEN transp_len, FORTRAN_STRLEN diagn_len
#endif
) {
int i,j,LDA,LDB;
float *A, *B;
enum CBLAS_SIDE side;
enum CBLAS_DIAG diag;
enum CBLAS_UPLO uplo;
enum CBLAS_TRANSPOSE trans;
CBLAS_SIDE side;
CBLAS_DIAG diag;
CBLAS_UPLO uplo;
CBLAS_TRANSPOSE trans;

get_uplo_type(uplow,&uplo);
get_transpose_type(transp,&trans);
get_diag_type(diagn,&diag);
get_side_type(rtlf,&side);

if (*order == TEST_ROW_MJR) {
if (*layout == TEST_ROW_MJR) {
if (side == CblasLeft) {
LDA = *m+1;
A = ( float* )malloc( (*m)*(size_t)LDA*sizeof( float ) );
A = ( float* )malloc( (*m)*LDA*sizeof( float ) );
for( i=0; i<*m; i++ )
for( j=0; j<*m; j++ )
A[i*LDA+j]=a[j*(*lda)+i];
}
else{
LDA = *n+1;
A = ( float* )malloc( (*n)*(size_t)LDA*sizeof( float ) );
A = ( float* )malloc( (*n)*LDA*sizeof( float ) );
for( i=0; i<*n; i++ )
for( j=0; j<*n; j++ )
A[i*LDA+j]=a[j*(*lda)+i];
}
LDB = *n+1;
B = ( float* )malloc( (*m)*(size_t)LDB*sizeof( float ) );
B = ( float* )malloc( (*m)*LDB*sizeof( float ) );
for( i=0; i<*m; i++ )
for( j=0; j<*n; j++ )
B[i*LDB+j]=b[j*(*ldb)+i];
@@ -321,7 +421,7 @@ void F77_strsm(int *order, char *rtlf, char *uplow, char *transp, char *diagn,
free(A);
free(B);
}
else if (*order == TEST_COL_MJR)
else if (*layout == TEST_COL_MJR)
cblas_strsm(CblasColMajor, side, uplo, trans, diag, *m, *n, *alpha,
a, *lda, b, *ldb);
else


+ 569
- 81
ctest/c_sblat3.f View File

@@ -4,13 +4,13 @@
*
* The program must be driven by a short data file. The first 13 records
* of the file are read using list-directed input, the last 6 records
* are read using the format ( A12, L2 ). An annotated example of a data
* are read using the format ( A13, L2 ). An annotated example of a data
* file can be obtained by deleting the first 3 characters from the
* following 19 lines:
* 'SBLAT3.SNAP' NAME OF SNAPSHOT OUTPUT FILE
* -1 UNIT NUMBER OF SNAPSHOT FILE (NOT USED IF .LT. 0)
* F LOGICAL FLAG, T TO REWIND SNAPSHOT FILE AFTER EACH RECORD.
* F LOGICAL FLAG, T TO ERROR STOP ON FAILURES.
* F LOGICAL FLAG, T TO STOP ON FAILURES.
* T LOGICAL FLAG, T TO TEST ERROR EXITS.
* 2 0 TO TEST COLUMN-MAJOR, 1 TO TEST ROW-MAJOR, 2 TO TEST BOTH
* 16.0 THRESHOLD VALUE OF TEST RATIO
@@ -20,12 +20,14 @@
* 0.0 1.0 0.7 VALUES OF ALPHA
* 3 NUMBER OF VALUES OF BETA
* 0.0 1.0 1.3 VALUES OF BETA
* cblas_sgemm T PUT F FOR NO TEST. SAME COLUMNS.
* cblas_ssymm T PUT F FOR NO TEST. SAME COLUMNS.
* cblas_strmm T PUT F FOR NO TEST. SAME COLUMNS.
* cblas_strsm T PUT F FOR NO TEST. SAME COLUMNS.
* cblas_ssyrk T PUT F FOR NO TEST. SAME COLUMNS.
* cblas_ssyr2k T PUT F FOR NO TEST. SAME COLUMNS.
* cblas_sgemm T PUT F FOR NO TEST. SAME COLUMNS.
* cblas_ssymm T PUT F FOR NO TEST. SAME COLUMNS.
* cblas_strmm T PUT F FOR NO TEST. SAME COLUMNS.
* cblas_strsm T PUT F FOR NO TEST. SAME COLUMNS.
* cblas_ssyrk T PUT F FOR NO TEST. SAME COLUMNS.
* cblas_ssyr2k T PUT F FOR NO TEST. SAME COLUMNS.
* cblas_sgemmtr T PUT F FOR NO TEST. SAME COLUMNS.

*
* See:
*
@@ -46,7 +48,7 @@
INTEGER NIN, NOUT
PARAMETER ( NIN = 5, NOUT = 6 )
INTEGER NSUBS
PARAMETER ( NSUBS = 6 )
PARAMETER ( NSUBS = 7 )
REAL ZERO, HALF, ONE
PARAMETER ( ZERO = 0.0, HALF = 0.5, ONE = 1.0 )
INTEGER NMAX
@@ -60,7 +62,7 @@
LOGICAL FATAL, LTESTT, REWI, SAME, SFATAL, TRACE,
$ TSTERR, CORDER, RORDER
CHARACTER*1 TRANSA, TRANSB
CHARACTER*12 SNAMET
CHARACTER*13 SNAMET
CHARACTER*32 SNAPS
* .. Local Arrays ..
REAL AA( NMAX*NMAX ), AB( NMAX, 2*NMAX ),
@@ -71,27 +73,27 @@
$ G( NMAX ), W( 2*NMAX )
INTEGER IDIM( NIDMAX )
LOGICAL LTEST( NSUBS )
CHARACTER*12 SNAMES( NSUBS )
CHARACTER*13 SNAMES( NSUBS )
* .. External Functions ..
REAL SDIFF
LOGICAL LSE
EXTERNAL SDIFF, LSE
* .. External Subroutines ..
EXTERNAL SCHK1, SCHK2, SCHK3, SCHK4, SCHK5, CS3CHKE,
$ SMMCH
$ SMMCH, SCHK6
* .. Intrinsic Functions ..
INTRINSIC MAX, MIN
* .. Scalars in Common ..
INTEGER INFOT, NOUTC
LOGICAL OK
CHARACTER*12 SRNAMT
CHARACTER*13 SRNAMT
* .. Common blocks ..
COMMON /INFOC/INFOT, NOUTC, OK
COMMON /SRNAMC/SRNAMT
* .. Data statements ..
DATA SNAMES/'cblas_sgemm ', 'cblas_ssymm ',
$ 'cblas_strmm ', 'cblas_strsm ','cblas_ssyrk ',
$ 'cblas_ssyr2k'/
$ 'cblas_ssyr2k', 'cblas_sgemmtr'/
* .. Executable Statements ..
*
NOUTC = NOUT
@@ -188,7 +190,7 @@
$ GO TO 50
40 CONTINUE
WRITE( NOUT, FMT = 9990 )SNAMET
ERROR STOP
STOP
50 LTEST( I ) = LTESTT
GO TO 30
*
@@ -231,7 +233,7 @@
SAME = LSE( CC, CT, N )
IF( .NOT.SAME.OR.ERR.NE.ZERO )THEN
WRITE( NOUT, FMT = 9989 )TRANSA, TRANSB, SAME, ERR
ERROR STOP
STOP
END IF
TRANSB = 'T'
CALL SMMCH( TRANSA, TRANSB, N, 1, N, ONE, AB, NMAX,
@@ -240,7 +242,7 @@
SAME = LSE( CC, CT, N )
IF( .NOT.SAME.OR.ERR.NE.ZERO )THEN
WRITE( NOUT, FMT = 9989 )TRANSA, TRANSB, SAME, ERR
ERROR STOP
STOP
END IF
DO 120 J = 1, N
AB( J, NMAX + 1 ) = N - J + 1
@@ -258,7 +260,7 @@
SAME = LSE( CC, CT, N )
IF( .NOT.SAME.OR.ERR.NE.ZERO )THEN
WRITE( NOUT, FMT = 9989 )TRANSA, TRANSB, SAME, ERR
ERROR STOP
STOP
END IF
TRANSB = 'T'
CALL SMMCH( TRANSA, TRANSB, N, 1, N, ONE, AB, NMAX,
@@ -267,7 +269,7 @@
SAME = LSE( CC, CT, N )
IF( .NOT.SAME.OR.ERR.NE.ZERO )THEN
WRITE( NOUT, FMT = 9989 )TRANSA, TRANSB, SAME, ERR
ERROR STOP
STOP
END IF
*
* Test each subroutine in turn.
@@ -288,7 +290,7 @@
INFOT = 0
OK = .TRUE.
FATAL = .FALSE.
GO TO ( 140, 150, 160, 160, 170, 180 )ISNUM
GO TO ( 140, 150, 160, 160, 170, 180, 185 )ISNUM
* Test SGEMM, 01.
140 IF (CORDER) THEN
CALL SCHK1( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE,
@@ -359,8 +361,24 @@
$ 1 )
END IF
GO TO 190
* Test SGEMMTR, 07.
185 IF (CORDER) THEN
CALL SCHK6( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE,
$ REWI, FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET,
$ NMAX, AB, AA, AS, BB, BS, C, CC, CS, CT, G, W,
$ 0 )

END IF
IF (RORDER) THEN
CALL SCHK6( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE,
$ REWI, FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET,
$ NMAX, AB, AA, AS, BB, BS, C, CC, CS, CT, G, W,
$ 1 )
END IF
GO TO 190
*
190 IF( FATAL.AND.SFATAL )

190 IF( FATAL.AND.SFATAL )
$ GO TO 210
END IF
200 CONTINUE
@@ -378,9 +396,7 @@
IF( TRACE )
$ CLOSE ( NTRA )
CLOSE ( NOUT )
IF( FATAL ) THEN
ERROR STOP
END IF
STOP
*
10002 FORMAT( ' COLUMN-MAJOR AND ROW-MAJOR DATA LAYOUTS ARE TESTED' )
10001 FORMAT( ' ROW-MAJOR DATA LAYOUT IS TESTED' )
@@ -398,7 +414,7 @@
9992 FORMAT( ' FOR BETA ', 7F6.1 )
9991 FORMAT( ' AMEND DATA FILE OR INCREASE ARRAY SIZES IN PROGRAM',
$ /' ******* TESTS ABANDONED *******' )
9990 FORMAT( ' SUBPROGRAM NAME ', A12,' NOT RECOGNIZED', /' ******* ',
9990 FORMAT( ' SUBPROGRAM NAME ', A13,' NOT RECOGNIZED', /' ******* ',
$ 'TESTS ABANDONED *******' )
9989 FORMAT( ' ERROR IN SMMCH - IN-LINE DOT PRODUCTS ARE BEING EVALU',
$ 'ATED WRONGLY.', /' SMMCH WAS CALLED WITH TRANSA = ', A1,
@@ -406,8 +422,8 @@
$ 'ERR = ', F12.3, '.', /' THIS MAY BE DUE TO FAULTS IN THE ',
$ 'ARITHMETIC OR THE COMPILER.', /' ******* TESTS ABANDONED ',
$ '*******' )
9988 FORMAT( A12,L2 )
9987 FORMAT( 1X, A12,' WAS NOT TESTED' )
9988 FORMAT( A13,L2 )
9987 FORMAT( 1X, A13,' WAS NOT TESTED' )
9986 FORMAT( /' END OF TESTS' )
9985 FORMAT( /' ******* FATAL ERROR - TESTS ABANDONED *******' )
9984 FORMAT( ' ERROR-EXITS WILL NOT BE TESTED' )
@@ -437,7 +453,7 @@
REAL EPS, THRESH
INTEGER NALF, NBET, NIDIM, NMAX, NOUT, NTRA, IORDER
LOGICAL FATAL, REWI, TRACE
CHARACTER*12 SNAME
CHARACTER*13 SNAME
* .. Array Arguments ..
REAL A( NMAX, NMAX ), AA( NMAX*NMAX ), ALF( NALF ),
$ AS( NMAX*NMAX ), B( NMAX, NMAX ),
@@ -683,22 +699,22 @@
130 CONTINUE
RETURN
*
10003 FORMAT( ' ', A12,' COMPLETED THE ROW-MAJOR COMPUTATIONAL ',
10003 FORMAT( ' ', A13,' COMPLETED THE ROW-MAJOR COMPUTATIONAL ',
$ 'TESTS (', I6, ' CALLS)', /' ******* BUT WITH MAXIMUM TEST ',
$ 'RATIO ', F8.2, ' - SUSPECT *******' )
10002 FORMAT( ' ', A12,' COMPLETED THE COLUMN-MAJOR COMPUTATIONAL ',
10002 FORMAT( ' ', A13,' COMPLETED THE COLUMN-MAJOR COMPUTATIONAL ',
$ 'TESTS (', I6, ' CALLS)', /' ******* BUT WITH MAXIMUM TEST ',
$ 'RATIO ', F8.2, ' - SUSPECT *******' )
10001 FORMAT( ' ', A12,' PASSED THE ROW-MAJOR COMPUTATIONAL TESTS',
10001 FORMAT( ' ', A13,' PASSED THE ROW-MAJOR COMPUTATIONAL TESTS',
$ ' (', I6, ' CALL', 'S)' )
10000 FORMAT( ' ', A12,' PASSED THE COLUMN-MAJOR COMPUTATIONAL TESTS',
10000 FORMAT( ' ', A13,' PASSED THE COLUMN-MAJOR COMPUTATIONAL TESTS',
$ ' (', I6, ' CALL', 'S)' )
9998 FORMAT( ' ******* FATAL ERROR - PARAMETER NUMBER ', I2, ' WAS CH',
$ 'ANGED INCORRECTLY *******' )
9996 FORMAT( ' ******* ', A12,' FAILED ON CALL NUMBER:' )
C 9995 FORMAT( 1X, I6, ': ', A12,'(''', A1, ''',''', A1, ''',',
C $ 3( I3, ',' ), F4.1, ', A,', I3, ', B,', I3, ',', F4.1, ', ',
C $ 'C,', I3, ').' )
9996 FORMAT( ' ******* ', A13,' FAILED ON CALL NUMBER:' )
9995 FORMAT( 1X, I6, ': ', A13,'(''', A1, ''',''', A1, ''',',
$ 3( I3, ',' ), F4.1, ', A,', I3, ', B,', I3, ',', F4.1, ', ',
$ 'C,', I3, ').' )
9994 FORMAT( ' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *',
$ '******' )
*
@@ -713,7 +729,7 @@ C $ 'C,', I3, ').' )
INTEGER NOUT, NC, IORDER, M, N, K, LDA, LDB, LDC
REAL ALPHA, BETA
CHARACTER*1 TRANSA, TRANSB
CHARACTER*12 SNAME
CHARACTER*13 SNAME
CHARACTER*14 CRC, CTA,CTB

IF (TRANSA.EQ.'N')THEN
@@ -738,7 +754,7 @@ C $ 'C,', I3, ').' )
WRITE(NOUT, FMT = 9995)NC,SNAME,CRC, CTA,CTB
WRITE(NOUT, FMT = 9994)M, N, K, ALPHA, LDA, LDB, BETA, LDC

9995 FORMAT( 1X, I6, ': ', A12,'(', A14, ',', A14, ',', A14, ',')
9995 FORMAT( 1X, I6, ': ', A13,'(', A14, ',', A14, ',', A14, ',')
9994 FORMAT( 20X, 3( I3, ',' ), F4.1, ', A,', I3, ', B,', I3, ',',
$ F4.1, ', ', 'C,', I3, ').' )
END
@@ -765,7 +781,7 @@ C $ 'C,', I3, ').' )
REAL EPS, THRESH
INTEGER NALF, NBET, NIDIM, NMAX, NOUT, NTRA, IORDER
LOGICAL FATAL, REWI, TRACE
CHARACTER*12 SNAME
CHARACTER*13 SNAME
* .. Array Arguments ..
REAL A( NMAX, NMAX ), AA( NMAX*NMAX ), ALF( NALF ),
$ AS( NMAX*NMAX ), B( NMAX, NMAX ),
@@ -1000,22 +1016,22 @@ C $ 'C,', I3, ').' )
120 CONTINUE
RETURN
*
10003 FORMAT( ' ', A12,' COMPLETED THE ROW-MAJOR COMPUTATIONAL ',
10003 FORMAT( ' ', A13,' COMPLETED THE ROW-MAJOR COMPUTATIONAL ',
$ 'TESTS (', I6, ' CALLS)', /' ******* BUT WITH MAXIMUM TEST ',
$ 'RATIO ', F8.2, ' - SUSPECT *******' )
10002 FORMAT( ' ', A12,' COMPLETED THE COLUMN-MAJOR COMPUTATIONAL ',
10002 FORMAT( ' ', A13,' COMPLETED THE COLUMN-MAJOR COMPUTATIONAL ',
$ 'TESTS (', I6, ' CALLS)', /' ******* BUT WITH MAXIMUM TEST ',
$ 'RATIO ', F8.2, ' - SUSPECT *******' )
10001 FORMAT( ' ', A12,' PASSED THE ROW-MAJOR COMPUTATIONAL TESTS',
10001 FORMAT( ' ', A13,' PASSED THE ROW-MAJOR COMPUTATIONAL TESTS',
$ ' (', I6, ' CALL', 'S)' )
10000 FORMAT( ' ', A12,' PASSED THE COLUMN-MAJOR COMPUTATIONAL TESTS',
10000 FORMAT( ' ', A13,' PASSED THE COLUMN-MAJOR COMPUTATIONAL TESTS',
$ ' (', I6, ' CALL', 'S)' )
9998 FORMAT( ' ******* FATAL ERROR - PARAMETER NUMBER ', I2, ' WAS CH',
$ 'ANGED INCORRECTLY *******' )
9996 FORMAT( ' ******* ', A12,' FAILED ON CALL NUMBER:' )
C 9995 FORMAT( 1X, I6, ': ', A12,'(', 2( '''', A1, ''',' ), 2( I3, ',' ),
C $ F4.1, ', A,', I3, ', B,', I3, ',', F4.1, ', C,', I3, ') ',
C $ ' .' )
9996 FORMAT( ' ******* ', A13,' FAILED ON CALL NUMBER:' )
9995 FORMAT( 1X, I6, ': ', A13,'(', 2( '''', A1, ''',' ), 2( I3, ',' ),
$ F4.1, ', A,', I3, ', B,', I3, ',', F4.1, ', C,', I3, ') ',
$ ' .' )
9994 FORMAT( ' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *',
$ '******' )
*
@@ -1028,7 +1044,7 @@ C $ ' .' )
INTEGER NOUT, NC, IORDER, M, N, LDA, LDB, LDC
REAL ALPHA, BETA
CHARACTER*1 SIDE, UPLO
CHARACTER*12 SNAME
CHARACTER*13 SNAME
CHARACTER*14 CRC, CS,CU

IF (SIDE.EQ.'L')THEN
@@ -1049,7 +1065,7 @@ C $ ' .' )
WRITE(NOUT, FMT = 9995)NC,SNAME,CRC, CS,CU
WRITE(NOUT, FMT = 9994)M, N, ALPHA, LDA, LDB, BETA, LDC

9995 FORMAT( 1X, I6, ': ', A12,'(', A14, ',', A14, ',', A14, ',')
9995 FORMAT( 1X, I6, ': ', A13,'(', A14, ',', A14, ',', A14, ',')
9994 FORMAT( 20X, 2( I3, ',' ), F4.1, ', A,', I3, ', B,', I3, ',',
$ F4.1, ', ', 'C,', I3, ').' )
END
@@ -1075,7 +1091,7 @@ C $ ' .' )
REAL EPS, THRESH
INTEGER NALF, NIDIM, NMAX, NOUT, NTRA, IORDER
LOGICAL FATAL, REWI, TRACE
CHARACTER*12 SNAME
CHARACTER*13 SNAME
* .. Array Arguments ..
REAL A( NMAX, NMAX ), AA( NMAX*NMAX ), ALF( NALF ),
$ AS( NMAX*NMAX ), B( NMAX, NMAX ),
@@ -1348,21 +1364,21 @@ C $ ' .' )
160 CONTINUE
RETURN
*
10003 FORMAT( ' ', A12,' COMPLETED THE ROW-MAJOR COMPUTATIONAL ',
10003 FORMAT( ' ', A13,' COMPLETED THE ROW-MAJOR COMPUTATIONAL ',
$ 'TESTS (', I6, ' CALLS)', /' ******* BUT WITH MAXIMUM TEST ',
$ 'RATIO ', F8.2, ' - SUSPECT *******' )
10002 FORMAT( ' ', A12,' COMPLETED THE COLUMN-MAJOR COMPUTATIONAL ',
10002 FORMAT( ' ', A13,' COMPLETED THE COLUMN-MAJOR COMPUTATIONAL ',
$ 'TESTS (', I6, ' CALLS)', /' ******* BUT WITH MAXIMUM TEST ',
$ 'RATIO ', F8.2, ' - SUSPECT *******' )
10001 FORMAT( ' ', A12,' PASSED THE ROW-MAJOR COMPUTATIONAL TESTS',
10001 FORMAT( ' ', A13,' PASSED THE ROW-MAJOR COMPUTATIONAL TESTS',
$ ' (', I6, ' CALL', 'S)' )
10000 FORMAT( ' ', A12,' PASSED THE COLUMN-MAJOR COMPUTATIONAL TESTS',
10000 FORMAT( ' ', A13,' PASSED THE COLUMN-MAJOR COMPUTATIONAL TESTS',
$ ' (', I6, ' CALL', 'S)' )
9998 FORMAT( ' ******* FATAL ERROR - PARAMETER NUMBER ', I2, ' WAS CH',
$ 'ANGED INCORRECTLY *******' )
9996 FORMAT( ' ******* ', A12,' FAILED ON CALL NUMBER:' )
C 9995 FORMAT( 1X, I6, ': ', A12,'(', 4( '''', A1, ''',' ), 2( I3, ',' ),
C $ F4.1, ', A,', I3, ', B,', I3, ') .' )
9996 FORMAT( ' ******* ', A13,' FAILED ON CALL NUMBER:' )
9995 FORMAT( 1X, I6, ': ', A13,'(', 4( '''', A1, ''',' ), 2( I3, ',' ),
$ F4.1, ', A,', I3, ', B,', I3, ') .' )
9994 FORMAT( ' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *',
$ '******' )
*
@@ -1375,7 +1391,7 @@ C $ F4.1, ', A,', I3, ', B,', I3, ') .' )
INTEGER NOUT, NC, IORDER, M, N, LDA, LDB
REAL ALPHA
CHARACTER*1 SIDE, UPLO, TRANSA, DIAG
CHARACTER*12 SNAME
CHARACTER*13 SNAME
CHARACTER*14 CRC, CS, CU, CA, CD

IF (SIDE.EQ.'L')THEN
@@ -1408,7 +1424,7 @@ C $ F4.1, ', A,', I3, ', B,', I3, ') .' )
WRITE(NOUT, FMT = 9995)NC,SNAME,CRC, CS,CU
WRITE(NOUT, FMT = 9994)CA, CD, M, N, ALPHA, LDA, LDB

9995 FORMAT( 1X, I6, ': ', A12,'(', A14, ',', A14, ',', A14, ',')
9995 FORMAT( 1X, I6, ': ', A13,'(', A14, ',', A14, ',', A14, ',')
9994 FORMAT( 22X, 2( A14, ',') , 2( I3, ',' ),
$ F4.1, ', A,', I3, ', B,', I3, ').' )
END
@@ -1435,7 +1451,7 @@ C $ F4.1, ', A,', I3, ', B,', I3, ') .' )
REAL EPS, THRESH
INTEGER NALF, NBET, NIDIM, NMAX, NOUT, NTRA, IORDER
LOGICAL FATAL, REWI, TRACE
CHARACTER*12 SNAME
CHARACTER*13 SNAME
* .. Array Arguments ..
REAL A( NMAX, NMAX ), AA( NMAX*NMAX ), ALF( NALF ),
$ AS( NMAX*NMAX ), B( NMAX, NMAX ),
@@ -1674,22 +1690,22 @@ C $ F4.1, ', A,', I3, ', B,', I3, ') .' )
130 CONTINUE
RETURN
*
10003 FORMAT( ' ', A12,' COMPLETED THE ROW-MAJOR COMPUTATIONAL ',
10003 FORMAT( ' ', A13,' COMPLETED THE ROW-MAJOR COMPUTATIONAL ',
$ 'TESTS (', I6, ' CALLS)', /' ******* BUT WITH MAXIMUM TEST ',
$ 'RATIO ', F8.2, ' - SUSPECT *******' )
10002 FORMAT( ' ', A12,' COMPLETED THE COLUMN-MAJOR COMPUTATIONAL ',
10002 FORMAT( ' ', A13,' COMPLETED THE COLUMN-MAJOR COMPUTATIONAL ',
$ 'TESTS (', I6, ' CALLS)', /' ******* BUT WITH MAXIMUM TEST ',
$ 'RATIO ', F8.2, ' - SUSPECT *******' )
10001 FORMAT( ' ', A12,' PASSED THE ROW-MAJOR COMPUTATIONAL TESTS',
10001 FORMAT( ' ', A13,' PASSED THE ROW-MAJOR COMPUTATIONAL TESTS',
$ ' (', I6, ' CALL', 'S)' )
10000 FORMAT( ' ', A12,' PASSED THE COLUMN-MAJOR COMPUTATIONAL TESTS',
10000 FORMAT( ' ', A13,' PASSED THE COLUMN-MAJOR COMPUTATIONAL TESTS',
$ ' (', I6, ' CALL', 'S)' )
9998 FORMAT( ' ******* FATAL ERROR - PARAMETER NUMBER ', I2, ' WAS CH',
$ 'ANGED INCORRECTLY *******' )
9996 FORMAT( ' ******* ', A12,' FAILED ON CALL NUMBER:' )
9996 FORMAT( ' ******* ', A13,' FAILED ON CALL NUMBER:' )
9995 FORMAT( ' THESE ARE THE RESULTS FOR COLUMN ', I3 )
C 9994 FORMAT( 1X, I6, ': ', A12,'(', 2( '''', A1, ''',' ), 2( I3, ',' ),
C $ F4.1, ', A,', I3, ',', F4.1, ', C,', I3, ') .' )
9994 FORMAT( 1X, I6, ': ', A13,'(', 2( '''', A1, ''',' ), 2( I3, ',' ),
$ F4.1, ', A,', I3, ',', F4.1, ', C,', I3, ') .' )
9993 FORMAT( ' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *',
$ '******' )
*
@@ -1702,7 +1718,7 @@ C $ F4.1, ', A,', I3, ',', F4.1, ', C,', I3, ') .' )
INTEGER NOUT, NC, IORDER, N, K, LDA, LDC
REAL ALPHA, BETA
CHARACTER*1 UPLO, TRANSA
CHARACTER*12 SNAME
CHARACTER*13 SNAME
CHARACTER*14 CRC, CU, CA

IF (UPLO.EQ.'U')THEN
@@ -1725,7 +1741,7 @@ C $ F4.1, ', A,', I3, ',', F4.1, ', C,', I3, ') .' )
WRITE(NOUT, FMT = 9995)NC, SNAME, CRC, CU, CA
WRITE(NOUT, FMT = 9994)N, K, ALPHA, LDA, BETA, LDC

9995 FORMAT( 1X, I6, ': ', A12,'(', 3( A14, ',') )
9995 FORMAT( 1X, I6, ': ', A13,'(', 3( A14, ',') )
9994 FORMAT( 20X, 2( I3, ',' ),
$ F4.1, ', A,', I3, ',', F4.1, ', C,', I3, ').' )
END
@@ -1752,7 +1768,7 @@ C $ F4.1, ', A,', I3, ',', F4.1, ', C,', I3, ') .' )
REAL EPS, THRESH
INTEGER NALF, NBET, NIDIM, NMAX, NOUT, NTRA, IORDER
LOGICAL FATAL, REWI, TRACE
CHARACTER*12 SNAME
CHARACTER*13 SNAME
* .. Array Arguments ..
REAL AA( NMAX*NMAX ), AB( 2*NMAX*NMAX ),
$ ALF( NALF ), AS( NMAX*NMAX ), BB( NMAX*NMAX ),
@@ -2029,23 +2045,23 @@ C $ F4.1, ', A,', I3, ',', F4.1, ', C,', I3, ') .' )
160 CONTINUE
RETURN
*
10003 FORMAT( ' ', A12,' COMPLETED THE ROW-MAJOR COMPUTATIONAL ',
10003 FORMAT( ' ', A13,' COMPLETED THE ROW-MAJOR COMPUTATIONAL ',
$ 'TESTS (', I6, ' CALLS)', /' ******* BUT WITH MAXIMUM TEST ',
$ 'RATIO ', F8.2, ' - SUSPECT *******' )
10002 FORMAT( ' ', A12,' COMPLETED THE COLUMN-MAJOR COMPUTATIONAL ',
10002 FORMAT( ' ', A13,' COMPLETED THE COLUMN-MAJOR COMPUTATIONAL ',
$ 'TESTS (', I6, ' CALLS)', /' ******* BUT WITH MAXIMUM TEST ',
$ 'RATIO ', F8.2, ' - SUSPECT *******' )
10001 FORMAT( ' ', A12,' PASSED THE ROW-MAJOR COMPUTATIONAL TESTS',
10001 FORMAT( ' ', A13,' PASSED THE ROW-MAJOR COMPUTATIONAL TESTS',
$ ' (', I6, ' CALL', 'S)' )
10000 FORMAT( ' ', A12,' PASSED THE COLUMN-MAJOR COMPUTATIONAL TESTS',
10000 FORMAT( ' ', A13,' PASSED THE COLUMN-MAJOR COMPUTATIONAL TESTS',
$ ' (', I6, ' CALL', 'S)' )
9998 FORMAT( ' ******* FATAL ERROR - PARAMETER NUMBER ', I2, ' WAS CH',
$ 'ANGED INCORRECTLY *******' )
9996 FORMAT( ' ******* ', A12,' FAILED ON CALL NUMBER:' )
9996 FORMAT( ' ******* ', A13,' FAILED ON CALL NUMBER:' )
9995 FORMAT( ' THESE ARE THE RESULTS FOR COLUMN ', I3 )
C 9994 FORMAT( 1X, I6, ': ', A12,'(', 2( '''', A1, ''',' ), 2( I3, ',' ),
C $ F4.1, ', A,', I3, ', B,', I3, ',', F4.1, ', C,', I3, ') ',
C $ ' .' )
9994 FORMAT( 1X, I6, ': ', A13,'(', 2( '''', A1, ''',' ), 2( I3, ',' ),
$ F4.1, ', A,', I3, ', B,', I3, ',', F4.1, ', C,', I3, ') ',
$ ' .' )
9993 FORMAT( ' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *',
$ '******' )
*
@@ -2058,7 +2074,7 @@ C $ ' .' )
INTEGER NOUT, NC, IORDER, N, K, LDA, LDB, LDC
REAL ALPHA, BETA
CHARACTER*1 UPLO, TRANSA
CHARACTER*12 SNAME
CHARACTER*13 SNAME
CHARACTER*14 CRC, CU, CA

IF (UPLO.EQ.'U')THEN
@@ -2081,7 +2097,7 @@ C $ ' .' )
WRITE(NOUT, FMT = 9995)NC, SNAME, CRC, CU, CA
WRITE(NOUT, FMT = 9994)N, K, ALPHA, LDA, LDB, BETA, LDC

9995 FORMAT( 1X, I6, ': ', A12,'(', 3( A14, ',') )
9995 FORMAT( 1X, I6, ': ', A13,'(', 3( A14, ',') )
9994 FORMAT( 20X, 2( I3, ',' ),
$ F4.1, ', A,', I3, ', B', I3, ',', F4.1, ', C,', I3, ').' )
END
@@ -2405,7 +2421,7 @@ C $ ' .' )
50 CONTINUE
END IF
*
C 60 CONTINUE
60 CONTINUE
LSERES = .TRUE.
GO TO 80
70 CONTINUE
@@ -2480,3 +2496,475 @@ C 60 CONTINUE
* End of SDIFF.
*
END


SUBROUTINE SCHK6( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI,
$ FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET, NMAX,
$ A, AA, AS, B, BB, BS, C, CC, CS, CT, G,
$ IORDER)
*
* Tests SGEMMTR.
*
* Auxiliary routine for test program for Level 3 Blas.
*
* -- Written on 19-July-2023.
* Martin Koehler, MPI Magdeburg
*
* .. Parameters ..
REAL ZERO
PARAMETER ( ZERO = 0.0 )
* .. Scalar Arguments ..
REAL EPS, THRESH
INTEGER NALF, NBET, NIDIM, NMAX, NOUT, NTRA, IORDER
LOGICAL FATAL, REWI, TRACE
CHARACTER*13 SNAME
* .. Array Arguments ..
REAL A( NMAX, NMAX ), AA( NMAX*NMAX ), ALF( NALF ),
$ AS( NMAX*NMAX ), B( NMAX, NMAX ),
$ BB( NMAX*NMAX ), BET( NBET ), BS( NMAX*NMAX ),
$ C( NMAX, NMAX ), CC( NMAX*NMAX ),
$ CS( NMAX*NMAX ), CT( NMAX ), G( NMAX )
INTEGER IDIM( NIDIM )
* .. Local Scalars ..
REAL ALPHA, ALS, BETA, BLS, ERR, ERRMAX
INTEGER I, IA, IB, ICA, ICB, IK, IN, K, KS, LAA,
$ LBB, LCC, LDA, LDAS, LDB, LDBS, LDC, LDCS,
$ MA, MB, N, NA, NARGS, NB, NC, NS, IS
LOGICAL NULL, RESET, SAME, TRANA, TRANB
CHARACTER*1 TRANAS, TRANBS, TRANSA, TRANSB, UPLO, UPLOS
CHARACTER*3 ICH
CHARACTER*2 ISHAPE
* .. Local Arrays ..
LOGICAL ISAME( 13 )
* .. External Functions ..
LOGICAL LSE, LSERES
EXTERNAL LSE, LSERES
* .. External Subroutines ..
EXTERNAL CSGEMMTR, SMAKE, SMMTCH, SPRCN8
* .. Intrinsic Functions ..
INTRINSIC MAX
* .. Scalars in Common ..
INTEGER INFOT, NOUTC
LOGICAL LERR, OK
* .. Common blocks ..
COMMON /INFOC/INFOT, NOUTC, OK, LERR
* .. Data statements ..
DATA ICH/'NTC'/
DATA ISHAPE/'UL'/
* .. Executable Statements ..
*
NARGS = 13
NC = 0
RESET = .TRUE.
ERRMAX = ZERO
*
DO 100 IN = 1, NIDIM
N = IDIM( IN )
* Set LDC to 1 more than minimum value if room.
LDC = N
IF( LDC.LT.NMAX )
$ LDC = LDC + 1
* Skip tests if not enough room.
IF( LDC.GT.NMAX )
$ GO TO 100
LCC = LDC*N
NULL = N.LE.0
*
DO 90 IK = 1, NIDIM
K = IDIM( IK )
*
DO 80 ICA = 1, 3
TRANSA = ICH( ICA: ICA )
TRANA = TRANSA.EQ.'T'.OR.TRANSA.EQ.'C'
*
IF( TRANA )THEN
MA = K
NA = N
ELSE
MA = N
NA = K
END IF
* Set LDA to 1 more than minimum value if room.
LDA = MA
IF( LDA.LT.NMAX )
$ LDA = LDA + 1
* Skip tests if not enough room.
IF( LDA.GT.NMAX )
$ GO TO 80
LAA = LDA*NA
*
* Generate the matrix A.
*
CALL SMAKE( 'GE', ' ', ' ', MA, NA, A, NMAX, AA, LDA,
$ RESET, ZERO )
*
DO 70 ICB = 1, 3
TRANSB = ICH( ICB: ICB )
TRANB = TRANSB.EQ.'T'.OR.TRANSB.EQ.'C'
*
IF( TRANB )THEN
MB = N
NB = K
ELSE
MB = K
NB = N
END IF
* Set LDB to 1 more than minimum value if room.
LDB = MB
IF( LDB.LT.NMAX )
$ LDB = LDB + 1
* Skip tests if not enough room.
IF( LDB.GT.NMAX )
$ GO TO 70
LBB = LDB*NB
*
* Generate the matrix B.
*
CALL SMAKE( 'GE', ' ', ' ', MB, NB, B, NMAX, BB,
$ LDB, RESET, ZERO )
*
DO 60 IA = 1, NALF
ALPHA = ALF( IA )
*
DO 50 IB = 1, NBET
BETA = BET( IB )

DO 45 IS = 1, 2
UPLO = ISHAPE( IS: IS )

*
* Generate the matrix C.
*
CALL SMAKE( 'GE', UPLO, ' ', N, N, C,
$ NMAX, CC, LDC, RESET, ZERO )
*
NC = NC + 1
*
* Save every datum before calling the
* subroutine.
*
UPLOS = UPLO
TRANAS = TRANSA
TRANBS = TRANSB
NS = N
KS = K
ALS = ALPHA
DO 10 I = 1, LAA
AS( I ) = AA( I )
10 CONTINUE
LDAS = LDA
DO 20 I = 1, LBB
BS( I ) = BB( I )
20 CONTINUE
LDBS = LDB
BLS = BETA
DO 30 I = 1, LCC
CS( I ) = CC( I )
30 CONTINUE
LDCS = LDC
*
* Call the subroutine.
*
IF( TRACE )
$ CALL SPRCN8(NTRA, NC, SNAME, IORDER, UPLO,
$ TRANSA, TRANSB, N, K, ALPHA, LDA,
$ LDB, BETA, LDC)
IF( REWI )
$ REWIND NTRA
CALL CSGEMMTR( IORDER, UPLO, TRANSA, TRANSB,
$ N, K, ALPHA, AA, LDA, BB, LDB,
$ BETA, CC, LDC )
*
* Check if error-exit was taken incorrectly.
*
IF( .NOT.OK )THEN
WRITE( NOUT, FMT = 9994 )
FATAL = .TRUE.
GO TO 120
END IF
*
* See what data changed inside subroutines.
*
ISAME( 1 ) = UPLO.EQ.UPLOS
ISAME( 2 ) = TRANSA.EQ.TRANAS
ISAME( 3 ) = TRANSB.EQ.TRANBS
ISAME( 4 ) = NS.EQ.N
ISAME( 5 ) = KS.EQ.K
ISAME( 6 ) = ALS.EQ.ALPHA
ISAME( 7 ) = LSE( AS, AA, LAA )
ISAME( 8 ) = LDAS.EQ.LDA
ISAME( 9 ) = LSE( BS, BB, LBB )
ISAME( 10 ) = LDBS.EQ.LDB
ISAME( 11 ) = BLS.EQ.BETA
IF( NULL )THEN
ISAME( 12 ) = LSE( CS, CC, LCC )
ELSE
ISAME( 12 ) = LSERES( 'GE', ' ', N, N,
$ CS, CC, LDC )
END IF
ISAME( 13 ) = LDCS.EQ.LDC
*
* If data was incorrectly changed, report
* and return.
*
SAME = .TRUE.
DO 40 I = 1, NARGS
SAME = SAME.AND.ISAME( I )
IF( .NOT.ISAME( I ) )
$ WRITE( NOUT, FMT = 9998 )I
40 CONTINUE
IF( .NOT.SAME )THEN
FATAL = .TRUE.
GO TO 120
END IF
*
IF( .NOT.NULL )THEN
*
* Check the result.
*
CALL SMMTCH( UPLO, TRANSA, TRANSB,
$ N, K,
$ ALPHA, A, NMAX, B, NMAX, BETA,
$ C, NMAX, CT, G, CC, LDC, EPS,
$ ERR, FATAL, NOUT, .TRUE. )
ERRMAX = MAX( ERRMAX, ERR )
* If got really bad answer, report and
* return.
IF( FATAL )
$ GO TO 120
END IF
*
45 CONTINUE
*
50 CONTINUE
*
60 CONTINUE
*
70 CONTINUE
*
80 CONTINUE
*
90 CONTINUE
*
100 CONTINUE
*
*
* Report result.
*
IF( ERRMAX.LT.THRESH )THEN
IF ( IORDER.EQ.0) WRITE( NOUT, FMT = 10000 )SNAME, NC
IF ( IORDER.EQ.1) WRITE( NOUT, FMT = 10001 )SNAME, NC
ELSE
IF ( IORDER.EQ.0) WRITE( NOUT, FMT = 10002 )SNAME, NC, ERRMAX
IF ( IORDER.EQ.1) WRITE( NOUT, FMT = 10003 )SNAME, NC, ERRMAX
END IF
GO TO 130
*
120 CONTINUE
WRITE( NOUT, FMT = 9996 )SNAME
CALL SPRCN8(NOUT, NC, SNAME, IORDER, UPLO, TRANSA, TRANSB,
$ N, K, ALPHA, LDA, LDB, BETA, LDC)
*
130 CONTINUE
RETURN
*
10003 FORMAT( ' ', A13,' COMPLETED THE ROW-MAJOR COMPUTATIONAL ',
$ 'TESTS (', I6, ' CALLS)', /' ******* BUT WITH MAXIMUM TEST ',
$ 'RATIO ', F8.2, ' - SUSPECT *******' )
10002 FORMAT( ' ', A13,' COMPLETED THE COLUMN-MAJOR COMPUTATIONAL ',
$ 'TESTS (', I6, ' CALLS)', /' ******* BUT WITH MAXIMUM TEST ',
$ 'RATIO ', F8.2, ' - SUSPECT *******' )
10001 FORMAT( ' ', A13,' PASSED THE ROW-MAJOR COMPUTATIONAL TESTS',
$ ' (', I6, ' CALL', 'S)' )
10000 FORMAT( ' ', A13,' PASSED THE COLUMN-MAJOR COMPUTATIONAL TESTS',
$ ' (', I6, ' CALL', 'S)' )
9998 FORMAT( ' ******* FATAL ERROR - PARAMETER NUMBER ', I2, ' WAS CH',
$ 'ANGED INCORRECTLY *******' )
9997 FORMAT( ' ', A13, ' COMPLETED THE COMPUTATIONAL TESTS (', I6, ' C',
$ 'ALLS)', /' ******* BUT WITH MAXIMUM TEST RATIO', F8.2,
$ ' - SUSPECT *******' )
9996 FORMAT( ' ******* ', A13, ' FAILED ON CALL NUMBER:' )
9995 FORMAT( 1X, I6, ': ', A13, '(''',A1, ''',''',A1, ''',''', A1,''',',
$ 2( I3, ',' ), F4.1, ', A,', I3, ', B,', I3, ',', F4.1, ', ',
$ 'C,', I3, ').' )
9994 FORMAT( ' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *',
$ '******' )
*
* End of SCHK6
*
END

SUBROUTINE SPRCN8(NOUT, NC, SNAME, IORDER, UPLO,
$ TRANSA, TRANSB, N,
$ K, ALPHA, LDA, LDB, BETA, LDC)
INTEGER NOUT, NC, IORDER, N, K, LDA, LDB, LDC
REAL ALPHA, BETA
CHARACTER*1 TRANSA, TRANSB, UPLO
CHARACTER*13 SNAME
CHARACTER*14 CRC, CTA,CTB,CUPLO

IF (UPLO.EQ.'U') THEN
CUPLO = 'CblasUpper'
ELSE
CUPLO = 'CblasLower'
END IF
IF (TRANSA.EQ.'N')THEN
CTA = ' CblasNoTrans'
ELSE IF (TRANSA.EQ.'T')THEN
CTA = ' CblasTrans'
ELSE
CTA = 'CblasConjTrans'
END IF
IF (TRANSB.EQ.'N')THEN
CTB = ' CblasNoTrans'
ELSE IF (TRANSB.EQ.'T')THEN
CTB = ' CblasTrans'
ELSE
CTB = 'CblasConjTrans'
END IF
IF (IORDER.EQ.1)THEN
CRC = ' CblasRowMajor'
ELSE
CRC = ' CblasColMajor'
END IF
WRITE(NOUT, FMT = 9995)NC,SNAME,CRC, CUPLO, CTA,CTB
WRITE(NOUT, FMT = 9994)N, K, ALPHA, LDA, LDB, BETA, LDC

9995 FORMAT( 1X, I6, ': ', A13,'(', A14, ',', A14, ',', A14, ',',
$ A14, ',')
9994 FORMAT( 10X, 2( I3, ',' ) ,' ', F4.1,' , A,',
$ I3, ', B,', I3, ', ', F4.1,' , C,', I3, ').' )
END

SUBROUTINE SMMTCH( UPLO, TRANSA, TRANSB, N, KK, ALPHA, A, LDA,
$ B, LDB, BETA, C, LDC, CT, G, CC, LDCC, EPS, ERR,
$ FATAL, NOUT, MV )
*
* Checks the results of the computational tests.
*
* Auxiliary routine for test program for Level 3 Blas. (DGEMMTR)
*
* -- Written on 19-July-2023.
* Martin Koehler, MPI Magdeburg
*
* .. Parameters ..
REAL ZERO, ONE
PARAMETER ( ZERO = 0.0, ONE = 1.0 )
* .. Scalar Arguments ..
REAL ALPHA, BETA, EPS, ERR
INTEGER KK, LDA, LDB, LDC, LDCC, N, NOUT
LOGICAL FATAL, MV
CHARACTER*1 UPLO, TRANSA, TRANSB
* .. Array Arguments ..
REAL A( LDA, * ), B( LDB, * ), C( LDC, * ),
$ CC( LDCC, * ), CT( * ), G( * )
* .. Local Scalars ..
REAL ERRI
INTEGER I, J, K, ISTART, ISTOP
LOGICAL TRANA, TRANB, UPPER
* .. Intrinsic Functions ..
INTRINSIC ABS, MAX, SQRT
* .. Executable Statements ..
UPPER = UPLO.EQ.'U'
TRANA = TRANSA.EQ.'T'.OR.TRANSA.EQ.'C'
TRANB = TRANSB.EQ.'T'.OR.TRANSB.EQ.'C'
*
* Compute expected result, one column at a time, in CT using data
* in A, B and C.
* Compute gauges in G.
*
ISTART = 1
ISTOP = N

DO 120 J = 1, N
*
IF ( UPPER ) THEN
ISTART = 1
ISTOP = J
ELSE
ISTART = J
ISTOP = N
END IF
DO 10 I = ISTART, ISTOP
CT( I ) = ZERO
G( I ) = ZERO
10 CONTINUE
IF( .NOT.TRANA.AND..NOT.TRANB )THEN
DO 30 K = 1, KK
DO 20 I = ISTART, ISTOP
CT( I ) = CT( I ) + A( I, K )*B( K, J )
G( I ) = G( I ) + ABS( A( I, K ) )*ABS( B( K, J ) )
20 CONTINUE
30 CONTINUE
ELSE IF( TRANA.AND..NOT.TRANB )THEN
DO 50 K = 1, KK
DO 40 I = ISTART, ISTOP
CT( I ) = CT( I ) + A( K, I )*B( K, J )
G( I ) = G( I ) + ABS( A( K, I ) )*ABS( B( K, J ) )
40 CONTINUE
50 CONTINUE
ELSE IF( .NOT.TRANA.AND.TRANB )THEN
DO 70 K = 1, KK
DO 60 I = ISTART, ISTOP
CT( I ) = CT( I ) + A( I, K )*B( J, K )
G( I ) = G( I ) + ABS( A( I, K ) )*ABS( B( J, K ) )
60 CONTINUE
70 CONTINUE
ELSE IF( TRANA.AND.TRANB )THEN
DO 90 K = 1, KK
DO 80 I = ISTART, ISTOP
CT( I ) = CT( I ) + A( K, I )*B( J, K )
G( I ) = G( I ) + ABS( A( K, I ) )*ABS( B( J, K ) )
80 CONTINUE
90 CONTINUE
END IF
DO 100 I = ISTART, ISTOP
CT( I ) = ALPHA*CT( I ) + BETA*C( I, J )
G( I ) = ABS( ALPHA )*G( I ) + ABS( BETA )*ABS( C( I, J ) )
100 CONTINUE
*
* Compute the error ratio for this result.
*
ERR = ZERO
DO 110 I = ISTART, ISTOP
ERRI = ABS( CT( I ) - CC( I, J ) )/EPS
IF( G( I ).NE.ZERO )
$ ERRI = ERRI/G( I )
ERR = MAX( ERR, ERRI )
IF( ERR*SQRT( EPS ).GE.ONE )
$ GO TO 130
110 CONTINUE
*
120 CONTINUE
*
* If the loop completes, all results are at least half accurate.
GO TO 150
*
* Report fatal error.
*
130 FATAL = .TRUE.
WRITE( NOUT, FMT = 9999 )
DO 140 I = ISTART, ISTOP
IF( MV )THEN
WRITE( NOUT, FMT = 9998 )I, CT( I ), CC( I, J )
ELSE
WRITE( NOUT, FMT = 9998 )I, CC( I, J ), CT( I )
END IF
140 CONTINUE
IF( N.GT.1 )
$ WRITE( NOUT, FMT = 9997 )J
*
150 CONTINUE
RETURN
*
9999 FORMAT( ' ******* FATAL ERROR - COMPUTED RESULT IS LESS THAN HAL',
$ 'F ACCURATE *******', /' EXPECTED RESULT COMPU',
$ 'TED RESULT' )
9998 FORMAT( 1X, I7, 2G18.6 )
9997 FORMAT( ' THESE ARE THE RESULTS FOR COLUMN ', I3 )
*
* End of SMMTCH
*
END



+ 212
- 95
ctest/c_zblas3.c View File

@@ -5,28 +5,33 @@
* Modified by T. H. Do, 4/15/98, SGI/CRAY Research.
*/
#include <stdlib.h>
#include "common.h"
#include <stdio.h>
#include "cblas.h"
#include "cblas_test.h"
#define TEST_COL_MJR 0
#define TEST_ROW_MJR 1
#define UNDEFINED -1

void F77_zgemm(int *order, char *transpa, char *transpb, int *m, int *n,
void F77_zgemm(int *layout, char *transpa, char *transpb, int *m, int *n,
int *k, CBLAS_TEST_ZOMPLEX *alpha, CBLAS_TEST_ZOMPLEX *a, int *lda,
CBLAS_TEST_ZOMPLEX *b, int *ldb, CBLAS_TEST_ZOMPLEX *beta,
CBLAS_TEST_ZOMPLEX *c, int *ldc ) {
CBLAS_TEST_ZOMPLEX *c, int *ldc
#ifdef BLAS_FORTRAN_STRLEN_END
, FORTRAN_STRLEN transpa_len, FORTRAN_STRLEN transpb_len
#endif
) {

CBLAS_TEST_ZOMPLEX *A, *B, *C;
int i,j,LDA, LDB, LDC;
enum CBLAS_TRANSPOSE transa, transb;
CBLAS_TRANSPOSE transa, transb;

get_transpose_type(transpa, &transa);
get_transpose_type(transpb, &transb);

if (*order == TEST_ROW_MJR) {
if (*layout == TEST_ROW_MJR) {
if (transa == CblasNoTrans) {
LDA = *k+1;
A=(CBLAS_TEST_ZOMPLEX*)malloc((*m)*(size_t)LDA*sizeof(CBLAS_TEST_ZOMPLEX));
A=(CBLAS_TEST_ZOMPLEX*)malloc((*m)*LDA*sizeof(CBLAS_TEST_ZOMPLEX));
for( i=0; i<*m; i++ )
for( j=0; j<*k; j++ ) {
A[i*LDA+j].real=a[j*(*lda)+i].real;
@@ -35,7 +40,7 @@ void F77_zgemm(int *order, char *transpa, char *transpb, int *m, int *n,
}
else {
LDA = *m+1;
A=(CBLAS_TEST_ZOMPLEX* )malloc((size_t)LDA*(*k)*sizeof(CBLAS_TEST_ZOMPLEX));
A=(CBLAS_TEST_ZOMPLEX* )malloc(LDA*(*k)*sizeof(CBLAS_TEST_ZOMPLEX));
for( i=0; i<*k; i++ )
for( j=0; j<*m; j++ ) {
A[i*LDA+j].real=a[j*(*lda)+i].real;
@@ -45,7 +50,7 @@ void F77_zgemm(int *order, char *transpa, char *transpb, int *m, int *n,

if (transb == CblasNoTrans) {
LDB = *n+1;
B=(CBLAS_TEST_ZOMPLEX* )malloc((*k)*(size_t)LDB*sizeof(CBLAS_TEST_ZOMPLEX) );
B=(CBLAS_TEST_ZOMPLEX* )malloc((*k)*LDB*sizeof(CBLAS_TEST_ZOMPLEX) );
for( i=0; i<*k; i++ )
for( j=0; j<*n; j++ ) {
B[i*LDB+j].real=b[j*(*ldb)+i].real;
@@ -54,7 +59,7 @@ void F77_zgemm(int *order, char *transpa, char *transpb, int *m, int *n,
}
else {
LDB = *k+1;
B=(CBLAS_TEST_ZOMPLEX* )malloc((size_t)LDB*(*n)*sizeof(CBLAS_TEST_ZOMPLEX));
B=(CBLAS_TEST_ZOMPLEX* )malloc(LDB*(*n)*sizeof(CBLAS_TEST_ZOMPLEX));
for( i=0; i<*n; i++ )
for( j=0; j<*k; j++ ) {
B[i*LDB+j].real=b[j*(*ldb)+i].real;
@@ -63,7 +68,7 @@ void F77_zgemm(int *order, char *transpa, char *transpb, int *m, int *n,
}

LDC = *n+1;
C=(CBLAS_TEST_ZOMPLEX* )malloc((*m)*(size_t)LDC*sizeof(CBLAS_TEST_ZOMPLEX));
C=(CBLAS_TEST_ZOMPLEX* )malloc((*m)*LDC*sizeof(CBLAS_TEST_ZOMPLEX));
for( j=0; j<*n; j++ )
for( i=0; i<*m; i++ ) {
C[i*LDC+j].real=c[j*(*ldc)+i].real;
@@ -80,30 +85,116 @@ void F77_zgemm(int *order, char *transpa, char *transpb, int *m, int *n,
free(B);
free(C);
}
else if (*order == TEST_COL_MJR)
else if (*layout == TEST_COL_MJR)
cblas_zgemm( CblasColMajor, transa, transb, *m, *n, *k, alpha, a, *lda,
b, *ldb, beta, c, *ldc );
else
cblas_zgemm( UNDEFINED, transa, transb, *m, *n, *k, alpha, a, *lda,
b, *ldb, beta, c, *ldc );
}
void F77_zhemm(int *order, char *rtlf, char *uplow, int *m, int *n,


void F77_zgemmtr(int *layout, char *uplop, char *transpa, char *transpb, int *n,
int *k, CBLAS_TEST_ZOMPLEX *alpha, CBLAS_TEST_ZOMPLEX *a, int *lda,
CBLAS_TEST_ZOMPLEX *b, int *ldb, CBLAS_TEST_ZOMPLEX *beta,
CBLAS_TEST_ZOMPLEX *c, int *ldc ) {

CBLAS_TEST_ZOMPLEX *A, *B, *C;
int i,j,LDA, LDB, LDC;
CBLAS_TRANSPOSE transa, transb;
CBLAS_UPLO uplo;

get_transpose_type(transpa, &transa);
get_transpose_type(transpb, &transb);
get_uplo_type(uplop, &uplo);

if (*layout == TEST_ROW_MJR) {
if (transa == CblasNoTrans) {
LDA = *k+1;
A=(CBLAS_TEST_ZOMPLEX*)malloc((*n)*LDA*sizeof(CBLAS_TEST_ZOMPLEX));
for( i=0; i<*n; i++ )
for( j=0; j<*k; j++ ) {
A[i*LDA+j].real=a[j*(*lda)+i].real;
A[i*LDA+j].imag=a[j*(*lda)+i].imag;
}
}
else {
LDA = *n+1;
A=(CBLAS_TEST_ZOMPLEX* )malloc(LDA*(*k)*sizeof(CBLAS_TEST_ZOMPLEX));
for( i=0; i<*k; i++ )
for( j=0; j<*n; j++ ) {
A[i*LDA+j].real=a[j*(*lda)+i].real;
A[i*LDA+j].imag=a[j*(*lda)+i].imag;
}
}

if (transb == CblasNoTrans) {
LDB = *n+1;
B=(CBLAS_TEST_ZOMPLEX* )malloc((*k)*LDB*sizeof(CBLAS_TEST_ZOMPLEX) );
for( i=0; i<*k; i++ )
for( j=0; j<*n; j++ ) {
B[i*LDB+j].real=b[j*(*ldb)+i].real;
B[i*LDB+j].imag=b[j*(*ldb)+i].imag;
}
}
else {
LDB = *k+1;
B=(CBLAS_TEST_ZOMPLEX* )malloc(LDB*(*n)*sizeof(CBLAS_TEST_ZOMPLEX));
for( i=0; i<*n; i++ )
for( j=0; j<*k; j++ ) {
B[i*LDB+j].real=b[j*(*ldb)+i].real;
B[i*LDB+j].imag=b[j*(*ldb)+i].imag;
}
}

LDC = *n+1;
C=(CBLAS_TEST_ZOMPLEX* )malloc((*n)*LDC*sizeof(CBLAS_TEST_ZOMPLEX));
for( j=0; j<*n; j++ )
for( i=0; i<*n; i++ ) {
C[i*LDC+j].real=c[j*(*ldc)+i].real;
C[i*LDC+j].imag=c[j*(*ldc)+i].imag;
}
cblas_zgemmtr( CblasRowMajor, uplo, transa, transb, *n, *k, alpha, A, LDA,
B, LDB, beta, C, LDC );
for( j=0; j<*n; j++ )
for( i=0; i<*n; i++ ) {
c[j*(*ldc)+i].real=C[i*LDC+j].real;
c[j*(*ldc)+i].imag=C[i*LDC+j].imag;
}
free(A);
free(B);
free(C);
}
else if (*layout == TEST_COL_MJR)
cblas_zgemmtr( CblasColMajor, uplo, transa, transb, *n, *k, alpha, a, *lda,
b, *ldb, beta, c, *ldc );
else
cblas_zgemmtr( UNDEFINED, uplo, transa, transb, *n, *k, alpha, a, *lda,
b, *ldb, beta, c, *ldc );
}


void F77_zhemm(int *layout, char *rtlf, char *uplow, int *m, int *n,
CBLAS_TEST_ZOMPLEX *alpha, CBLAS_TEST_ZOMPLEX *a, int *lda,
CBLAS_TEST_ZOMPLEX *b, int *ldb, CBLAS_TEST_ZOMPLEX *beta,
CBLAS_TEST_ZOMPLEX *c, int *ldc ) {
CBLAS_TEST_ZOMPLEX *c, int *ldc
#ifdef BLAS_FORTRAN_STRLEN_END
, FORTRAN_STRLEN rtlf_len, FORTRAN_STRLEN uplow_len
#endif
) {

CBLAS_TEST_ZOMPLEX *A, *B, *C;
int i,j,LDA, LDB, LDC;
enum CBLAS_UPLO uplo;
enum CBLAS_SIDE side;
CBLAS_UPLO uplo;
CBLAS_SIDE side;

get_uplo_type(uplow,&uplo);
get_side_type(rtlf,&side);

if (*order == TEST_ROW_MJR) {
if (*layout == TEST_ROW_MJR) {
if (side == CblasLeft) {
LDA = *m+1;
A= (CBLAS_TEST_ZOMPLEX* )malloc((*m)*(size_t)LDA*sizeof(CBLAS_TEST_ZOMPLEX));
A= (CBLAS_TEST_ZOMPLEX* )malloc((*m)*LDA*sizeof(CBLAS_TEST_ZOMPLEX));
for( i=0; i<*m; i++ )
for( j=0; j<*m; j++ ) {
A[i*LDA+j].real=a[j*(*lda)+i].real;
@@ -112,7 +203,7 @@ void F77_zhemm(int *order, char *rtlf, char *uplow, int *m, int *n,
}
else{
LDA = *n+1;
A=(CBLAS_TEST_ZOMPLEX* )malloc((*n)*(size_t)LDA*sizeof(CBLAS_TEST_ZOMPLEX ) );
A=(CBLAS_TEST_ZOMPLEX* )malloc((*n)*LDA*sizeof(CBLAS_TEST_ZOMPLEX ) );
for( i=0; i<*n; i++ )
for( j=0; j<*n; j++ ) {
A[i*LDA+j].real=a[j*(*lda)+i].real;
@@ -120,14 +211,14 @@ void F77_zhemm(int *order, char *rtlf, char *uplow, int *m, int *n,
}
}
LDB = *n+1;
B=(CBLAS_TEST_ZOMPLEX* )malloc( (*m)*(size_t)LDB*sizeof(CBLAS_TEST_ZOMPLEX ) );
B=(CBLAS_TEST_ZOMPLEX* )malloc( (*m)*LDB*sizeof(CBLAS_TEST_ZOMPLEX ) );
for( i=0; i<*m; i++ )
for( j=0; j<*n; j++ ) {
B[i*LDB+j].real=b[j*(*ldb)+i].real;
B[i*LDB+j].imag=b[j*(*ldb)+i].imag;
}
LDC = *n+1;
C=(CBLAS_TEST_ZOMPLEX* )malloc((*m)*(size_t)LDC*sizeof(CBLAS_TEST_ZOMPLEX ) );
C=(CBLAS_TEST_ZOMPLEX* )malloc((*m)*LDC*sizeof(CBLAS_TEST_ZOMPLEX ) );
for( j=0; j<*n; j++ )
for( i=0; i<*m; i++ ) {
C[i*LDC+j].real=c[j*(*ldc)+i].real;
@@ -144,48 +235,52 @@ void F77_zhemm(int *order, char *rtlf, char *uplow, int *m, int *n,
free(B);
free(C);
}
else if (*order == TEST_COL_MJR)
else if (*layout == TEST_COL_MJR)
cblas_zhemm( CblasColMajor, side, uplo, *m, *n, alpha, a, *lda, b, *ldb,
beta, c, *ldc );
else
cblas_zhemm( UNDEFINED, side, uplo, *m, *n, alpha, a, *lda, b, *ldb,
beta, c, *ldc );
}
void F77_zsymm(int *order, char *rtlf, char *uplow, int *m, int *n,
void F77_zsymm(int *layout, char *rtlf, char *uplow, int *m, int *n,
CBLAS_TEST_ZOMPLEX *alpha, CBLAS_TEST_ZOMPLEX *a, int *lda,
CBLAS_TEST_ZOMPLEX *b, int *ldb, CBLAS_TEST_ZOMPLEX *beta,
CBLAS_TEST_ZOMPLEX *c, int *ldc ) {
CBLAS_TEST_ZOMPLEX *c, int *ldc
#ifdef BLAS_FORTRAN_STRLEN_END
, FORTRAN_STRLEN rtlf_len, FORTRAN_STRLEN uplow_len
#endif
) {

CBLAS_TEST_ZOMPLEX *A, *B, *C;
int i,j,LDA, LDB, LDC;
enum CBLAS_UPLO uplo;
enum CBLAS_SIDE side;
CBLAS_UPLO uplo;
CBLAS_SIDE side;

get_uplo_type(uplow,&uplo);
get_side_type(rtlf,&side);

if (*order == TEST_ROW_MJR) {
if (*layout == TEST_ROW_MJR) {
if (side == CblasLeft) {
LDA = *m+1;
A=(CBLAS_TEST_ZOMPLEX* )malloc((*m)*(size_t)LDA*sizeof(CBLAS_TEST_ZOMPLEX));
A=(CBLAS_TEST_ZOMPLEX* )malloc((*m)*LDA*sizeof(CBLAS_TEST_ZOMPLEX));
for( i=0; i<*m; i++ )
for( j=0; j<*m; j++ )
A[i*LDA+j]=a[j*(*lda)+i];
}
else{
LDA = *n+1;
A=(CBLAS_TEST_ZOMPLEX* )malloc((*n)*(size_t)LDA*sizeof(CBLAS_TEST_ZOMPLEX ) );
A=(CBLAS_TEST_ZOMPLEX* )malloc((*n)*LDA*sizeof(CBLAS_TEST_ZOMPLEX ) );
for( i=0; i<*n; i++ )
for( j=0; j<*n; j++ )
A[i*LDA+j]=a[j*(*lda)+i];
}
LDB = *n+1;
B=(CBLAS_TEST_ZOMPLEX* )malloc((*m)*(size_t)LDB*sizeof(CBLAS_TEST_ZOMPLEX ));
B=(CBLAS_TEST_ZOMPLEX* )malloc((*m)*LDB*sizeof(CBLAS_TEST_ZOMPLEX ));
for( i=0; i<*m; i++ )
for( j=0; j<*n; j++ )
B[i*LDB+j]=b[j*(*ldb)+i];
LDC = *n+1;
C=(CBLAS_TEST_ZOMPLEX* )malloc((*m)*(size_t)LDC*sizeof(CBLAS_TEST_ZOMPLEX));
C=(CBLAS_TEST_ZOMPLEX* )malloc((*m)*LDC*sizeof(CBLAS_TEST_ZOMPLEX));
for( j=0; j<*n; j++ )
for( i=0; i<*m; i++ )
C[i*LDC+j]=c[j*(*ldc)+i];
@@ -198,7 +293,7 @@ void F77_zsymm(int *order, char *rtlf, char *uplow, int *m, int *n,
free(B);
free(C);
}
else if (*order == TEST_COL_MJR)
else if (*layout == TEST_COL_MJR)
cblas_zsymm( CblasColMajor, side, uplo, *m, *n, alpha, a, *lda, b, *ldb,
beta, c, *ldc );
else
@@ -206,22 +301,26 @@ void F77_zsymm(int *order, char *rtlf, char *uplow, int *m, int *n,
beta, c, *ldc );
}

void F77_zherk(int *order, char *uplow, char *transp, int *n, int *k,
void F77_zherk(int *layout, char *uplow, char *transp, int *n, int *k,
double *alpha, CBLAS_TEST_ZOMPLEX *a, int *lda,
double *beta, CBLAS_TEST_ZOMPLEX *c, int *ldc ) {
double *beta, CBLAS_TEST_ZOMPLEX *c, int *ldc
#ifdef BLAS_FORTRAN_STRLEN_END
, FORTRAN_STRLEN uplow_len, FORTRAN_STRLEN transp_len
#endif
) {

int i,j,LDA,LDC;
CBLAS_TEST_ZOMPLEX *A, *C;
enum CBLAS_UPLO uplo;
enum CBLAS_TRANSPOSE trans;
CBLAS_UPLO uplo;
CBLAS_TRANSPOSE trans;

get_uplo_type(uplow,&uplo);
get_transpose_type(transp,&trans);

if (*order == TEST_ROW_MJR) {
if (*layout == TEST_ROW_MJR) {
if (trans == CblasNoTrans) {
LDA = *k+1;
A=(CBLAS_TEST_ZOMPLEX* )malloc((*n)*(size_t)LDA*sizeof(CBLAS_TEST_ZOMPLEX ) );
A=(CBLAS_TEST_ZOMPLEX* )malloc((*n)*LDA*sizeof(CBLAS_TEST_ZOMPLEX ) );
for( i=0; i<*n; i++ )
for( j=0; j<*k; j++ ) {
A[i*LDA+j].real=a[j*(*lda)+i].real;
@@ -230,7 +329,7 @@ void F77_zherk(int *order, char *uplow, char *transp, int *n, int *k,
}
else{
LDA = *n+1;
A=(CBLAS_TEST_ZOMPLEX* )malloc((*k)*(size_t)LDA*sizeof(CBLAS_TEST_ZOMPLEX ) );
A=(CBLAS_TEST_ZOMPLEX* )malloc((*k)*LDA*sizeof(CBLAS_TEST_ZOMPLEX ) );
for( i=0; i<*k; i++ )
for( j=0; j<*n; j++ ) {
A[i*LDA+j].real=a[j*(*lda)+i].real;
@@ -238,7 +337,7 @@ void F77_zherk(int *order, char *uplow, char *transp, int *n, int *k,
}
}
LDC = *n+1;
C=(CBLAS_TEST_ZOMPLEX* )malloc((*n)*(size_t)LDC*sizeof(CBLAS_TEST_ZOMPLEX ) );
C=(CBLAS_TEST_ZOMPLEX* )malloc((*n)*LDC*sizeof(CBLAS_TEST_ZOMPLEX ) );
for( i=0; i<*n; i++ )
for( j=0; j<*n; j++ ) {
C[i*LDC+j].real=c[j*(*ldc)+i].real;
@@ -254,7 +353,7 @@ void F77_zherk(int *order, char *uplow, char *transp, int *n, int *k,
free(A);
free(C);
}
else if (*order == TEST_COL_MJR)
else if (*layout == TEST_COL_MJR)
cblas_zherk(CblasColMajor, uplo, trans, *n, *k, *alpha, a, *lda, *beta,
c, *ldc );
else
@@ -262,22 +361,26 @@ void F77_zherk(int *order, char *uplow, char *transp, int *n, int *k,
c, *ldc );
}

void F77_zsyrk(int *order, char *uplow, char *transp, int *n, int *k,
void F77_zsyrk(int *layout, char *uplow, char *transp, int *n, int *k,
CBLAS_TEST_ZOMPLEX *alpha, CBLAS_TEST_ZOMPLEX *a, int *lda,
CBLAS_TEST_ZOMPLEX *beta, CBLAS_TEST_ZOMPLEX *c, int *ldc ) {
CBLAS_TEST_ZOMPLEX *beta, CBLAS_TEST_ZOMPLEX *c, int *ldc
#ifdef BLAS_FORTRAN_STRLEN_END
, FORTRAN_STRLEN uplow_len, FORTRAN_STRLEN transp_len
#endif
) {

int i,j,LDA,LDC;
CBLAS_TEST_ZOMPLEX *A, *C;
enum CBLAS_UPLO uplo;
enum CBLAS_TRANSPOSE trans;
CBLAS_UPLO uplo;
CBLAS_TRANSPOSE trans;

get_uplo_type(uplow,&uplo);
get_transpose_type(transp,&trans);

if (*order == TEST_ROW_MJR) {
if (*layout == TEST_ROW_MJR) {
if (trans == CblasNoTrans) {
LDA = *k+1;
A=(CBLAS_TEST_ZOMPLEX* )malloc((*n)*(size_t)LDA*sizeof(CBLAS_TEST_ZOMPLEX));
A=(CBLAS_TEST_ZOMPLEX* )malloc((*n)*LDA*sizeof(CBLAS_TEST_ZOMPLEX));
for( i=0; i<*n; i++ )
for( j=0; j<*k; j++ ) {
A[i*LDA+j].real=a[j*(*lda)+i].real;
@@ -286,7 +389,7 @@ void F77_zsyrk(int *order, char *uplow, char *transp, int *n, int *k,
}
else{
LDA = *n+1;
A=(CBLAS_TEST_ZOMPLEX* )malloc((*k)*(size_t)LDA*sizeof(CBLAS_TEST_ZOMPLEX ) );
A=(CBLAS_TEST_ZOMPLEX* )malloc((*k)*LDA*sizeof(CBLAS_TEST_ZOMPLEX ) );
for( i=0; i<*k; i++ )
for( j=0; j<*n; j++ ) {
A[i*LDA+j].real=a[j*(*lda)+i].real;
@@ -294,7 +397,7 @@ void F77_zsyrk(int *order, char *uplow, char *transp, int *n, int *k,
}
}
LDC = *n+1;
C=(CBLAS_TEST_ZOMPLEX* )malloc((*n)*(size_t)LDC*sizeof(CBLAS_TEST_ZOMPLEX ) );
C=(CBLAS_TEST_ZOMPLEX* )malloc((*n)*LDC*sizeof(CBLAS_TEST_ZOMPLEX ) );
for( i=0; i<*n; i++ )
for( j=0; j<*n; j++ ) {
C[i*LDC+j].real=c[j*(*ldc)+i].real;
@@ -310,31 +413,35 @@ void F77_zsyrk(int *order, char *uplow, char *transp, int *n, int *k,
free(A);
free(C);
}
else if (*order == TEST_COL_MJR)
else if (*layout == TEST_COL_MJR)
cblas_zsyrk(CblasColMajor, uplo, trans, *n, *k, alpha, a, *lda, beta,
c, *ldc );
else
cblas_zsyrk(UNDEFINED, uplo, trans, *n, *k, alpha, a, *lda, beta,
c, *ldc );
}
void F77_zher2k(int *order, char *uplow, char *transp, int *n, int *k,
void F77_zher2k(int *layout, char *uplow, char *transp, int *n, int *k,
CBLAS_TEST_ZOMPLEX *alpha, CBLAS_TEST_ZOMPLEX *a, int *lda,
CBLAS_TEST_ZOMPLEX *b, int *ldb, double *beta,
CBLAS_TEST_ZOMPLEX *c, int *ldc ) {
CBLAS_TEST_ZOMPLEX *c, int *ldc
#ifdef BLAS_FORTRAN_STRLEN_END
, FORTRAN_STRLEN uplow_len, FORTRAN_STRLEN transp_len
#endif
) {
int i,j,LDA,LDB,LDC;
CBLAS_TEST_ZOMPLEX *A, *B, *C;
enum CBLAS_UPLO uplo;
enum CBLAS_TRANSPOSE trans;
CBLAS_UPLO uplo;
CBLAS_TRANSPOSE trans;

get_uplo_type(uplow,&uplo);
get_transpose_type(transp,&trans);

if (*order == TEST_ROW_MJR) {
if (*layout == TEST_ROW_MJR) {
if (trans == CblasNoTrans) {
LDA = *k+1;
LDB = *k+1;
A=(CBLAS_TEST_ZOMPLEX* )malloc((*n)*(size_t)LDA*sizeof(CBLAS_TEST_ZOMPLEX ));
B=(CBLAS_TEST_ZOMPLEX* )malloc((*n)*(size_t)LDB*sizeof(CBLAS_TEST_ZOMPLEX ));
A=(CBLAS_TEST_ZOMPLEX* )malloc((*n)*LDA*sizeof(CBLAS_TEST_ZOMPLEX ));
B=(CBLAS_TEST_ZOMPLEX* )malloc((*n)*LDB*sizeof(CBLAS_TEST_ZOMPLEX ));
for( i=0; i<*n; i++ )
for( j=0; j<*k; j++ ) {
A[i*LDA+j].real=a[j*(*lda)+i].real;
@@ -346,8 +453,8 @@ void F77_zher2k(int *order, char *uplow, char *transp, int *n, int *k,
else {
LDA = *n+1;
LDB = *n+1;
A=(CBLAS_TEST_ZOMPLEX* )malloc( (size_t)LDA*(*k)*sizeof(CBLAS_TEST_ZOMPLEX ) );
B=(CBLAS_TEST_ZOMPLEX* )malloc( (size_t)LDB*(*k)*sizeof(CBLAS_TEST_ZOMPLEX ) );
A=(CBLAS_TEST_ZOMPLEX* )malloc( LDA*(*k)*sizeof(CBLAS_TEST_ZOMPLEX ) );
B=(CBLAS_TEST_ZOMPLEX* )malloc( LDB*(*k)*sizeof(CBLAS_TEST_ZOMPLEX ) );
for( i=0; i<*k; i++ )
for( j=0; j<*n; j++ ){
A[i*LDA+j].real=a[j*(*lda)+i].real;
@@ -357,7 +464,7 @@ void F77_zher2k(int *order, char *uplow, char *transp, int *n, int *k,
}
}
LDC = *n+1;
C=(CBLAS_TEST_ZOMPLEX* )malloc( (*n)*(size_t)LDC*sizeof(CBLAS_TEST_ZOMPLEX ) );
C=(CBLAS_TEST_ZOMPLEX* )malloc( (*n)*LDC*sizeof(CBLAS_TEST_ZOMPLEX ) );
for( i=0; i<*n; i++ )
for( j=0; j<*n; j++ ) {
C[i*LDC+j].real=c[j*(*ldc)+i].real;
@@ -374,31 +481,35 @@ void F77_zher2k(int *order, char *uplow, char *transp, int *n, int *k,
free(B);
free(C);
}
else if (*order == TEST_COL_MJR)
else if (*layout == TEST_COL_MJR)
cblas_zher2k(CblasColMajor, uplo, trans, *n, *k, alpha, a, *lda,
b, *ldb, *beta, c, *ldc );
else
cblas_zher2k(UNDEFINED, uplo, trans, *n, *k, alpha, a, *lda,
b, *ldb, *beta, c, *ldc );
}
void F77_zsyr2k(int *order, char *uplow, char *transp, int *n, int *k,
void F77_zsyr2k(int *layout, char *uplow, char *transp, int *n, int *k,
CBLAS_TEST_ZOMPLEX *alpha, CBLAS_TEST_ZOMPLEX *a, int *lda,
CBLAS_TEST_ZOMPLEX *b, int *ldb, CBLAS_TEST_ZOMPLEX *beta,
CBLAS_TEST_ZOMPLEX *c, int *ldc ) {
CBLAS_TEST_ZOMPLEX *c, int *ldc
#ifdef BLAS_FORTRAN_STRLEN_END
, FORTRAN_STRLEN uplow_len, FORTRAN_STRLEN transp_len
#endif
) {
int i,j,LDA,LDB,LDC;
CBLAS_TEST_ZOMPLEX *A, *B, *C;
enum CBLAS_UPLO uplo;
enum CBLAS_TRANSPOSE trans;
CBLAS_UPLO uplo;
CBLAS_TRANSPOSE trans;

get_uplo_type(uplow,&uplo);
get_transpose_type(transp,&trans);

if (*order == TEST_ROW_MJR) {
if (*layout == TEST_ROW_MJR) {
if (trans == CblasNoTrans) {
LDA = *k+1;
LDB = *k+1;
A=(CBLAS_TEST_ZOMPLEX* )malloc((*n)*(size_t)LDA*sizeof(CBLAS_TEST_ZOMPLEX));
B=(CBLAS_TEST_ZOMPLEX* )malloc((*n)*(size_t)LDB*sizeof(CBLAS_TEST_ZOMPLEX));
A=(CBLAS_TEST_ZOMPLEX* )malloc((*n)*LDA*sizeof(CBLAS_TEST_ZOMPLEX));
B=(CBLAS_TEST_ZOMPLEX* )malloc((*n)*LDB*sizeof(CBLAS_TEST_ZOMPLEX));
for( i=0; i<*n; i++ )
for( j=0; j<*k; j++ ) {
A[i*LDA+j].real=a[j*(*lda)+i].real;
@@ -410,8 +521,8 @@ void F77_zsyr2k(int *order, char *uplow, char *transp, int *n, int *k,
else {
LDA = *n+1;
LDB = *n+1;
A=(CBLAS_TEST_ZOMPLEX* )malloc((size_t)LDA*(*k)*sizeof(CBLAS_TEST_ZOMPLEX));
B=(CBLAS_TEST_ZOMPLEX* )malloc((size_t)LDB*(*k)*sizeof(CBLAS_TEST_ZOMPLEX));
A=(CBLAS_TEST_ZOMPLEX* )malloc(LDA*(*k)*sizeof(CBLAS_TEST_ZOMPLEX));
B=(CBLAS_TEST_ZOMPLEX* )malloc(LDB*(*k)*sizeof(CBLAS_TEST_ZOMPLEX));
for( i=0; i<*k; i++ )
for( j=0; j<*n; j++ ){
A[i*LDA+j].real=a[j*(*lda)+i].real;
@@ -421,7 +532,7 @@ void F77_zsyr2k(int *order, char *uplow, char *transp, int *n, int *k,
}
}
LDC = *n+1;
C=(CBLAS_TEST_ZOMPLEX* )malloc( (*n)*(size_t)LDC*sizeof(CBLAS_TEST_ZOMPLEX));
C=(CBLAS_TEST_ZOMPLEX* )malloc( (*n)*LDC*sizeof(CBLAS_TEST_ZOMPLEX));
for( i=0; i<*n; i++ )
for( j=0; j<*n; j++ ) {
C[i*LDC+j].real=c[j*(*ldc)+i].real;
@@ -438,32 +549,36 @@ void F77_zsyr2k(int *order, char *uplow, char *transp, int *n, int *k,
free(B);
free(C);
}
else if (*order == TEST_COL_MJR)
else if (*layout == TEST_COL_MJR)
cblas_zsyr2k(CblasColMajor, uplo, trans, *n, *k, alpha, a, *lda,
b, *ldb, beta, c, *ldc );
else
cblas_zsyr2k(UNDEFINED, uplo, trans, *n, *k, alpha, a, *lda,
b, *ldb, beta, c, *ldc );
}
void F77_ztrmm(int *order, char *rtlf, char *uplow, char *transp, char *diagn,
void F77_ztrmm(int *layout, char *rtlf, char *uplow, char *transp, char *diagn,
int *m, int *n, CBLAS_TEST_ZOMPLEX *alpha, CBLAS_TEST_ZOMPLEX *a,
int *lda, CBLAS_TEST_ZOMPLEX *b, int *ldb) {
int *lda, CBLAS_TEST_ZOMPLEX *b, int *ldb
#ifdef BLAS_FORTRAN_STRLEN_END
, FORTRAN_STRLEN rtlf_len, FORTRAN_STRLEN uplow_len, FORTRAN_STRLEN transp_len, FORTRAN_STRLEN diagn_len
#endif
) {
int i,j,LDA,LDB;
CBLAS_TEST_ZOMPLEX *A, *B;
enum CBLAS_SIDE side;
enum CBLAS_DIAG diag;
enum CBLAS_UPLO uplo;
enum CBLAS_TRANSPOSE trans;
CBLAS_SIDE side;
CBLAS_DIAG diag;
CBLAS_UPLO uplo;
CBLAS_TRANSPOSE trans;

get_uplo_type(uplow,&uplo);
get_transpose_type(transp,&trans);
get_diag_type(diagn,&diag);
get_side_type(rtlf,&side);

if (*order == TEST_ROW_MJR) {
if (*layout == TEST_ROW_MJR) {
if (side == CblasLeft) {
LDA = *m+1;
A=(CBLAS_TEST_ZOMPLEX* )malloc((*m)*(size_t)LDA*sizeof(CBLAS_TEST_ZOMPLEX));
A=(CBLAS_TEST_ZOMPLEX* )malloc((*m)*LDA*sizeof(CBLAS_TEST_ZOMPLEX));
for( i=0; i<*m; i++ )
for( j=0; j<*m; j++ ) {
A[i*LDA+j].real=a[j*(*lda)+i].real;
@@ -472,7 +587,7 @@ void F77_ztrmm(int *order, char *rtlf, char *uplow, char *transp, char *diagn,
}
else{
LDA = *n+1;
A=(CBLAS_TEST_ZOMPLEX* )malloc((*n)*(size_t)LDA*sizeof(CBLAS_TEST_ZOMPLEX));
A=(CBLAS_TEST_ZOMPLEX* )malloc((*n)*LDA*sizeof(CBLAS_TEST_ZOMPLEX));
for( i=0; i<*n; i++ )
for( j=0; j<*n; j++ ) {
A[i*LDA+j].real=a[j*(*lda)+i].real;
@@ -480,7 +595,7 @@ void F77_ztrmm(int *order, char *rtlf, char *uplow, char *transp, char *diagn,
}
}
LDB = *n+1;
B=(CBLAS_TEST_ZOMPLEX* )malloc((*m)*(size_t)LDB*sizeof(CBLAS_TEST_ZOMPLEX));
B=(CBLAS_TEST_ZOMPLEX* )malloc((*m)*LDB*sizeof(CBLAS_TEST_ZOMPLEX));
for( i=0; i<*m; i++ )
for( j=0; j<*n; j++ ) {
B[i*LDB+j].real=b[j*(*ldb)+i].real;
@@ -496,7 +611,7 @@ void F77_ztrmm(int *order, char *rtlf, char *uplow, char *transp, char *diagn,
free(A);
free(B);
}
else if (*order == TEST_COL_MJR)
else if (*layout == TEST_COL_MJR)
cblas_ztrmm(CblasColMajor, side, uplo, trans, diag, *m, *n, alpha,
a, *lda, b, *ldb);
else
@@ -504,25 +619,29 @@ void F77_ztrmm(int *order, char *rtlf, char *uplow, char *transp, char *diagn,
a, *lda, b, *ldb);
}

void F77_ztrsm(int *order, char *rtlf, char *uplow, char *transp, char *diagn,
void F77_ztrsm(int *layout, char *rtlf, char *uplow, char *transp, char *diagn,
int *m, int *n, CBLAS_TEST_ZOMPLEX *alpha, CBLAS_TEST_ZOMPLEX *a,
int *lda, CBLAS_TEST_ZOMPLEX *b, int *ldb) {
int *lda, CBLAS_TEST_ZOMPLEX *b, int *ldb
#ifdef BLAS_FORTRAN_STRLEN_END
, FORTRAN_STRLEN rtlf_len, FORTRAN_STRLEN uplow_len, FORTRAN_STRLEN transp_len, FORTRAN_STRLEN diagn_len
#endif
) {
int i,j,LDA,LDB;
CBLAS_TEST_ZOMPLEX *A, *B;
enum CBLAS_SIDE side;
enum CBLAS_DIAG diag;
enum CBLAS_UPLO uplo;
enum CBLAS_TRANSPOSE trans;
CBLAS_SIDE side;
CBLAS_DIAG diag;
CBLAS_UPLO uplo;
CBLAS_TRANSPOSE trans;

get_uplo_type(uplow,&uplo);
get_transpose_type(transp,&trans);
get_diag_type(diagn,&diag);
get_side_type(rtlf,&side);

if (*order == TEST_ROW_MJR) {
if (*layout == TEST_ROW_MJR) {
if (side == CblasLeft) {
LDA = *m+1;
A=(CBLAS_TEST_ZOMPLEX* )malloc( (*m)*(size_t)LDA*sizeof(CBLAS_TEST_ZOMPLEX ) );
A=(CBLAS_TEST_ZOMPLEX* )malloc( (*m)*LDA*sizeof(CBLAS_TEST_ZOMPLEX ) );
for( i=0; i<*m; i++ )
for( j=0; j<*m; j++ ) {
A[i*LDA+j].real=a[j*(*lda)+i].real;
@@ -531,7 +650,7 @@ void F77_ztrsm(int *order, char *rtlf, char *uplow, char *transp, char *diagn,
}
else{
LDA = *n+1;
A=(CBLAS_TEST_ZOMPLEX* )malloc((*n)*(size_t)LDA*sizeof(CBLAS_TEST_ZOMPLEX));
A=(CBLAS_TEST_ZOMPLEX* )malloc((*n)*LDA*sizeof(CBLAS_TEST_ZOMPLEX));
for( i=0; i<*n; i++ )
for( j=0; j<*n; j++ ) {
A[i*LDA+j].real=a[j*(*lda)+i].real;
@@ -539,7 +658,7 @@ void F77_ztrsm(int *order, char *rtlf, char *uplow, char *transp, char *diagn,
}
}
LDB = *n+1;
B=(CBLAS_TEST_ZOMPLEX* )malloc((*m)*(size_t)LDB*sizeof(CBLAS_TEST_ZOMPLEX));
B=(CBLAS_TEST_ZOMPLEX* )malloc((*m)*LDB*sizeof(CBLAS_TEST_ZOMPLEX));
for( i=0; i<*m; i++ )
for( j=0; j<*n; j++ ) {
B[i*LDB+j].real=b[j*(*ldb)+i].real;
@@ -555,12 +674,10 @@ void F77_ztrsm(int *order, char *rtlf, char *uplow, char *transp, char *diagn,
free(A);
free(B);
}
else if (*order == TEST_COL_MJR)
else if (*layout == TEST_COL_MJR)
cblas_ztrsm(CblasColMajor, side, uplo, trans, diag, *m, *n, alpha,
a, *lda, b, *ldb);
else
cblas_ztrsm(UNDEFINED, side, uplo, trans, diag, *m, *n, alpha,
a, *lda, b, *ldb);
}



+ 650
- 102
ctest/c_zblat3.f
File diff suppressed because it is too large
View File


+ 166
- 492
ctest/cblas_test.h View File

@@ -5,18 +5,15 @@
#ifndef CBLAS_TEST_H
#define CBLAS_TEST_H
#include "cblas.h"
#include "cblas_mangling.h"

#ifdef USE64BITINT
#define int long
#endif
/* It seems all current Fortran compilers put strlen at end.
* Some historical compilers put strlen after the str argument
* or make the str argument into a struct. */
#define BLAS_FORTRAN_STRLEN_END

#if defined(_MSC_VER) && defined(__INTEL_CLANG_COMPILER)
//#define LAPACK_COMPLEX_STRUCTURE
#define NOCHANGE
#endif
/* e.g. mingw64/x86_64-w64-mingw32/include/winerror.h */
#ifdef FAILED
#undef FAILED
#ifndef FORTRAN_STRLEN
#define FORTRAN_STRLEN size_t
#endif

#define TRUE 1
@@ -33,497 +30,174 @@
typedef struct { float real; float imag; } CBLAS_TEST_COMPLEX;
typedef struct { double real; double imag; } CBLAS_TEST_ZOMPLEX;

#if defined(ADD_)
/*
* Level 1 BLAS
*/
#define F77_srotg srotgtest_
#define F77_srotmg srotmgtest_
#define F77_srot srottest_
#define F77_srotm srotmtest_
#define F77_drotg drotgtest_
#define F77_drotmg drotmgtest_
#define F77_drot drottest_
#define F77_drotm drotmtest_
#define F77_sswap sswaptest_
#define F77_scopy scopytest_
#define F77_saxpy saxpytest_
#define F77_isamax isamaxtest_
#define F77_dswap dswaptest_
#define F77_dcopy dcopytest_
#define F77_daxpy daxpytest_
#define F77_idamax idamaxtest_
#define F77_cswap cswaptest_
#define F77_ccopy ccopytest_
#define F77_caxpy caxpytest_
#define F77_icamax icamaxtest_
#define F77_zswap zswaptest_
#define F77_zcopy zcopytest_
#define F77_zaxpy zaxpytest_
#define F77_izamax izamaxtest_
#define F77_sdot sdottest_
#define F77_ddot ddottest_
#define F77_dsdot dsdottest_
#define F77_sscal sscaltest_
#define F77_dscal dscaltest_
#define F77_cscal cscaltest_
#define F77_zscal zscaltest_
#define F77_csscal csscaltest_
#define F77_zdscal zdscaltest_
#define F77_cdotu cdotutest_
#define F77_cdotc cdotctest_
#define F77_zdotu zdotutest_
#define F77_zdotc zdotctest_
#define F77_snrm2 snrm2test_
#define F77_sasum sasumtest_
#define F77_dnrm2 dnrm2test_
#define F77_dasum dasumtest_
#define F77_scnrm2 scnrm2test_
#define F77_scasum scasumtest_
#define F77_dznrm2 dznrm2test_
#define F77_dzasum dzasumtest_
#define F77_sdsdot sdsdottest_
/*
* Level 2 BLAS
*/
#define F77_s2chke cs2chke_
#define F77_d2chke cd2chke_
#define F77_c2chke cc2chke_
#define F77_z2chke cz2chke_
#define F77_ssymv cssymv_
#define F77_ssbmv cssbmv_
#define F77_sspmv csspmv_
#define F77_sger csger_
#define F77_ssyr cssyr_
#define F77_sspr csspr_
#define F77_ssyr2 cssyr2_
#define F77_sspr2 csspr2_
#define F77_dsymv cdsymv_
#define F77_dsbmv cdsbmv_
#define F77_dspmv cdspmv_
#define F77_dger cdger_
#define F77_dsyr cdsyr_
#define F77_dspr cdspr_
#define F77_dsyr2 cdsyr2_
#define F77_dspr2 cdspr2_
#define F77_chemv cchemv_
#define F77_chbmv cchbmv_
#define F77_chpmv cchpmv_
#define F77_cgeru ccgeru_
#define F77_cgerc ccgerc_
#define F77_cher ccher_
#define F77_chpr cchpr_
#define F77_cher2 ccher2_
#define F77_chpr2 cchpr2_
#define F77_zhemv czhemv_
#define F77_zhbmv czhbmv_
#define F77_zhpmv czhpmv_
#define F77_zgeru czgeru_
#define F77_zgerc czgerc_
#define F77_zher czher_
#define F77_zhpr czhpr_
#define F77_zher2 czher2_
#define F77_zhpr2 czhpr2_
#define F77_sgemv csgemv_
#define F77_sgbmv csgbmv_
#define F77_strmv cstrmv_
#define F77_stbmv cstbmv_
#define F77_stpmv cstpmv_
#define F77_strsv cstrsv_
#define F77_stbsv cstbsv_
#define F77_stpsv cstpsv_
#define F77_dgemv cdgemv_
#define F77_dgbmv cdgbmv_
#define F77_dtrmv cdtrmv_
#define F77_dtbmv cdtbmv_
#define F77_dtpmv cdtpmv_
#define F77_dtrsv cdtrsv_
#define F77_dtbsv cdtbsv_
#define F77_dtpsv cdtpsv_
#define F77_cgemv ccgemv_
#define F77_cgbmv ccgbmv_
#define F77_ctrmv cctrmv_
#define F77_ctbmv cctbmv_
#define F77_ctpmv cctpmv_
#define F77_ctrsv cctrsv_
#define F77_ctbsv cctbsv_
#define F77_ctpsv cctpsv_
#define F77_zgemv czgemv_
#define F77_zgbmv czgbmv_
#define F77_ztrmv cztrmv_
#define F77_ztbmv cztbmv_
#define F77_ztpmv cztpmv_
#define F77_ztrsv cztrsv_
#define F77_ztbsv cztbsv_
#define F77_ztpsv cztpsv_
/*
* Level 3 BLAS
*/
#define F77_s3chke cs3chke_
#define F77_d3chke cd3chke_
#define F77_c3chke cc3chke_
#define F77_z3chke cz3chke_
#define F77_chemm cchemm_
#define F77_cherk ccherk_
#define F77_cher2k ccher2k_
#define F77_zhemm czhemm_
#define F77_zherk czherk_
#define F77_zher2k czher2k_
#define F77_sgemm csgemm_
#define F77_ssymm cssymm_
#define F77_ssyrk cssyrk_
#define F77_ssyr2k cssyr2k_
#define F77_strmm cstrmm_
#define F77_strsm cstrsm_
#define F77_dgemm cdgemm_
#define F77_dsymm cdsymm_
#define F77_dsyrk cdsyrk_
#define F77_dsyr2k cdsyr2k_
#define F77_dtrmm cdtrmm_
#define F77_dtrsm cdtrsm_
#define F77_cgemm ccgemm_
#define F77_cgemm3m ccgemm3m_
#define F77_csymm ccsymm_
#define F77_csyrk ccsyrk_
#define F77_csyr2k ccsyr2k_
#define F77_ctrmm cctrmm_
#define F77_ctrsm cctrsm_
#define F77_zgemm czgemm_
#define F77_zgemm3m czgemm3m_
#define F77_zsymm czsymm_
#define F77_zsyrk czsyrk_
#define F77_zsyr2k czsyr2k_
#define F77_ztrmm cztrmm_
#define F77_ztrsm cztrsm_
#elif defined(UPCASE)
//#define F77_xerbla F77_GLOBAL(xerbla,XERBLA)
/*
* Level 1 BLAS
*/
#define F77_srotg SROTGTEST
#define F77_srotmg SROTMGTEST
#define F77_srot SROTCTEST
#define F77_srotm SROTMTEST
#define F77_drotg DROTGTEST
#define F77_drotmg DROTMGTEST
#define F77_drot DROTTEST
#define F77_drotm DROTMTEST
#define F77_sswap SSWAPTEST
#define F77_scopy SCOPYTEST
#define F77_saxpy SAXPYTEST
#define F77_isamax ISAMAXTEST
#define F77_dswap DSWAPTEST
#define F77_dcopy DCOPYTEST
#define F77_daxpy DAXPYTEST
#define F77_idamax IDAMAXTEST
#define F77_cswap CSWAPTEST
#define F77_ccopy CCOPYTEST
#define F77_caxpy CAXPYTEST
#define F77_icamax ICAMAXTEST
#define F77_zswap ZSWAPTEST
#define F77_zcopy ZCOPYTEST
#define F77_zaxpy ZAXPYTEST
#define F77_izamax IZAMAXTEST
#define F77_sdot SDOTTEST
#define F77_ddot DDOTTEST
#define F77_dsdot DSDOTTEST
#define F77_sscal SSCALTEST
#define F77_dscal DSCALTEST
#define F77_cscal CSCALTEST
#define F77_zscal ZSCALTEST
#define F77_csscal CSSCALTEST
#define F77_zdscal ZDSCALTEST
#define F77_cdotu CDOTUTEST
#define F77_cdotc CDOTCTEST
#define F77_zdotu ZDOTUTEST
#define F77_zdotc ZDOTCTEST
#define F77_snrm2 SNRM2TEST
#define F77_sasum SASUMTEST
#define F77_dnrm2 DNRM2TEST
#define F77_dasum DASUMTEST
#define F77_scnrm2 SCNRM2TEST
#define F77_scasum SCASUMTEST
#define F77_dznrm2 DZNRM2TEST
#define F77_dzasum DZASUMTEST
#define F77_sdsdot SDSDOTTEST
#define F77_srotg F77_GLOBAL(srotgtest,SROTGTEST)
#define F77_srotmg F77_GLOBAL(srotmgtest,SROTMGTEST)
#define F77_srot F77_GLOBAL(srottest,SROTTEST)
#define F77_srotm F77_GLOBAL(srotmtest,SROTMTEST)
#define F77_drotg F77_GLOBAL(drotgtest,DROTGTEST)
#define F77_drotmg F77_GLOBAL(drotmgtest,DROTMGTEST)
#define F77_drot F77_GLOBAL(drottest,DROTTEST)
#define F77_drotm F77_GLOBAL(drotmtest,DROTMTEST)
#define F77_sswap F77_GLOBAL(sswaptest,SSWAPTEST)
#define F77_scopy F77_GLOBAL(scopytest,SCOPYTEST)
#define F77_saxpy F77_GLOBAL(saxpytest,SAXPYTEST)
#define F77_isamax F77_GLOBAL(isamaxtest,ISAMAXTEST)
#define F77_dswap F77_GLOBAL(dswaptest,DSWAPTEST)
#define F77_dcopy F77_GLOBAL(dcopytest,DCOPYTEST)
#define F77_daxpy F77_GLOBAL(daxpytest,DAXPYTEST)
#define F77_idamax F77_GLOBAL(idamaxtest,IDAMAXTEST)
#define F77_cswap F77_GLOBAL(cswaptest,CSWAPTEST)
#define F77_ccopy F77_GLOBAL(ccopytest,CCOPYTEST)
#define F77_caxpy F77_GLOBAL(caxpytest,CAXPYTEST)
#define F77_icamax F77_GLOBAL(icamaxtest,ICAMAXTEST)
#define F77_zswap F77_GLOBAL(zswaptest,ZSWAPTEST)
#define F77_zcopy F77_GLOBAL(zcopytest,ZCOPYTEST)
#define F77_zaxpy F77_GLOBAL(zaxpytest,ZAXPYTEST)
#define F77_izamax F77_GLOBAL(izamaxtest,IZAMAXTEST)
#define F77_sdot F77_GLOBAL(sdottest,SDOTTEST)
#define F77_ddot F77_GLOBAL(ddottest,DDOTTEST)
#define F77_dsdot F77_GLOBAL(dsdottest,DSDOTTEST)
#define F77_sscal F77_GLOBAL(sscaltest,SSCALTEST)
#define F77_dscal F77_GLOBAL(dscaltest,DSCALTEST)
#define F77_cscal F77_GLOBAL(cscaltest,CSCALTEST)
#define F77_zscal F77_GLOBAL(zscaltest,ZSCALTEST)
#define F77_csscal F77_GLOBAL(csscaltest,CSSCALTEST)
#define F77_zdscal F77_GLOBAL(zdscaltest,ZDSCALTEST)
#define F77_cdotu F77_GLOBAL(cdotutest,CDOTUTEST)
#define F77_cdotc F77_GLOBAL(cdotctest,CDOTCTEST)
#define F77_zdotu F77_GLOBAL(zdotutest,ZDOTUTEST)
#define F77_zdotc F77_GLOBAL(zdotctest,ZDOTCTEST)
#define F77_snrm2 F77_GLOBAL(snrm2test,SNRM2TEST)
#define F77_sasum F77_GLOBAL(sasumtest,SASUMTEST)
#define F77_dnrm2 F77_GLOBAL(dnrm2test,DNRM2TEST)
#define F77_dasum F77_GLOBAL(dasumtest,DASUMTEST)
#define F77_scnrm2 F77_GLOBAL(scnrm2test,SCNRM2TEST)
#define F77_scasum F77_GLOBAL(scasumtest,SCASUMTEST)
#define F77_dznrm2 F77_GLOBAL(dznrm2test,DZNRM2TEST)
#define F77_dzasum F77_GLOBAL(dzasumtest,DZASUMTEST)
#define F77_sdsdot F77_GLOBAL(sdsdottest, SDSDOTTEST)
/*
* Level 2 BLAS
*/
#define F77_s2chke CS2CHKE
#define F77_d2chke CD2CHKE
#define F77_c2chke CC2CHKE
#define F77_z2chke CZ2CHKE
#define F77_ssymv CSSYMV
#define F77_ssbmv CSSBMV
#define F77_sspmv CSSPMV
#define F77_sger CSGER
#define F77_ssyr CSSYR
#define F77_sspr CSSPR
#define F77_ssyr2 CSSYR2
#define F77_sspr2 CSSPR2
#define F77_dsymv CDSYMV
#define F77_dsbmv CDSBMV
#define F77_dspmv CDSPMV
#define F77_dger CDGER
#define F77_dsyr CDSYR
#define F77_dspr CDSPR
#define F77_dsyr2 CDSYR2
#define F77_dspr2 CDSPR2
#define F77_chemv CCHEMV
#define F77_chbmv CCHBMV
#define F77_chpmv CCHPMV
#define F77_cgeru CCGERU
#define F77_cgerc CCGERC
#define F77_cher CCHER
#define F77_chpr CCHPR
#define F77_cher2 CCHER2
#define F77_chpr2 CCHPR2
#define F77_zhemv CZHEMV
#define F77_zhbmv CZHBMV
#define F77_zhpmv CZHPMV
#define F77_zgeru CZGERU
#define F77_zgerc CZGERC
#define F77_zher CZHER
#define F77_zhpr CZHPR
#define F77_zher2 CZHER2
#define F77_zhpr2 CZHPR2
#define F77_sgemv CSGEMV
#define F77_sgbmv CSGBMV
#define F77_strmv CSTRMV
#define F77_stbmv CSTBMV
#define F77_stpmv CSTPMV
#define F77_strsv CSTRSV
#define F77_stbsv CSTBSV
#define F77_stpsv CSTPSV
#define F77_dgemv CDGEMV
#define F77_dgbmv CDGBMV
#define F77_dtrmv CDTRMV
#define F77_dtbmv CDTBMV
#define F77_dtpmv CDTPMV
#define F77_dtrsv CDTRSV
#define F77_dtbsv CDTBSV
#define F77_dtpsv CDTPSV
#define F77_cgemv CCGEMV
#define F77_cgbmv CCGBMV
#define F77_ctrmv CCTRMV
#define F77_ctbmv CCTBMV
#define F77_ctpmv CCTPMV
#define F77_ctrsv CCTRSV
#define F77_ctbsv CCTBSV
#define F77_ctpsv CCTPSV
#define F77_zgemv CZGEMV
#define F77_zgbmv CZGBMV
#define F77_ztrmv CZTRMV
#define F77_ztbmv CZTBMV
#define F77_ztpmv CZTPMV
#define F77_ztrsv CZTRSV
#define F77_ztbsv CZTBSV
#define F77_ztpsv CZTPSV
#define F77_s2chke F77_GLOBAL(cs2chke,CS2CHKE)
#define F77_d2chke F77_GLOBAL(cd2chke,CD2CHKE)
#define F77_c2chke F77_GLOBAL(cc2chke,CC2CHKE)
#define F77_z2chke F77_GLOBAL(cz2chke,CZ2CHKE)
#define F77_ssymv F77_GLOBAL(cssymv,CSSYMV)
#define F77_ssbmv F77_GLOBAL(cssbmv,CSSBMV)
#define F77_sspmv F77_GLOBAL(csspmv,CSSPMV)
#define F77_sger F77_GLOBAL(csger,CSGER)
#define F77_ssyr F77_GLOBAL(cssyr,CSSYR)
#define F77_sspr F77_GLOBAL(csspr,CSSPR)
#define F77_ssyr2 F77_GLOBAL(cssyr2,CSSYR2)
#define F77_sspr2 F77_GLOBAL(csspr2,CSSPR2)
#define F77_dsymv F77_GLOBAL(cdsymv,CDSYMV)
#define F77_dsbmv F77_GLOBAL(cdsbmv,CDSBMV)
#define F77_dspmv F77_GLOBAL(cdspmv,CDSPMV)
#define F77_dger F77_GLOBAL(cdger,CDGER)
#define F77_dsyr F77_GLOBAL(cdsyr,CDSYR)
#define F77_dspr F77_GLOBAL(cdspr,CDSPR)
#define F77_dsyr2 F77_GLOBAL(cdsyr2,CDSYR2)
#define F77_dspr2 F77_GLOBAL(cdspr2,CDSPR2)
#define F77_chemv F77_GLOBAL(cchemv,CCHEMV)
#define F77_chbmv F77_GLOBAL(cchbmv,CCHBMV)
#define F77_chpmv F77_GLOBAL(cchpmv,CCHPMV)
#define F77_cgeru F77_GLOBAL(ccgeru,CCGERU)
#define F77_cgerc F77_GLOBAL(ccgerc,CCGERC)
#define F77_cher F77_GLOBAL(ccher,CCHER)
#define F77_chpr F77_GLOBAL(cchpr,CCHPR)
#define F77_cher2 F77_GLOBAL(ccher2,CCHER2)
#define F77_chpr2 F77_GLOBAL(cchpr2,CCHPR2)
#define F77_zhemv F77_GLOBAL(czhemv,CZHEMV)
#define F77_zhbmv F77_GLOBAL(czhbmv,CZHBMV)
#define F77_zhpmv F77_GLOBAL(czhpmv,CZHPMV)
#define F77_zgeru F77_GLOBAL(czgeru,CZGERU)
#define F77_zgerc F77_GLOBAL(czgerc,CZGERC)
#define F77_zher F77_GLOBAL(czher,CZHER)
#define F77_zhpr F77_GLOBAL(czhpr,CZHPR)
#define F77_zher2 F77_GLOBAL(czher2,CZHER2)
#define F77_zhpr2 F77_GLOBAL(czhpr2,CZHPR2)
#define F77_sgemv F77_GLOBAL(csgemv,CSGEMV)
#define F77_sgbmv F77_GLOBAL(csgbmv,CSGBMV)
#define F77_strmv F77_GLOBAL(cstrmv,CSTRMV)
#define F77_stbmv F77_GLOBAL(cstbmv,CSTBMV)
#define F77_stpmv F77_GLOBAL(cstpmv,CSTPMV)
#define F77_strsv F77_GLOBAL(cstrsv,CSTRSV)
#define F77_stbsv F77_GLOBAL(cstbsv,CSTBSV)
#define F77_stpsv F77_GLOBAL(cstpsv,CSTPSV)
#define F77_dgemv F77_GLOBAL(cdgemv,CDGEMV)
#define F77_dgbmv F77_GLOBAL(cdgbmv,CDGBMV)
#define F77_dtrmv F77_GLOBAL(cdtrmv,CDTRMV)
#define F77_dtbmv F77_GLOBAL(cdtbmv,CDTBMV)
#define F77_dtpmv F77_GLOBAL(cdtpmv,CDTPMV)
#define F77_dtrsv F77_GLOBAL(cdtrsv,CDTRSV)
#define F77_dtbsv F77_GLOBAL(cdtbsv,CDTBSV)
#define F77_dtpsv F77_GLOBAL(cdtpsv,CDTPSV)
#define F77_cgemv F77_GLOBAL(ccgemv,CCGEMV)
#define F77_cgbmv F77_GLOBAL(ccgbmv,CCGBMV)
#define F77_ctrmv F77_GLOBAL(cctrmv,CCTRMV)
#define F77_ctbmv F77_GLOBAL(cctbmv,CCTBMV)
#define F77_ctpmv F77_GLOBAL(cctpmv,CCTPMV)
#define F77_ctrsv F77_GLOBAL(cctrsv,CCTRSV)
#define F77_ctbsv F77_GLOBAL(cctbsv,CCTBSV)
#define F77_ctpsv F77_GLOBAL(cctpsv,CCTPSV)
#define F77_zgemv F77_GLOBAL(czgemv,CZGEMV)
#define F77_zgbmv F77_GLOBAL(czgbmv,CZGBMV)
#define F77_ztrmv F77_GLOBAL(cztrmv,CZTRMV)
#define F77_ztbmv F77_GLOBAL(cztbmv,CZTBMV)
#define F77_ztpmv F77_GLOBAL(cztpmv,CZTPMV)
#define F77_ztrsv F77_GLOBAL(cztrsv,CZTRSV)
#define F77_ztbsv F77_GLOBAL(cztbsv,CZTBSV)
#define F77_ztpsv F77_GLOBAL(cztpsv,CZTPSV)
/*
* Level 3 BLAS
*/
#define F77_s3chke CS3CHKE
#define F77_d3chke CD3CHKE
#define F77_c3chke CC3CHKE
#define F77_z3chke CZ3CHKE
#define F77_chemm CCHEMM
#define F77_cherk CCHERK
#define F77_cher2k CCHER2K
#define F77_zhemm CZHEMM
#define F77_zherk CZHERK
#define F77_zher2k CZHER2K
#define F77_sgemm CSGEMM
#define F77_ssymm CSSYMM
#define F77_ssyrk CSSYRK
#define F77_ssyr2k CSSYR2K
#define F77_strmm CSTRMM
#define F77_strsm CSTRSM
#define F77_dgemm CDGEMM
#define F77_dsymm CDSYMM
#define F77_dsyrk CDSYRK
#define F77_dsyr2k CDSYR2K
#define F77_dtrmm CDTRMM
#define F77_dtrsm CDTRSM
#define F77_cgemm CCGEMM
#define F77_cgemm3m CCGEMM3M
#define F77_csymm CCSYMM
#define F77_csyrk CCSYRK
#define F77_csyr2k CCSYR2K
#define F77_ctrmm CCTRMM
#define F77_ctrsm CCTRSM
#define F77_zgemm CZGEMM
#define F77_zgemm3m CZGEMM3M
#define F77_zsymm CZSYMM
#define F77_zsyrk CZSYRK
#define F77_zsyr2k CZSYR2K
#define F77_ztrmm CZTRMM
#define F77_ztrsm CZTRSM
#elif defined(NOCHANGE)
/*
* Level 1 BLAS
*/
#define F77_srotg srotgtest
#define F77_srotmg srotmgtest
#define F77_srot srottest
#define F77_srotm srotmtest
#define F77_drotg drotgtest
#define F77_drotmg drotmgtest
#define F77_drot drottest
#define F77_drotm drotmtest
#define F77_sswap sswaptest
#define F77_scopy scopytest
#define F77_saxpy saxpytest
#define F77_isamax isamaxtest
#define F77_dswap dswaptest
#define F77_dcopy dcopytest
#define F77_daxpy daxpytest
#define F77_idamax idamaxtest
#define F77_cswap cswaptest
#define F77_ccopy ccopytest
#define F77_caxpy caxpytest
#define F77_icamax icamaxtest
#define F77_zswap zswaptest
#define F77_zcopy zcopytest
#define F77_zaxpy zaxpytest
#define F77_izamax izamaxtest
#define F77_sdot sdottest
#define F77_ddot ddottest
#define F77_dsdot dsdottest
#define F77_sscal sscaltest
#define F77_dscal dscaltest
#define F77_cscal cscaltest
#define F77_zscal zscaltest
#define F77_csscal csscaltest
#define F77_zdscal zdscaltest
#define F77_cdotu cdotutest
#define F77_cdotc cdotctest
#define F77_zdotu zdotutest
#define F77_zdotc zdotctest
#define F77_snrm2 snrm2test
#define F77_sasum sasumtest
#define F77_dnrm2 dnrm2test
#define F77_dasum dasumtest
#define F77_scnrm2 scnrm2test
#define F77_scasum scasumtest
#define F77_dznrm2 dznrm2test
#define F77_dzasum dzasumtest
#define F77_sdsdot sdsdottest
/*
* Level 2 BLAS
*/
#define F77_s2chke cs2chke
#define F77_d2chke cd2chke
#define F77_c2chke cc2chke
#define F77_z2chke cz2chke
#define F77_ssymv cssymv
#define F77_ssbmv cssbmv
#define F77_sspmv csspmv
#define F77_sger csger
#define F77_ssyr cssyr
#define F77_sspr csspr
#define F77_ssyr2 cssyr2
#define F77_sspr2 csspr2
#define F77_dsymv cdsymv
#define F77_dsbmv cdsbmv
#define F77_dspmv cdspmv
#define F77_dger cdger
#define F77_dsyr cdsyr
#define F77_dspr cdspr
#define F77_dsyr2 cdsyr2
#define F77_dspr2 cdspr2
#define F77_chemv cchemv
#define F77_chbmv cchbmv
#define F77_chpmv cchpmv
#define F77_cgeru ccgeru
#define F77_cgerc ccgerc
#define F77_cher ccher
#define F77_chpr cchpr
#define F77_cher2 ccher2
#define F77_chpr2 cchpr2
#define F77_zhemv czhemv
#define F77_zhbmv czhbmv
#define F77_zhpmv czhpmv
#define F77_zgeru czgeru
#define F77_zgerc czgerc
#define F77_zher czher
#define F77_zhpr czhpr
#define F77_zher2 czher2
#define F77_zhpr2 czhpr2
#define F77_sgemv csgemv
#define F77_sgbmv csgbmv
#define F77_strmv cstrmv
#define F77_stbmv cstbmv
#define F77_stpmv cstpmv
#define F77_strsv cstrsv
#define F77_stbsv cstbsv
#define F77_stpsv cstpsv
#define F77_dgemv cdgemv
#define F77_dgbmv cdgbmv
#define F77_dtrmv cdtrmv
#define F77_dtbmv cdtbmv
#define F77_dtpmv cdtpmv
#define F77_dtrsv cdtrsv
#define F77_dtbsv cdtbsv
#define F77_dtpsv cdtpsv
#define F77_cgemv ccgemv
#define F77_cgbmv ccgbmv
#define F77_ctrmv cctrmv
#define F77_ctbmv cctbmv
#define F77_ctpmv cctpmv
#define F77_ctrsv cctrsv
#define F77_ctbsv cctbsv
#define F77_ctpsv cctpsv
#define F77_zgemv czgemv
#define F77_zgbmv czgbmv
#define F77_ztrmv cztrmv
#define F77_ztbmv cztbmv
#define F77_ztpmv cztpmv
#define F77_ztrsv cztrsv
#define F77_ztbsv cztbsv
#define F77_ztpsv cztpsv
/*
* Level 3 BLAS
*/
#define F77_s3chke cs3chke
#define F77_d3chke cd3chke
#define F77_c3chke cc3chke
#define F77_z3chke cz3chke
#define F77_chemm cchemm
#define F77_cherk ccherk
#define F77_cher2k ccher2k
#define F77_zhemm czhemm
#define F77_zherk czherk
#define F77_zher2k czher2k
#define F77_sgemm csgemm
#define F77_ssymm cssymm
#define F77_ssyrk cssyrk
#define F77_ssyr2k cssyr2k
#define F77_strmm cstrmm
#define F77_strsm cstrsm
#define F77_dgemm cdgemm
#define F77_dsymm cdsymm
#define F77_dsyrk cdsyrk
#define F77_dsyr2k cdsyr2k
#define F77_dtrmm cdtrmm
#define F77_dtrsm cdtrsm
#define F77_cgemm ccgemm
#define F77_cgemm3m ccgemm3m
#define F77_csymm ccsymm
#define F77_csyrk ccsyrk
#define F77_csyr2k ccsyr2k
#define F77_ctrmm cctrmm
#define F77_ctrsm cctrsm
#define F77_zgemm czgemm
#define F77_zgemm3m czgemm3m
#define F77_zsymm czsymm
#define F77_zsyrk czsyrk
#define F77_zsyr2k czsyr2k
#define F77_ztrmm cztrmm
#define F77_ztrsm cztrsm
#endif
#define F77_s3chke F77_GLOBAL(cs3chke,CS3CHKE)
#define F77_d3chke F77_GLOBAL(cd3chke,CD3CHKE)
#define F77_c3chke F77_GLOBAL(cc3chke,CC3CHKE)
#define F77_z3chke F77_GLOBAL(cz3chke,CZ3CHKE)
#define F77_chemm F77_GLOBAL(cchemm,CCHEMM)
#define F77_cherk F77_GLOBAL(ccherk,CCHERK)
#define F77_cher2k F77_GLOBAL(ccher2k,CCHER2K)
#define F77_zhemm F77_GLOBAL(czhemm,CZHEMM)
#define F77_zherk F77_GLOBAL(czherk,CZHERK)
#define F77_zher2k F77_GLOBAL(czher2k,CZHER2K)
#define F77_sgemm F77_GLOBAL(csgemm,CSGEMM)
#define F77_sgemmtr F77_GLOBAL(csgemmtr,CSGEMMTR)
#define F77_ssymm F77_GLOBAL(cssymm,CSSYMM)
#define F77_ssyrk F77_GLOBAL(cssyrk,CSSYRK)
#define F77_ssyr2k F77_GLOBAL(cssyr2k,CSSYR2K)
#define F77_strmm F77_GLOBAL(cstrmm,CSTRMM)
#define F77_strsm F77_GLOBAL(cstrsm,CSTRSM)
#define F77_dgemm F77_GLOBAL(cdgemm,CDGEMM)
#define F77_dgemmtr F77_GLOBAL(cdgemmtr,CDGEMMTR)
#define F77_dsymm F77_GLOBAL(cdsymm,CDSYMM)
#define F77_dsyrk F77_GLOBAL(cdsyrk,CDSYRK)
#define F77_dsyr2k F77_GLOBAL(cdsyr2k,CDSYR2K)
#define F77_dtrmm F77_GLOBAL(cdtrmm,CDTRMM)
#define F77_dtrsm F77_GLOBAL(cdtrsm,CDTRSM)
#define F77_cgemm F77_GLOBAL(ccgemm,CCGEMM)
#define F77_cgemmtr F77_GLOBAL(ccgemmtr,CCGEMMTR)
#define F77_csymm F77_GLOBAL(ccsymm,CCSYMM)
#define F77_csyrk F77_GLOBAL(ccsyrk,CCSYRK)
#define F77_csyr2k F77_GLOBAL(ccsyr2k,CCSYR2K)
#define F77_ctrmm F77_GLOBAL(cctrmm,CCTRMM)
#define F77_ctrsm F77_GLOBAL(cctrsm,CCTRSM)
#define F77_zgemm F77_GLOBAL(czgemm,CZGEMM)
#define F77_zgemmtr F77_GLOBAL(czgemmtr,CZGEMMTR)
#define F77_zsymm F77_GLOBAL(czsymm,CZSYMM)
#define F77_zsyrk F77_GLOBAL(czsyrk,CZSYRK)
#define F77_zsyr2k F77_GLOBAL(czsyr2k,CZSYR2K)
#define F77_ztrmm F77_GLOBAL(cztrmm,CZTRMM)
#define F77_ztrsm F77_GLOBAL(cztrsm, CZTRSM)

void get_transpose_type(char *type, enum CBLAS_TRANSPOSE *trans);
void get_uplo_type(char *type, enum CBLAS_UPLO *uplo);
void get_diag_type(char *type, enum CBLAS_DIAG *diag);
void get_side_type(char *type, enum CBLAS_SIDE *side);
void get_transpose_type(char *type, CBLAS_TRANSPOSE *trans);
void get_uplo_type(char *type, CBLAS_UPLO *uplo);
void get_diag_type(char *type, CBLAS_DIAG *diag);
void get_side_type(char *type, CBLAS_SIDE *side);

#endif /* CBLAS_TEST_H */

+ 3
- 2
ctest/cin3 View File

@@ -1,12 +1,12 @@
'CBLAT3.SNAP' NAME OF SNAPSHOT OUTPUT FILE
-1 UNIT NUMBER OF SNAPSHOT FILE (NOT USED IF .LT. 0)
F LOGICAL FLAG, T TO REWIND SNAPSHOT FILE AFTER EACH RECORD.
T LOGICAL FLAG, T TO STOP ON FAILURES.
F LOGICAL FLAG, T TO STOP ON FAILURES.
T LOGICAL FLAG, T TO TEST ERROR EXITS.
2 0 TO TEST COLUMN-MAJOR, 1 TO TEST ROW-MAJOR, 2 TO TEST BOTH
16.0 THRESHOLD VALUE OF TEST RATIO
6 NUMBER OF VALUES OF N
0 1 2 3 5 9 35 VALUES OF N
0 1 2 3 5 9 VALUES OF N
3 NUMBER OF VALUES OF ALPHA
(0.0,0.0) (1.0,0.0) (0.7,-0.9) VALUES OF ALPHA
3 NUMBER OF VALUES OF BETA
@@ -20,3 +20,4 @@ cblas_cherk T PUT F FOR NO TEST. SAME COLUMNS.
cblas_csyrk T PUT F FOR NO TEST. SAME COLUMNS.
cblas_cher2k T PUT F FOR NO TEST. SAME COLUMNS.
cblas_csyr2k T PUT F FOR NO TEST. SAME COLUMNS.
cblas_cgemmtr T PUT F FOR NO TEST. SAME COLUMNS.

+ 10
- 9
ctest/din3 View File

@@ -1,19 +1,20 @@
'DBLAT3.SNAP' NAME OF SNAPSHOT OUTPUT FILE
-1 UNIT NUMBER OF SNAPSHOT FILE (NOT USED IF .LT. 0)
F LOGICAL FLAG, T TO REWIND SNAPSHOT FILE AFTER EACH RECORD.
T LOGICAL FLAG, T TO STOP ON FAILURES.
F LOGICAL FLAG, T TO STOP ON FAILURES.
T LOGICAL FLAG, T TO TEST ERROR EXITS.
2 0 TO TEST COLUMN-MAJOR, 1 TO TEST ROW-MAJOR, 2 TO TEST BOTH
16.0 THRESHOLD VALUE OF TEST RATIO
7 NUMBER OF VALUES OF N
1 2 3 5 7 9 35 VALUES OF N
6 NUMBER OF VALUES OF N
1 2 3 5 7 9 VALUES OF N
3 NUMBER OF VALUES OF ALPHA
0.0 1.0 0.7 VALUES OF ALPHA
3 NUMBER OF VALUES OF BETA
0.0 1.0 1.3 VALUES OF BETA
cblas_dgemm T PUT F FOR NO TEST. SAME COLUMNS.
cblas_dsymm T PUT F FOR NO TEST. SAME COLUMNS.
cblas_dtrmm T PUT F FOR NO TEST. SAME COLUMNS.
cblas_dtrsm T PUT F FOR NO TEST. SAME COLUMNS.
cblas_dsyrk T PUT F FOR NO TEST. SAME COLUMNS.
cblas_dsyr2k T PUT F FOR NO TEST. SAME COLUMNS.
cblas_dgemm T PUT F FOR NO TEST. SAME COLUMNS.
cblas_dsymm T PUT F FOR NO TEST. SAME COLUMNS.
cblas_dtrmm T PUT F FOR NO TEST. SAME COLUMNS.
cblas_dtrsm T PUT F FOR NO TEST. SAME COLUMNS.
cblas_dsyrk T PUT F FOR NO TEST. SAME COLUMNS.
cblas_dsyr2k T PUT F FOR NO TEST. SAME COLUMNS.
cblas_dgemmtr T PUT F FOR NO TEST. SAME COLUMNS.

+ 10
- 9
ctest/sin3 View File

@@ -1,19 +1,20 @@
'SBLAT3.SNAP' NAME OF SNAPSHOT OUTPUT FILE
-1 UNIT NUMBER OF SNAPSHOT FILE (NOT USED IF .LT. 0)
F LOGICAL FLAG, T TO REWIND SNAPSHOT FILE AFTER EACH RECORD.
T LOGICAL FLAG, T TO STOP ON FAILURES.
F LOGICAL FLAG, T TO STOP ON FAILURES.
T LOGICAL FLAG, T TO TEST ERROR EXITS.
2 0 TO TEST COLUMN-MAJOR, 1 TO TEST ROW-MAJOR, 2 TO TEST BOTH
16.0 THRESHOLD VALUE OF TEST RATIO
7 NUMBER OF VALUES OF N
0 1 2 3 5 9 35 VALUES OF N
6 NUMBER OF VALUES OF N
0 1 2 3 5 9 VALUES OF N
3 NUMBER OF VALUES OF ALPHA
0.0 1.0 0.7 VALUES OF ALPHA
3 NUMBER OF VALUES OF BETA
0.0 1.0 1.3 VALUES OF BETA
cblas_sgemm T PUT F FOR NO TEST. SAME COLUMNS.
cblas_ssymm T PUT F FOR NO TEST. SAME COLUMNS.
cblas_strmm T PUT F FOR NO TEST. SAME COLUMNS.
cblas_strsm T PUT F FOR NO TEST. SAME COLUMNS.
cblas_ssyrk T PUT F FOR NO TEST. SAME COLUMNS.
cblas_ssyr2k T PUT F FOR NO TEST. SAME COLUMNS.
cblas_sgemm T PUT F FOR NO TEST. SAME COLUMNS.
cblas_ssymm T PUT F FOR NO TEST. SAME COLUMNS.
cblas_strmm T PUT F FOR NO TEST. SAME COLUMNS.
cblas_strsm T PUT F FOR NO TEST. SAME COLUMNS.
cblas_ssyrk T PUT F FOR NO TEST. SAME COLUMNS.
cblas_ssyr2k T PUT F FOR NO TEST. SAME COLUMNS.
cblas_sgemmtr T PUT F FOR NO TEST. SAME COLUMNS.

+ 13
- 12
ctest/zin3 View File

@@ -1,22 +1,23 @@
'ZBLAT3.SNAP' NAME OF SNAPSHOT OUTPUT FILE
-1 UNIT NUMBER OF SNAPSHOT FILE (NOT USED IF .LT. 0)
F LOGICAL FLAG, T TO REWIND SNAPSHOT FILE AFTER EACH RECORD.
T LOGICAL FLAG, T TO STOP ON FAILURES.
F LOGICAL FLAG, T TO STOP ON FAILURES.
T LOGICAL FLAG, T TO TEST ERROR EXITS.
2 0 TO TEST COLUMN-MAJOR, 1 TO TEST ROW-MAJOR, 2 TO TEST BOTH
16.0 THRESHOLD VALUE OF TEST RATIO
7 NUMBER OF VALUES OF N
0 1 2 3 5 9 35 VALUES OF N
6 NUMBER OF VALUES OF N
0 1 2 3 5 9 VALUES OF N
3 NUMBER OF VALUES OF ALPHA
(0.0,0.0) (1.0,0.0) (0.7,-0.9) VALUES OF ALPHA
3 NUMBER OF VALUES OF BETA
(0.0,0.0) (1.0,0.0) (1.3,-1.1) VALUES OF BETA
cblas_zgemm T PUT F FOR NO TEST. SAME COLUMNS.
cblas_zhemm T PUT F FOR NO TEST. SAME COLUMNS.
cblas_zsymm T PUT F FOR NO TEST. SAME COLUMNS.
cblas_ztrmm T PUT F FOR NO TEST. SAME COLUMNS.
cblas_ztrsm T PUT F FOR NO TEST. SAME COLUMNS.
cblas_zherk T PUT F FOR NO TEST. SAME COLUMNS.
cblas_zsyrk T PUT F FOR NO TEST. SAME COLUMNS.
cblas_zher2k T PUT F FOR NO TEST. SAME COLUMNS.
cblas_zsyr2k T PUT F FOR NO TEST. SAME COLUMNS.
cblas_zgemm T PUT F FOR NO TEST. SAME COLUMNS.
cblas_zhemm T PUT F FOR NO TEST. SAME COLUMNS.
cblas_zsymm T PUT F FOR NO TEST. SAME COLUMNS.
cblas_ztrmm T PUT F FOR NO TEST. SAME COLUMNS.
cblas_ztrsm T PUT F FOR NO TEST. SAME COLUMNS.
cblas_zherk T PUT F FOR NO TEST. SAME COLUMNS.
cblas_zsyrk T PUT F FOR NO TEST. SAME COLUMNS.
cblas_zher2k T PUT F FOR NO TEST. SAME COLUMNS.
cblas_zsyr2k T PUT F FOR NO TEST. SAME COLUMNS.
cblas_zgemmtr T PUT F FOR NO TEST. SAME COLUMNS.

Loading…
Cancel
Save