Updated test drivers for dotv, scalv and swapv.

Added traces in cblas layer for these API's.
These test drivers didn't have calls for complex data
types, the drivers are updated to support them.

AMD-Internal : [CPUPL-1315]

Change-Id: Ia52ecca68ea17314315d626b57c46a2f5973985b
This commit is contained in:
Dipal M Zambare
2020-11-23 22:02:03 +05:30
committed by Dipal M Zambare
parent 5884732df1
commit a7c81d1298
8 changed files with 131 additions and 113 deletions

View File

@@ -435,7 +435,6 @@ void AOCL_DTL_log_gemv_sizes( int8 loglevel,
double alpha_imag = 0.0;
double beta_real = 0.0;
double beta_imag = 0.0;
f77_char transaUpdate = transa;
if(dt_type == 's' || dt_type == 'S' )
{
@@ -465,32 +464,10 @@ void AOCL_DTL_log_gemv_sizes( int8 loglevel,
beta_real = ((dcomplex*)beta)->real;
beta_imag = ((dcomplex*)beta)->imag;
}
/* The following convention is followed to print trans character
* BLIS_NO_TRANSPOSE = 'n';
* BLIS_TRANSPOSE = 't';
* BLIS_CONJ_NO_TRANS = 'c';
* BLIS_CONJ_TRANS = 'h';
*/
if( transa == BLIS_NO_TRANSPOSE )
{
transaUpdate = 'n';
}
else if( transa == BLIS_TRANSPOSE )
{
transaUpdate = 't';
}
else if( transa == BLIS_CONJ_NO_TRANSPOSE )
{
transaUpdate = 'c';
}
else if( transa == BLIS_CONJ_NO_TRANSPOSE )
{
transaUpdate = 'h';
}
// {S, D,C, Z} { transa, m, n, alpha, lda, incx, beta, incy}
sprintf(buffer, " %c %c %ld %ld %lf %lf %ld %ld %lf %lf %ld",
dt_type, transaUpdate, (dim_t)m, (dim_t)n, alpha_real, alpha_imag,
dt_type, transa, (dim_t)m, (dim_t)n, alpha_real, alpha_imag,
(dim_t)lda, (dim_t)incx, beta_real, beta_imag, (dim_t)incy);

View File

@@ -114,7 +114,6 @@ void PASTEMAC(ch,varname) \
x1 = x + (i )*incx; \
y1 = y + (0 )*incy; \
\
AOCL_DTL_LOG_GEMV_INPUTS(AOCL_DTL_LEVEL_TRACE_3, *MKSTR(ch), conja, n_elem, f, (void*)alpha, lda, incx, (void*)beta, incy); \
/* y = y + alpha * A1 * x1; */ \
kfp_af \
( \
@@ -181,7 +180,6 @@ void bli_dgemv_unf_var2
/* Query the context for the kernel function pointer and fusing factor. */
b_fuse = 5;
AOCL_DTL_LOG_GEMV_INPUTS(AOCL_DTL_LEVEL_TRACE_3, 'd', conja, n_elem, b_fuse, (void*)alpha, cs_at, incx, (void*)beta, incy);
for ( i = 0; i < n_iter; i += f )
{
f = bli_determine_blocksize_dim_f( i, n_iter, b_fuse );
@@ -254,7 +252,6 @@ void bli_sgemv_unf_var2
/* Query the context for the kernel function pointer and fusing factor. */
b_fuse = 5;
AOCL_DTL_LOG_GEMV_INPUTS(AOCL_DTL_LEVEL_TRACE_3, 's', conja, n_elem, b_fuse, (void*)alpha, cs_at, incx, (void*)beta, incy);
for ( i = 0; i < n_iter; i += f )
{
f = bli_determine_blocksize_dim_f( i, n_iter, b_fuse );
@@ -329,7 +326,6 @@ void bli_zgemv_unf_var2
/* fusing factor */
b_fuse = 5;
AOCL_DTL_LOG_GEMV_INPUTS(AOCL_DTL_LEVEL_TRACE_3, 'z', conja, n_elem, b_fuse, (void*)alpha, cs_at, incx, (void*)beta, incy);
for ( i = 0; i < n_iter; i += f )
{
f = bli_determine_blocksize_dim_f( i, n_iter, b_fuse );
@@ -401,7 +397,6 @@ void bli_cgemv_unf_var2
/* fusing factor. */
b_fuse = 5;
AOCL_DTL_LOG_GEMV_INPUTS(AOCL_DTL_LEVEL_TRACE_3, 'c', conja, n_elem, b_fuse, (void*)alpha, cs_at, incx, (void*)beta, incy);
for ( i = 0; i < n_iter; i += f )
{
f = bli_determine_blocksize_dim_f( i, n_iter, b_fuse );

View File

@@ -22,7 +22,6 @@ void cblas_cdotc_sub( f77_int N, const void *X, f77_int incX,
#define F77_incX incX
#define F77_incY incY
#endif
AOCL_DTL_LOG_DOTV_INPUTS(AOCL_DTL_LEVEL_TRACE_1, 'c','C', N, incX, incY);
F77_cdotc_sub( &F77_N, (scomplex*)X, &F77_incX, (scomplex*)Y, &F77_incY, (scomplex*)dotc);
AOCL_DTL_TRACE_EXIT(AOCL_DTL_LEVEL_TRACE_1);
}

View File

@@ -22,7 +22,6 @@ void cblas_cdotu_sub( f77_int N, const void *X,
#define F77_incX incX
#define F77_incY incY
#endif
AOCL_DTL_LOG_DOTV_INPUTS(AOCL_DTL_LEVEL_TRACE_1, 'c','N', N, incX, incY);
F77_cdotu_sub( &F77_N, (scomplex*)X, &F77_incX, (scomplex*)Y, &F77_incY, (scomplex*)dotu);
AOCL_DTL_TRACE_EXIT(AOCL_DTL_LEVEL_TRACE_1);
}

View File

@@ -22,7 +22,7 @@ void cblas_zdotc_sub( f77_int N, const void *X, f77_int incX,
#define F77_incX incX
#define F77_incY incY
#endif
AOCL_DTL_LOG_DOTV_INPUTS(AOCL_DTL_LEVEL_TRACE_1, 'z','C', N, incX, incY);
F77_zdotc_sub( &F77_N, (dcomplex*)X, &F77_incX, (dcomplex*)Y, &F77_incY, (dcomplex*)dotc);
AOCL_DTL_TRACE_EXIT(AOCL_DTL_LEVEL_TRACE_1);
return;

View File

@@ -22,7 +22,6 @@ void cblas_zdotu_sub( f77_int N, const void *X, f77_int incX,
#define F77_incX incX
#define F77_incY incY
#endif
AOCL_DTL_LOG_DOTV_INPUTS(AOCL_DTL_LEVEL_TRACE_1, 'z','N', N, incX, incY);
F77_zdotu_sub( &F77_N, (dcomplex*)X, &F77_incX, (dcomplex*)Y, &F77_incY, (dcomplex*)dotu);
AOCL_DTL_TRACE_EXIT(AOCL_DTL_LEVEL_TRACE_1);
return;

View File

@@ -43,112 +43,133 @@
int main(int argc, char** argv)
{
obj_t a, alpha;
dim_t n, p;
dim_t p_begin, p_end, p_inc;
int n_input;
num_t dt;
int r, n_repeats;
obj_t a, alpha;
dim_t n, p;
dim_t p_begin, p_end, p_inc;
int n_input;
num_t dt;
int r, n_repeats;
double dtime;
double dtime_save;
double gflops;
double dtime;
double dtime_save;
double gflops;
//bli_init();
//bli_error_checking_level_set( BLIS_NO_ERROR_CHECKING );
//bli_init();
//bli_error_checking_level_set( BLIS_NO_ERROR_CHECKING );
n_repeats = 100000;
n_repeats = 100000;
#ifndef PRINT
p_begin = 200;
p_end = 100000;
p_inc = 200;
p_begin = 200;
p_end = 100000;
p_inc = 200;
n_input = -1;
n_input = -1;
#else
p_begin = 16;
p_end = 16;
p_inc = 1;
p_begin = 16;
p_end = 16;
p_inc = 1;
n_input = 4;
n_input = 4;
#endif
#if 1
dt = BLIS_FLOAT;
//dt = BLIS_DOUBLE;
#else
//dt = BLIS_SCOMPLEX;
dt = BLIS_DCOMPLEX;
dt = BLIS_SCOMPLEX;
// dt = BLIS_DCOMPLEX;
#endif
#ifdef BLIS
printf( "data_scalv_blis\t n\t gflops\n" );
printf( "data_scalv_blis\t n\t gflops\n" );
#else
printf( "data_scalv_%s\t n\t gflops\n", BLAS );
printf( "data_scalv_%s\t n\t gflops\n", BLAS );
#endif
for (p = p_begin; p <= p_end; p += p_inc)
{
if (n_input < 0) n = p * (dim_t)abs(n_input);
else n = (dim_t)n_input;
for (p = p_begin; p <= p_end; p += p_inc)
{
if (n_input < 0) n = p * (dim_t)abs(n_input);
else n = (dim_t)n_input;
bli_obj_create(dt, 1, 1, 0, 0, &alpha);
bli_obj_create(dt, 1, n, 0, 0, &a);
bli_obj_create(dt, 1, 1, 0, 0, &alpha);
bli_obj_create(dt, 1, n, 0, 0, &a);
bli_randm(&a);
bli_setsc((2.0), 0.0, &alpha);
dtime_save = DBL_MAX;
bli_randm(&a);
bli_setsc((2.0), 0.0, &alpha);
dtime_save = DBL_MAX;
for (r = 0; r < n_repeats; ++r)
{
dtime = bli_clock();
for (r = 0; r < n_repeats; ++r)
{
dtime = bli_clock();
#ifdef BLIS
bli_scalm(&BLIS_TWO, &a);
bli_scalm(&BLIS_TWO, &a);
#else
if ( bli_is_float( dt ) )
{
f77_int nn = bli_obj_length( &a );
f77_int inca = bli_obj_vector_inc( &a );
float* scalar = bli_obj_buffer( &alpha );
float* ap = bli_obj_buffer( &a );
if ( bli_is_float( dt ) )
{
f77_int nn = bli_obj_length( &a );
f77_int inca = bli_obj_vector_inc( &a );
float* scalar = bli_obj_buffer( &alpha );
float* ap = bli_obj_buffer( &a );
sscal_( &nn, scalar,
ap, &inca );
}
else if ( bli_is_double( dt ) )
{
f77_int nn = bli_obj_length( &a );
f77_int inca = bli_obj_vector_inc( &a );
double* scalar = bli_obj_buffer( &alpha );
double* ap = bli_obj_buffer( &a );
sscal_( &nn, scalar,
ap, &inca );
}
else if ( bli_is_double( dt ) )
{
f77_int nn = bli_obj_length( &a );
f77_int inca = bli_obj_vector_inc( &a );
double* scalar = bli_obj_buffer( &alpha );
double* ap = bli_obj_buffer( &a );
dscal_( &nn, scalar,
ap, &inca );
}
else if ( bli_is_scomplex( dt ) )
{
f77_int nn = bli_obj_length( &a );
f77_int inca = bli_obj_vector_inc( &a );
scomplex* scalar = bli_obj_buffer( &alpha );
scomplex* ap = bli_obj_buffer( &a );
cscal_( &nn, scalar,
ap, &inca );
}
else if ( bli_is_dcomplex( dt ) )
{
f77_int nn = bli_obj_length( &a );
f77_int inca = bli_obj_vector_inc( &a );
dcomplex* scalar = bli_obj_buffer( &alpha );
dcomplex* ap = bli_obj_buffer( &a );
zscal_( &nn, scalar,
ap, &inca );
}
dscal_( &nn, scalar,
ap, &inca );
}
#endif
dtime_save = bli_clock_min_diff(dtime_save, dtime);
}
dtime_save = bli_clock_min_diff(dtime_save, dtime);
}
// Size of the vectors are incrementd by 1000, to test wide range of inputs.
if (p == 10000)
p_inc = 10000;
if (p == 10000)
p_inc = 10000;
if (p == 1000)
p_inc = 1000;
if (p == 1000)
p_inc = 1000;
gflops = n / (dtime_save * 1.0e9);
if ( bli_is_complex( dt ) ) gflops *= 4.0;
gflops = n / (dtime_save * 1.0e9);
#ifdef BLIS
printf( "data_scalv_blis\t" );
printf( "data_scalv_blis\t" );
#else
printf( "data_scalv_%s\t", BLAS );
printf( "data_scalv_%s\t", BLAS );
#endif
printf(" %4lu\t %7.2f \n",
(unsigned long)n, gflops);
printf(" %4lu\t %7.2f \n",
(unsigned long)n, gflops);
bli_obj_free(&alpha);
bli_obj_free(&a);
}
return 0;
bli_obj_free(&alpha);
bli_obj_free(&a);
}
return 0;
}

View File

@@ -79,8 +79,8 @@ int main( int argc, char** argv )
dt = BLIS_FLOAT;
//dt = BLIS_DOUBLE;
#else
//dt = BLIS_SCOMPLEX;
dt = BLIS_DCOMPLEX;
dt = BLIS_SCOMPLEX;
//dt = BLIS_DCOMPLEX;
#endif
// Begin with initializing the last entry to zero so that
@@ -123,8 +123,8 @@ int main( int argc, char** argv )
#ifdef BLIS
bli_swapv( &x,
&y
);
&y
);
#else
if ( bli_is_float( dt ) )
{
@@ -135,8 +135,8 @@ int main( int argc, char** argv )
float* yp = bli_obj_buffer( &y );
sswap_( &nn,
xp, &incx,
yp, &incy );
xp, &incx,
yp, &incy );
}
else if ( bli_is_double( dt ) )
@@ -149,9 +149,36 @@ int main( int argc, char** argv )
double* yp = bli_obj_buffer( &y );
dswap_( &nn,
xp, &incx,
yp, &incy );
xp, &incx,
yp, &incy );
}
else if ( bli_is_scomplex( dt ) )
{
f77_int nn = bli_obj_length( &x );
f77_int incx = bli_obj_vector_inc( &x );
f77_int incy = bli_obj_vector_inc( &y );
scomplex* xp = bli_obj_buffer( &x );
scomplex* yp = bli_obj_buffer( &y );
cswap_( &nn,
xp, &incx,
yp, &incy );
}
else if ( bli_is_dcomplex( dt ) )
{
f77_int nn = bli_obj_length( &x );
f77_int incx = bli_obj_vector_inc( &x );
f77_int incy = bli_obj_vector_inc( &y );
dcomplex* xp = bli_obj_buffer( &x );
dcomplex* yp = bli_obj_buffer( &y );
zswap_( &nn,
xp, &incx,
yp, &incy );
}
#endif
#ifdef PRINT
@@ -165,6 +192,7 @@ int main( int argc, char** argv )
}
gflops = ( n ) / ( dtime_save * 1.0e9 );
if ( bli_is_complex( dt ) ) gflops *= 4.0;
#ifdef BLIS
printf( "data_swapv_blis" );