mirror of
https://github.com/amd/blis.git
synced 2026-06-29 10:47:16 +00:00
Added basic flop-counting mechanism (level-3 only).
Details:
- Added optional flop counting to all level-3 front-ends, which is
enabled via BLIS_ENABLE_FLOP_COUNT. The flop count can be
reset at any time via bli_flop_count_reset() and queried via
bli_flop_count(). Caveats:
- flop counts are approximate for her[2]k, syr[2]k, trmm, and
trsm operations;
- flop counts ignore extra flops due to non-unit alpha;
- flop counts do not account for situations where beta is zero.
This commit is contained in:
@@ -96,5 +96,13 @@ void bli_gemm_front( obj_t* alpha,
|
||||
(void**) infos );
|
||||
|
||||
bli_gemm_thrinfo_free_paths( infos, n_threads );
|
||||
|
||||
#ifdef BLIS_ENABLE_FLOP_COUNT
|
||||
// Increment the global flop counter.
|
||||
bli_flop_count_inc( 2.0 * bli_obj_length( *c )
|
||||
* bli_obj_width( *c )
|
||||
* bli_obj_width_after_trans( a_local )
|
||||
* ( bli_obj_is_complex( *c ) ? 4.0 : 1.0 ) );
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
@@ -103,5 +103,13 @@ void bli_hemm_front( side_t side,
|
||||
(void**) infos );
|
||||
|
||||
bli_gemm_thrinfo_free_paths( infos, n_threads );
|
||||
|
||||
#ifdef BLIS_ENABLE_FLOP_COUNT
|
||||
// Increment the global flop counter.
|
||||
bli_flop_count_inc( 2.0 * bli_obj_length( *c )
|
||||
* bli_obj_width( *c )
|
||||
* bli_obj_width_after_trans( a_local )
|
||||
* ( bli_obj_is_complex( *c ) ? 4.0 : 1.0 ) );
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
@@ -155,5 +155,13 @@ void bli_her2k_front( obj_t* alpha,
|
||||
// non-zero values. To prevent this, we explicitly set those values
|
||||
// to zero before returning.
|
||||
bli_setid( &BLIS_ZERO, &c_local );
|
||||
|
||||
#ifdef BLIS_ENABLE_FLOP_COUNT
|
||||
// Increment the global flop counter.
|
||||
bli_flop_count_inc( 2.0 * bli_obj_length( *c )
|
||||
* bli_obj_width( *c )
|
||||
* bli_obj_width_after_trans( a_local )
|
||||
* ( bli_obj_is_complex( *c ) ? 4.0 : 1.0 ) );
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
@@ -109,5 +109,13 @@ void bli_herk_front( obj_t* alpha,
|
||||
// non-zero values. To prevent this, we explicitly set those values
|
||||
// to zero before returning.
|
||||
bli_setid( &BLIS_ZERO, &c_local );
|
||||
|
||||
#ifdef BLIS_ENABLE_FLOP_COUNT
|
||||
// Increment the global flop counter.
|
||||
bli_flop_count_inc( 1.0 * bli_obj_length( *c )
|
||||
* bli_obj_width( *c )
|
||||
* bli_obj_width_after_trans( a_local )
|
||||
* ( bli_obj_is_complex( *c ) ? 4.0 : 1.0 ) );
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
@@ -102,5 +102,13 @@ void bli_symm_front( side_t side,
|
||||
(void**) infos );
|
||||
|
||||
bli_gemm_thrinfo_free_paths( infos, n_threads );
|
||||
|
||||
#ifdef BLIS_ENABLE_FLOP_COUNT
|
||||
// Increment the global flop counter.
|
||||
bli_flop_count_inc( 2.0 * bli_obj_length( *c )
|
||||
* bli_obj_width( *c )
|
||||
* bli_obj_width_after_trans( a_local )
|
||||
* ( bli_obj_is_complex( *c ) ? 4.0 : 1.0 ) );
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
@@ -126,5 +126,13 @@ void bli_syr2k_front( obj_t* alpha,
|
||||
|
||||
bli_herk_thrinfo_free_paths( infos, n_threads );
|
||||
#endif
|
||||
|
||||
#ifdef BLIS_ENABLE_FLOP_COUNT
|
||||
// Increment the global flop counter.
|
||||
bli_flop_count_inc( 2.0 * bli_obj_length( *c )
|
||||
* bli_obj_width( *c )
|
||||
* bli_obj_width_after_trans( a_local )
|
||||
* ( bli_obj_is_complex( *c ) ? 4.0 : 1.0 ) );
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
@@ -95,5 +95,13 @@ void bli_syrk_front( obj_t* alpha,
|
||||
(void**) infos );
|
||||
|
||||
bli_herk_thrinfo_free_paths( infos, n_threads );
|
||||
|
||||
#ifdef BLIS_ENABLE_FLOP_COUNT
|
||||
// Increment the global flop counter.
|
||||
bli_flop_count_inc( 1.0 * bli_obj_length( *c )
|
||||
* bli_obj_width( *c )
|
||||
* bli_obj_width_after_trans( a_local )
|
||||
* ( bli_obj_is_complex( *c ) ? 4.0 : 1.0 ) );
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
@@ -143,5 +143,13 @@ void bli_trmm_front( side_t side,
|
||||
(void**) infos );
|
||||
|
||||
bli_trmm_thrinfo_free_paths( infos, n_threads );
|
||||
|
||||
#ifdef BLIS_ENABLE_FLOP_COUNT
|
||||
// Increment the global flop counter.
|
||||
bli_flop_count_inc( 1.0 * bli_obj_length( *c )
|
||||
* bli_obj_width( *c )
|
||||
* bli_obj_width_after_trans( a_local )
|
||||
* ( bli_obj_is_complex( *c ) ? 4.0 : 1.0 ) );
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
@@ -145,5 +145,13 @@ void bli_trmm3_front( side_t side,
|
||||
(void**) infos );
|
||||
|
||||
bli_trmm_thrinfo_free_paths( infos, n_threads );
|
||||
|
||||
#ifdef BLIS_ENABLE_FLOP_COUNT
|
||||
// Increment the global flop counter.
|
||||
bli_flop_count_inc( 1.0 * bli_obj_length( *c )
|
||||
* bli_obj_width( *c )
|
||||
* bli_obj_width_after_trans( a_local )
|
||||
* ( bli_obj_is_complex( *c ) ? 4.0 : 1.0 ) );
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
@@ -129,5 +129,13 @@ void bli_trsm_front( side_t side,
|
||||
(void**) infos );
|
||||
|
||||
bli_trsm_thrinfo_free_paths( infos, n_threads );
|
||||
|
||||
#ifdef BLIS_ENABLE_FLOP_COUNT
|
||||
// Increment the global flop counter.
|
||||
bli_flop_count_inc( 1.0 * bli_obj_length( *c )
|
||||
* bli_obj_width( *c )
|
||||
* bli_obj_width_after_trans( a_local )
|
||||
* ( bli_obj_is_complex( *c ) ? 4.0 : 1.0 ) );
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
53
frame/base/bli_flops.c
Normal file
53
frame/base/bli_flops.c
Normal file
@@ -0,0 +1,53 @@
|
||||
/*
|
||||
|
||||
BLIS
|
||||
An object-based framework for developing high-performance BLAS-like
|
||||
libraries.
|
||||
|
||||
Copyright (C) 2014, The University of Texas at Austin
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are
|
||||
met:
|
||||
- Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
- Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
- Neither the name of The University of Texas at Austin 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
|
||||
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
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.
|
||||
|
||||
*/
|
||||
|
||||
#include "blis.h"
|
||||
|
||||
static double bli_flops_executed = 0.0;
|
||||
|
||||
void bli_flop_count_inc( double new_flops )
|
||||
{
|
||||
bli_flops_executed += new_flops;
|
||||
}
|
||||
|
||||
double bli_flop_count( void )
|
||||
{
|
||||
return bli_flops_executed;
|
||||
}
|
||||
|
||||
void bli_flop_count_reset( void )
|
||||
{
|
||||
bli_flops_executed = 0.0;
|
||||
}
|
||||
|
||||
38
frame/base/bli_flops.h
Normal file
38
frame/base/bli_flops.h
Normal file
@@ -0,0 +1,38 @@
|
||||
/*
|
||||
|
||||
BLIS
|
||||
An object-based framework for developing high-performance BLAS-like
|
||||
libraries.
|
||||
|
||||
Copyright (C) 2014, The University of Texas at Austin
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are
|
||||
met:
|
||||
- Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
- Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
- Neither the name of The University of Texas at Austin 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
|
||||
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
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.
|
||||
|
||||
*/
|
||||
|
||||
void bli_flop_count_inc( double new_flops );
|
||||
double bli_flop_count( void );
|
||||
void bli_flop_count_reset( void );
|
||||
|
||||
@@ -114,6 +114,7 @@ extern "C" {
|
||||
#include "bli_machval.h"
|
||||
#include "bli_info.h"
|
||||
#include "bli_getopt.h"
|
||||
#include "bli_flops.h"
|
||||
#include "bli_4m.h"
|
||||
#include "bli_3m.h"
|
||||
#include "bli_4mh.h"
|
||||
|
||||
Reference in New Issue
Block a user