Trsm bench utility missmatch DTL logs and bench

AOCL-Internal: [CPUPL-1585]
Change-Id: I2896d695e6bb40ec39a4f840240499927de16962
This commit is contained in:
Nageshwar Singh
2021-09-17 16:01:23 +05:30
committed by Dipal M Zambare
parent 5d287fdba0
commit faeb79f2b9
2 changed files with 119 additions and 143 deletions

View File

@@ -1,12 +1,10 @@
/*
/*
BLIS
An object-based framework for developing high-performance BLAS-like
libraries.
Copyright (C) 2014, The University of Texas at Austin
Copyright (C) 2020-2021, Advanced Micro Devices, Inc. All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:
@@ -18,7 +16,6 @@
- Neither the name of The University of Texas nor the names of its
contributors may be used to endorse or promote products derived
from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
@@ -30,29 +27,22 @@
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifdef WIN32
#include <io.h>
#else
#include <unistd.h>
#endif
#include "blis.h"
/*
Benchmark application to process aocl logs generated
Benchmark application to process aocl logs generated
by BLIS library for trsm.
*/
#ifndef N_REPEAT
#define N_REPEAT 30
#endif
#define AOCL_MATRIX_INITIALISATION
//#define BLIS_ENABLE_CBLAS
/* For BLIS since logs are collected at BLAS interfaces
* we disable cblas interfaces for this benchmark application
*/
@@ -65,33 +55,29 @@ by BLIS library for trsm.
int main( int argc, char** argv )
{
obj_t a, c;
obj_t c_save;
obj_t a, b;
obj_t b_save;
obj_t alpha;
dim_t m, n;
dim_t p_inc = 0; // to keep track of number of inputs
num_t dt = BLIS_DOUBLE;
int r, n_repeats;
char side;
dim_t r, n_repeats;
f77_char side;
uplo_t uploa;
trans_t transa;
diag_t diaga;
f77_char f77_side;
f77_char f77_uploa;
f77_char f77_transa;
f77_char f77_diaga;
double dtime;
double dtime_save;
double gflops;
double alphaR;
double alphaI;
FILE* fin = NULL;
FILE* fout = NULL;
n_repeats = N_REPEAT;
if(argc < 3)
{
printf("Usage: ./test_trsm_XX.x input.csv output.csv\n");
@@ -103,69 +89,65 @@ int main( int argc, char** argv )
printf("Error opening the file %s\n", argv[1]);
exit(1);
}
fout = fopen(argv[2], "w");
if(fout == NULL)
{
printf("Error opening the file %s\n", argv[2]);
exit(1);
}
fprintf(fout,"dt\t side\t uploa\t transa\t diaga\t m\t n\t lda\t ldb\t alphaR\t alphaI\t gflops\n");
fprintf(fout,"dt\t side\t uploa\t transa\t diaga\t m\t n\t lda\t ldb\t\
lphaR\t alphaI\t gflops\n");
inc_t cs_a,rs_a,cs_c,rs_c;
char dt_type, side_c, uploa_c, transa_c, diaga_c;
char logline[255];
while(fscanf(fin, "%s %c %c %c %ld %ld %lu %lu %lu %lu %c %c %lf %lf\n",
logline,&dt_type, &side_c,&uploa_c, &m, &n, &cs_a, &cs_c,&rs_a,&rs_c,
&transa_c,&diaga_c,&alphaR,&alphaI) == 14)
dim_t lda,ldb;
f77_char dt_type_arg, side_arg, uploa_arg, transa_arg, diaga_arg;
f77_char logline[255];
// input order: {S,D,C,Z} {side, uplo, transa, diag, m, n, lda, ldb, alphaR, alphaI}
while(fscanf(fin, "%s %c %c %c %c %c %ld %ld %ld %ld %lf %lf\n",
logline, &dt_type_arg, &side_arg, &uploa_arg, &transa_arg, &diaga_arg, &m, &n, &lda, &ldb,
&alphaR, &alphaI) == 12)
{
if((dt_type=='S')||(dt_type=='s')) dt = BLIS_FLOAT;
if((dt_type=='D')||(dt_type=='d')) dt = BLIS_DOUBLE;
if((dt_type=='C')||(dt_type=='c')) dt = BLIS_SCOMPLEX;
if((dt_type=='Z')||(dt_type=='z')) dt = BLIS_DCOMPLEX;
if( 'l' == side_c|| 'L' == side_c)
if( (dt_type_arg=='S') || (dt_type_arg=='s') ) dt = BLIS_FLOAT;
if( (dt_type_arg=='D') || (dt_type_arg=='d') ) dt = BLIS_DOUBLE;
if( (dt_type_arg=='C') || (dt_type_arg=='c') ) dt = BLIS_SCOMPLEX;
if( (dt_type_arg=='Z') || (dt_type_arg=='z') ) dt = BLIS_DCOMPLEX;
if( 'l' == side_arg|| 'L' == side_arg )
side = BLIS_LEFT;
else if('r' == side_c || 'R' == side_c)
else if( 'r' == side_arg || 'R' == side_arg )
side = BLIS_RIGHT;
else
{
printf("Invalid entry for the argument 'side':%c\n",side_c);
printf("Invalid entry for the argument 'side':%c\n", side_arg);
continue;
}
if('l' == uploa_c || 'L' == uploa_c)
if('l' == uploa_arg || 'L' == uploa_arg)
uploa = BLIS_LOWER;
else if('u' == uploa_c || 'U' == uploa_c)
else if('u' == uploa_arg || 'U' == uploa_arg)
uploa = BLIS_UPPER;
else
{
printf("Invalid entry for the argument 'uplo':%c\n",uploa_c);
printf("Invalid entry for the argument 'uplo':%c\n",uploa_arg);
continue;
}
if('t' == transa_c || 'T' == transa_c)
if('t' == transa_arg || 'T' == transa_arg)
transa = BLIS_TRANSPOSE;
else if('n' == transa_c || 'N' == transa_c)
else if('n' == transa_arg || 'N' == transa_arg)
transa = BLIS_NO_TRANSPOSE;
else if('c' == transa_c || 'C' == transa_c)
transa = BLIS_CONJ_TRANSPOSE;
else
else if('c' == transa_arg || 'C' == transa_arg)
transa = BLIS_CONJ_TRANSPOSE;
else
{
printf("Invalid entry for the argument 'transa':%c\n",transa_c);
printf("Invalid entry for the argument 'transa':%c\n",transa_arg);
continue;
}
if('u' == diaga_c || 'U' == diaga_c)
if('u' == diaga_arg || 'U' == diaga_arg)
diaga = BLIS_UNIT_DIAG;
else if('n' == diaga_c || 'N' == diaga_c)
else if('n' == diaga_arg || 'N' == diaga_arg)
diaga = BLIS_NONUNIT_DIAG;
else
{
printf("Invalid entry for the argument 'diaga':%c\n", diaga_c);
printf("Invalid entry for the argument 'diaga':%c\n", diaga_arg);
continue;
}
@@ -175,56 +157,45 @@ int main( int argc, char** argv )
bli_param_map_blis_to_netlib_diag( diaga, &f77_diaga );
if ( bli_is_left( side ) )
bli_obj_create( dt, m, m, rs_a, cs_a, &a );
bli_obj_create( dt, m, m, 1, lda, &a );
else
bli_obj_create( dt, n, n, rs_a, cs_a, &a );
bli_obj_create( dt, n, n, 1, lda, &a );
bli_obj_create( dt, m, n, rs_c, cs_c, &c );
bli_obj_create( dt, m, n, rs_c, cs_c, &c_save );
bli_obj_create( dt, m, n, 1, ldb, &b );
bli_obj_create( dt, m, n, 1, ldb, &b_save );
#ifdef AOCL_MATRIX_INITIALISATION
bli_randm( &a );
bli_randm( &c );
bli_randm( &b );
#endif
bli_obj_set_struc( BLIS_TRIANGULAR, &a );
bli_obj_set_uplo( uploa, &a );
bli_obj_set_conjtrans( transa, &a );
bli_obj_set_diag( diaga, &a );
// Randomize A and zero the unstored triangle to ensure the
// implementation reads only from the stored region.
bli_randm( &a );
bli_mktrim( &a );
// Load the diagonal of A to make it more likely to be invertible.
bli_shiftd( &BLIS_TWO, &a );
bli_obj_create( dt, 1, 1, 0, 0, &alpha );
bli_setsc( alphaR, alphaI, &alpha );
bli_copym( &c, &c_save );
bli_copym( &b, &b_save );
dtime_save = DBL_MAX;
for ( r = 0; r < n_repeats; ++r )
{
bli_copym( &c_save, &c );
bli_copym( &b_save, &b );
#ifdef PRINT
bli_printm( "a", &a, "%4.1f", "" );
bli_printm( "c", &c, "%4.1f", "" );
bli_printm( "b", &b, "%4.1f", "" );
#endif
dtime = bli_clock();
#ifdef BLIS
bli_trsm( &side,
&alpha,
&a,
&c );
&b );
#else
#ifdef CBLAS
enum CBLAS_ORDER cblas_order;
enum CBLAS_TRANSPOSE cblas_transa;
@@ -232,7 +203,7 @@ int main( int argc, char** argv )
enum CBLAS_SIDE cblas_side;
enum CBLAS_DIAG cblas_diag;
if ( ( stor_scheme == 'C' ) || ( stor_scheme == 'c' ) )
if ( bli_obj_row_stride( &b ) == 1 )
cblas_order = CblasColMajor;
else
cblas_order = CblasRowMajor;
@@ -244,20 +215,30 @@ int main( int argc, char** argv )
else
cblas_transa = CblasNoTrans;
if(bli_is_upper(uploa))
if ('u' == diaga_arg || 'U' == diaga_arg)
cblas_diag = CblasUnit;
else
cblas_diag = CblasNonUnit;
if( 'l' == side_arg || 'L' == side_arg )
cblas_side = CblasLeft;
else if( 'r' == side_arg || 'R' == side_arg )
cblas_side = CblasRight;
else
{
printf("Invalid entry for the argument 'side':%c\n", side_arg);
continue;
}
if('l' == uploa_arg || 'L' == uploa_arg)
cblas_uplo = CblasLower;
else if('u' == uploa_arg || 'U' == uploa_arg)
cblas_uplo = CblasUpper;
else
cblas_uplo = CblasLower;
if(bli_is_left(side))
cblas_side = CblasLeft;
else
cblas_side = CblasRight;
if(bli_is_unit_diag(diaga))
cblas_diag = CblasUnit;
else
cblas_diag = CblasNonUnit;
{
printf("Invalid entry for the argument 'uplo':%c\n",uploa_arg);
continue;
}
#else
f77_char f77_transa;
@@ -265,15 +246,13 @@ int main( int argc, char** argv )
#endif
if ( bli_is_float( dt ) )
{
f77_int mm = bli_obj_length( &c );
f77_int nn = bli_obj_width( &c );
f77_int mm = bli_obj_length( &b );
f77_int nn = bli_obj_width( &b );
f77_int lda = bli_obj_col_stride( &a );
f77_int ldc = bli_obj_col_stride( &c );
f77_int ldb = bli_obj_col_stride( &b );
float* alphap = bli_obj_buffer( &alpha );
float* ap = bli_obj_buffer( &a );
float* cp = bli_obj_buffer( &c );
float* bp = bli_obj_buffer( &b );
#ifdef CBLAS
cblas_strsm( cblas_order,
cblas_side,
@@ -284,7 +263,7 @@ int main( int argc, char** argv )
nn,
*alphap,
ap, lda,
cp, ldc
bp, ldb
);
#else
strsm_( &f77_side,
@@ -295,19 +274,18 @@ int main( int argc, char** argv )
&nn,
alphap,
ap, &lda,
cp, &ldc );
bp, &ldb );
#endif
}
else if ( bli_is_double( dt ) )
{
f77_int mm = bli_obj_length( &c );
f77_int nn = bli_obj_width( &c );
f77_int mm = bli_obj_length( &b );
f77_int nn = bli_obj_width( &b );
f77_int lda = bli_obj_col_stride( &a );
f77_int ldc = bli_obj_col_stride( &c );
f77_int ldb = bli_obj_col_stride( &b );
double* alphap = bli_obj_buffer( &alpha );
double* ap = bli_obj_buffer( &a );
double* cp = bli_obj_buffer( &c );
double* bp = bli_obj_buffer( &b );
#ifdef CBLAS
cblas_dtrsm( cblas_order,
cblas_side,
@@ -318,9 +296,9 @@ int main( int argc, char** argv )
nn,
*alphap,
ap, lda,
cp, ldc
bp, ldb
);
#else
#else
dtrsm_( &f77_side,
&f77_uploa,
&f77_transa,
@@ -329,20 +307,18 @@ int main( int argc, char** argv )
&nn,
alphap,
ap, &lda,
cp, &ldc );
bp, &ldb );
#endif
}
else if ( bli_is_scomplex( dt ) )
{
f77_int mm = bli_obj_length( &c );
f77_int nn = bli_obj_width( &c );
f77_int mm = bli_obj_length( &b );
f77_int nn = bli_obj_width( &b );
f77_int lda = bli_obj_col_stride( &a );
f77_int ldc = bli_obj_col_stride( &c );
f77_int ldb = bli_obj_col_stride( &b );
scomplex* alphap = bli_obj_buffer( &alpha );
scomplex* ap = bli_obj_buffer( &a );
scomplex* cp = bli_obj_buffer( &c );
scomplex* bp = bli_obj_buffer( &b );
#ifdef CBLAS
cblas_ctrsm( cblas_order,
cblas_side,
@@ -353,7 +329,7 @@ int main( int argc, char** argv )
nn,
alphap,
ap, lda,
cp, ldc
bp, ldb
);
#else
ctrsm_( &f77_side,
@@ -364,18 +340,18 @@ int main( int argc, char** argv )
&nn,
alphap,
ap, &lda,
cp, &ldc );
bp, &ldb );
#endif
}
else if ( bli_is_dcomplex( dt ) )
{
f77_int mm = bli_obj_length( &c );
f77_int nn = bli_obj_width( &c );
f77_int mm = bli_obj_length( &b );
f77_int nn = bli_obj_width( &b );
f77_int lda = bli_obj_col_stride( &a );
f77_int ldc = bli_obj_col_stride( &c );
f77_int ldb = bli_obj_col_stride( &b );
dcomplex* alphap = bli_obj_buffer( &alpha );
dcomplex* ap = bli_obj_buffer( &a );
dcomplex* cp = bli_obj_buffer( &c );
dcomplex* bp = bli_obj_buffer( &b );
#ifdef CBLAS
cblas_ztrsm( cblas_order,
cblas_side,
@@ -386,7 +362,7 @@ int main( int argc, char** argv )
nn,
alphap,
ap, lda,
cp, ldc
bp, ldb
);
#else
ztrsm_( &f77_side,
@@ -397,7 +373,7 @@ int main( int argc, char** argv )
&nn,
alphap,
ap, &lda,
cp, &ldc );
bp, &ldb );
#endif
}else{
printf("Invalid data type! Exiting!\n");
@@ -406,42 +382,32 @@ int main( int argc, char** argv )
#endif
dtime_save = bli_clock_min_diff( dtime_save, dtime );
}
if ( bli_is_left( side ) )
gflops = ( 1.0 * m * m * n ) / ( dtime_save * 1.0e9 );
else
gflops = ( 1.0 * m * n * n ) / ( dtime_save * 1.0e9 );
if ( bli_is_complex( dt ) ) gflops *= 4.0;
#ifdef BLIS
printf( "data_trsm_blis\t\t");
#else
printf( "data_trsm_%s\t\t",BLAS );
#endif
printf("%c\t %c\t %c\t %c\t %c\t %4lu\t %4lu\t %4lu\t %4lu\t %6.3f\t %6.3f\t %6.3f\n",
dt_type,side_c, uploa_c, transa_c,
diaga_c, (unsigned long )m, (unsigned long ) n, (unsigned long )cs_a,
(unsigned long )cs_c, alphaR, alphaI, gflops);
p_inc++;
printf( "( %2lu, 1:2 ) = [ %4lu %7.2f ];\n",
( unsigned long )p_inc,
( unsigned long )m, gflops );
fprintf(fout,"%c\t %c\t %c\t %c\t %c\t %4lu\t %4lu\t %4lu\t %4lu\t %6.3f\t %6.3f\t %6.3f\n",
dt_type,side_c, uploa_c, transa_c,
diaga_c, (unsigned long )m, (unsigned long ) n, (unsigned long )cs_a,
(unsigned long )cs_c, alphaR, alphaI, gflops);
dt_type_arg, side_arg, uploa_arg, transa_arg,
diaga_arg, (unsigned long )m, (unsigned long ) n, (unsigned long )lda,
(unsigned long )ldb, alphaR, alphaI, gflops);
fflush(fout);
bli_obj_free( &alpha );
bli_obj_free( &a );
bli_obj_free( &c );
bli_obj_free( &c_save );
bli_obj_free( &b );
bli_obj_free( &b_save );
}
fclose(fin);
fclose(fout);
//bli_finalize();
return 0;
}

View File

@@ -1,9 +1,19 @@
bli_trsm_ex:375: D L L 10 12 228 228 1 1 n n 1.000000 0.000000
bli_trsm_ex:375: D L L 1017 1095 2112 2112 1 1 n n 1.000000 0.000000
bli_trsm_ex:375: D L U 99 1 753 99 1 1 t u 1.000000 0.000000
bli_trsm_ex:375: D L L 10 17 417 417 1 1 n n 1.000000 0.000000
bli_trsm_ex:375: D L L 1020 5958 6978 6978 1 1 n n 1.000000 0.000000
bli_trsm_ex:375: D L L 102 1032 1134 1134 1 1 n n 1.000000 0.000000
bli_trsm_ex:375: D L L 102 1 1005 4602001 1 1 t n 1.000000 0.000000
bli_trsm_ex:375: D L L 16 25 609 609 1 1 n n 1.000000 0.000000
dtrsm_:400: d L L N N 1000 1000 1000 1000 2.000000 0.000000
dtrsm_:377: d L L N U 16 96 1000 1000 1.000000 0.000000
dtrsm_:377: d L L N U 16 96 10000 10000 1.000000 0.000000
dtrsm_:377: d L L N U 16 96 30000 30000 1.000000 0.000000
dtrsm_:377: d L L N U 5 5 5 5 1.000000 0.000000
dtrsm_:377: d L U N N 10 10 10 10 1.000000 0.000000
dtrsm_:377: d L U N N 100 100 100 100 1.000000 0.000000
dtrsm_:377: d L U N N 1000 1000 1000 1000 1.000000 0.000000
dtrsm_:400: d R U N N 1000 1000 1000 1000 2.000000 0.000000
dtrsm_:400: d R U N N 1200 1200 1200 1200 2.000000 0.000000
dtrsm_:400: d R U N N 1400 1400 1400 1400 2.000000 0.000000
dtrsm_:400: d R U N N 1600 1600 1600 1600 2.000000 0.000000
dtrsm_:400: d R U N N 1800 1800 1800 1800 2.000000 0.000000
dtrsm_:400: d R U N N 2000 2000 2000 2000 2.000000 0.000000
dtrsm_:400: d R U N N 200 200 200 200 2.000000 0.000000
dtrsm_:400: d R U N N 400 400 400 400 2.000000 0.000000
dtrsm_:400: d R U N N 600 600 600 600 2.000000 0.000000
dtrsm_:400: d R U N N 800 800 800 800 2.000000 0.000000