mirror of
https://github.com/amd/blis.git
synced 2026-04-20 15:48:50 +00:00
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:
@@ -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);
|
||||
|
||||
|
||||
|
||||
@@ -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 );
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -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" );
|
||||
|
||||
Reference in New Issue
Block a user