Removed densify argument to packm_cntl_obj_create().

Details:
- Removed the "densify" bool_t argument to bli_packm_cntl_obj_create().
  This argument was inserted very early in BLIS's development, when it
  was anticipated that the developer may sometimes wish to pack a
  Hermitian, symmetric, or triangular matrix without making it dense.
  But as it turns out, if we are packing a matrix, we always want to
  make it dense in some way or another due to the fact that the micro-
  kernel only multiplies dense micro-panels. Thus, unless/until there
  is a real need for the feature, it seems reasonable to remove it from
  the packm_cntl API.
This commit is contained in:
Field G. Van Zee
2014-09-09 13:42:04 -05:00
parent 5c43ee3871
commit c472993bbc
19 changed files with 15 additions and 76 deletions

View File

@@ -98,17 +98,15 @@ void bli_packm_cntl_init()
BLIS_DEFAULT_NR_Z, 0 );
// Generally speaking, the BLIS_PACKED_ROWS and BLIS_PACKED_COLUMNS
// are used by the level-2 operations, and thus densification is not
// necessary. These schemas amount to simple copies to row or column
// storage. These simple schemas may be used by level-3 operations,
// but they should never be used for matrices with structure (since
// they do not densify).
// are used by the level-2 operations. These schemas amount to simple
// copies to row or column storage. These simple schemas may be used
// by level-3 operations, but they should never be used for matrices
// with structure (since they do not densify).
// The BLIS_PACKED_ROW_PANELS and BLIS_PACKED_COL_PANELS schemas are
// used only in level-3 operations. They pack to (typically) skinny
// row and column panels, where the width of the panel is determined
// by register blocksizes. They are configured to densify matrices
// with structure, though they can also be used on matrices that
// are already dense and/or have no structure.
// by register blocksizes. It is assumed that matrices with structure
// will be densified.
// Create control trees to pack by rows.
packm_cntl_row
@@ -117,7 +115,6 @@ void bli_packm_cntl_init()
BLIS_VARIANT1, // When packing to rows:
packm_mult_nvec, // - nvec multiple is used for m dimension
packm_mult_ldim, // - ldim multiple is used for n dimension
FALSE, // do NOT densify structure
FALSE, // do NOT invert diagonal
FALSE, // do NOT iterate backwards if upper
FALSE, // do NOT iterate backwards if lower
@@ -132,7 +129,6 @@ void bli_packm_cntl_init()
BLIS_VARIANT1, // When packing to columns:
packm_mult_ldim, // - ldim multiple is used for m dimension
packm_mult_nvec, // - nvec multiple is used for n dimension
FALSE, // do NOT densify structure
FALSE, // do NOT invert diagonal
FALSE, // do NOT iterate backwards if upper
FALSE, // do NOT iterate backwards if lower
@@ -162,7 +158,6 @@ packm_t* bli_packm_cntl_obj_create( impl_t impl_type,
varnum_t var_num,
blksz_t* mr,
blksz_t* nr,
bool_t does_densify,
bool_t does_invert_diag,
bool_t rev_iter_if_upper,
bool_t rev_iter_if_lower,
@@ -177,7 +172,6 @@ packm_t* bli_packm_cntl_obj_create( impl_t impl_type,
cntl->var_num = var_num;
cntl->mr = mr;
cntl->nr = nr;
cntl->does_densify = does_densify;
cntl->does_invert_diag = does_invert_diag;
cntl->rev_iter_if_upper = rev_iter_if_upper;
cntl->rev_iter_if_lower = rev_iter_if_lower;
@@ -192,7 +186,6 @@ void bli_packm_cntl_obj_init( packm_t* cntl,
varnum_t var_num,
blksz_t* mr,
blksz_t* nr,
bool_t does_densify,
bool_t does_invert_diag,
bool_t rev_iter_if_upper,
bool_t rev_iter_if_lower,
@@ -203,7 +196,6 @@ void bli_packm_cntl_obj_init( packm_t* cntl,
cntl->var_num = var_num;
cntl->mr = mr;
cntl->nr = nr;
cntl->does_densify = does_densify;
cntl->does_invert_diag = does_invert_diag;
cntl->rev_iter_if_upper = rev_iter_if_upper;
cntl->rev_iter_if_lower = rev_iter_if_lower;

View File

@@ -38,7 +38,6 @@ struct packm_s
varnum_t var_num;
blksz_t* mr;
blksz_t* nr;
bool_t does_densify;
bool_t does_invert_diag;
bool_t rev_iter_if_upper;
bool_t rev_iter_if_lower;
@@ -50,7 +49,6 @@ typedef struct packm_s packm_t;
#define cntl_mr( cntl ) cntl->mr
#define cntl_nr( cntl ) cntl->nr
#define cntl_does_densify( cntl ) cntl->does_densify
#define cntl_does_invert_diag( cntl ) cntl->does_invert_diag
#define cntl_rev_iter_if_upper( cntl ) cntl->rev_iter_if_upper
#define cntl_rev_iter_if_lower( cntl ) cntl->rev_iter_if_lower
@@ -71,7 +69,6 @@ packm_t* bli_packm_cntl_obj_create( impl_t impl_type,
varnum_t var_num,
blksz_t* mr_def,
blksz_t* nr_def,
bool_t does_densify,
bool_t does_invert_diag,
bool_t rev_iter_if_upper,
bool_t rev_iter_if_lower,
@@ -82,7 +79,6 @@ void bli_packm_cntl_obj_init( packm_t* cntl,
varnum_t var_num,
blksz_t* mr_def,
blksz_t* nr_def,
bool_t does_densify,
bool_t does_invert_diag,
bool_t rev_iter_if_upper,
bool_t rev_iter_if_lower,

View File

@@ -44,7 +44,6 @@ void bli_packm_init( obj_t* a,
// block of memory from the memory allocator, if such a block of memory
// has not already been allocated previously.
bool_t needs_densify;
invdiag_t invert_diag;
pack_t pack_schema;
packord_t pack_ord_if_up;
@@ -131,7 +130,6 @@ void bli_packm_init( obj_t* a,
// Extract various fields from the control tree and pass them in
// explicitly into _init_pack(). This allows external code generators
// the option of bypassing usage of control trees altogether.
needs_densify = cntl_does_densify( cntl );
pack_schema = cntl_pack_schema( cntl );
pack_buf_type = cntl_pack_buf_type( cntl );
mr = cntl_mr( cntl );
@@ -147,8 +145,7 @@ void bli_packm_init( obj_t* a,
else pack_ord_if_lo = BLIS_PACK_FWD_IF_LOWER;
// Initialize object p for the final packed matrix.
bli_packm_init_pack( needs_densify,
invert_diag,
bli_packm_init_pack( invert_diag,
pack_schema,
pack_ord_if_up,
pack_ord_if_lo,
@@ -162,8 +159,7 @@ void bli_packm_init( obj_t* a,
}
void bli_packm_init_pack( bool_t densify,
invdiag_t invert_diag,
void bli_packm_init_pack( invdiag_t invert_diag,
pack_t pack_schema,
packord_t pack_ord_if_up,
packord_t pack_ord_if_lo,
@@ -204,7 +200,8 @@ void bli_packm_init_pack( bool_t densify,
// Then, we adjust the properties of p when c needs a transposition.
// We negate the diagonal offset, and if c is upper- or lower-stored,
// we either toggle the uplo of p.
// Finally, if we are going to densify c, we mark p as dense.
// Finally, if we mark p as dense since we assume that all matrices,
// regardless of structure, will be densified.
bli_obj_set_dims_with_trans( transc, m_c, n_c, *p );
bli_obj_set_conjtrans( BLIS_NO_TRANSPOSE, *p );
if ( bli_does_trans( transc ) )
@@ -213,7 +210,7 @@ void bli_packm_init_pack( bool_t densify,
if ( bli_obj_is_upper_or_lower( *c ) )
bli_obj_toggle_uplo( *p );
}
if ( densify ) bli_obj_set_uplo( BLIS_DENSE, *p );
bli_obj_set_uplo( BLIS_DENSE, *p );
// Reset the view offsets to (0,0).
bli_obj_set_offs( 0, 0, *p );

View File

@@ -36,8 +36,7 @@ void bli_packm_init( obj_t* a,
obj_t* p,
packm_t* cntl );
void bli_packm_init_pack( bool_t densify,
invdiag_t invert_diag,
void bli_packm_init_pack( invdiag_t invert_diag,
pack_t pack_schema,
packord_t pack_ord_if_up,
packord_t pack_ord_if_lo,

View File

@@ -42,7 +42,6 @@ typedef void (*FUNCPTR_T)(
diag_t diagc,
uplo_t uploc,
trans_t transc,
bool_t densify,
dim_t m,
dim_t n,
dim_t m_max,
@@ -66,7 +65,6 @@ void bli_packm_unb_var1( obj_t* c,
diag_t diagc = bli_obj_diag( *c );
uplo_t uploc = bli_obj_uplo( *c );
trans_t transc = bli_obj_conjtrans_status( *c );
bool_t densify;
dim_t m_p = bli_obj_length( *p );
dim_t n_p = bli_obj_width( *p );
@@ -85,9 +83,6 @@ void bli_packm_unb_var1( obj_t* c,
FUNCPTR_T f;
// Set densify based on the uplo property of p.
if ( bli_obj_is_dense( *p ) ) densify = TRUE;
else densify = FALSE;
// This variant assumes that the computational kernel will always apply
// the alpha scalar of the higher-level operation. Thus, we use BLIS_ONE
@@ -106,7 +101,6 @@ void bli_packm_unb_var1( obj_t* c,
diagc,
uploc,
transc,
densify,
m_p,
n_p,
m_max_p,
@@ -127,7 +121,6 @@ void PASTEMAC(ch,varname)( \
diag_t diagc, \
uplo_t uploc, \
trans_t transc, \
bool_t densify, \
dim_t m, \
dim_t n, \
dim_t m_max, \
@@ -159,10 +152,9 @@ void PASTEMAC(ch,varname)( \
\
/* If uploc is upper or lower, then the structure of c is necessarily
non-dense (ie: Hermitian, symmetric, or triangular, where part of the
matrix is unstored). In these cases, when indicated by the densify
parameter, we want to fill in the unstored part of the matrix. How
this is done depends on the structure of c. */ \
if ( bli_is_upper_or_lower( uploc ) && densify == TRUE ) \
matrix is unstored). In these cases, we want to fill in the unstored
part of the matrix. How this is done depends on the structure of c. */ \
if ( bli_is_upper_or_lower( uploc ) ) \
{ \
/* The Hermitian and symmetric cases are almost identical, so we
handle them in one conditional block. */ \

View File

@@ -46,7 +46,6 @@ void PASTEMAC(ch,varname)( \
diag_t diagc, \
uplo_t uploc, \
trans_t transc, \
bool_t densify, \
dim_t m, \
dim_t n, \
dim_t m_max, \

View File

@@ -131,7 +131,6 @@ void bli_gemm3m_cntl_init()
BLIS_VARIANT2,
gemm3m_mr,
gemm3m_kr,
TRUE, // densify; used by hemm/symm
FALSE, // do NOT invert diagonal
FALSE, // reverse iteration if upper?
FALSE, // reverse iteration if lower?
@@ -144,7 +143,6 @@ void bli_gemm3m_cntl_init()
BLIS_VARIANT2,
gemm3m_kr,
gemm3m_nr,
TRUE, // densify; used by hemm/symm
FALSE, // do NOT invert diagonal
FALSE, // reverse iteration if upper?
FALSE, // reverse iteration if lower?

View File

@@ -128,7 +128,6 @@ void bli_gemm4m_cntl_init()
BLIS_VARIANT2,
gemm4m_mr,
gemm4m_kr,
TRUE, // densify; used by hemm/symm
FALSE, // do NOT invert diagonal
FALSE, // reverse iteration if upper?
FALSE, // reverse iteration if lower?
@@ -141,7 +140,6 @@ void bli_gemm4m_cntl_init()
BLIS_VARIANT2,
gemm4m_kr,
gemm4m_nr,
TRUE, // densify; used by hemm/symm
FALSE, // do NOT invert diagonal
FALSE, // reverse iteration if upper?
FALSE, // reverse iteration if lower?

View File

@@ -120,7 +120,6 @@ void bli_gemm_cntl_init()
BLIS_VARIANT1,
gemm_mr,
gemm_kr,
TRUE, // densify; used by hemm/symm
FALSE, // do NOT invert diagonal
FALSE, // reverse iteration if upper?
FALSE, // reverse iteration if lower?
@@ -133,7 +132,6 @@ void bli_gemm_cntl_init()
BLIS_VARIANT1,
gemm_kr,
gemm_nr,
TRUE, // densify; used by hemm/symm
FALSE, // do NOT invert diagonal
FALSE, // reverse iteration if upper?
FALSE, // reverse iteration if lower?

View File

@@ -68,7 +68,6 @@ void bli_her2k_cntl_init()
BLIS_VARIANT2,
her2k_mr,
her2k_kr,
FALSE, // already dense; densify not necessary
FALSE, // do NOT invert diagonal
FALSE, // reverse iteration if upper?
FALSE, // reverse iteration if lower?
@@ -81,7 +80,6 @@ void bli_her2k_cntl_init()
BLIS_VARIANT2,
her2k_kr,
her2k_nr,
FALSE, // already dense; densify not necessary
FALSE, // do NOT invert diagonal
FALSE, // reverse iteration if upper?
FALSE, // reverse iteration if lower?

View File

@@ -65,7 +65,6 @@ void bli_herk3m_cntl_init()
BLIS_VARIANT2,
gemm3m_mr,
gemm3m_kr,
FALSE, // already dense; densify not necessary
FALSE, // do NOT invert diagonal
FALSE, // reverse iteration if upper?
FALSE, // reverse iteration if lower?
@@ -78,7 +77,6 @@ void bli_herk3m_cntl_init()
BLIS_VARIANT2,
gemm3m_kr,
gemm3m_nr,
FALSE, // already dense; densify not necessary
FALSE, // do NOT invert diagonal
FALSE, // reverse iteration if upper?
FALSE, // reverse iteration if lower?

View File

@@ -65,7 +65,6 @@ void bli_herk4m_cntl_init()
BLIS_VARIANT2,
gemm4m_mr,
gemm4m_kr,
FALSE, // already dense; densify not necessary
FALSE, // do NOT invert diagonal
FALSE, // reverse iteration if upper?
FALSE, // reverse iteration if lower?
@@ -78,7 +77,6 @@ void bli_herk4m_cntl_init()
BLIS_VARIANT2,
gemm4m_kr,
gemm4m_nr,
FALSE, // already dense; densify not necessary
FALSE, // do NOT invert diagonal
FALSE, // reverse iteration if upper?
FALSE, // reverse iteration if lower?

View File

@@ -65,7 +65,6 @@ void bli_herk_cntl_init()
BLIS_VARIANT1,
gemm_mr,
gemm_kr,
FALSE, // already dense; densify not necessary
FALSE, // do NOT invert diagonal
FALSE, // reverse iteration if upper?
FALSE, // reverse iteration if lower?
@@ -78,7 +77,6 @@ void bli_herk_cntl_init()
BLIS_VARIANT1,
gemm_kr,
gemm_nr,
FALSE, // already dense; densify not necessary
FALSE, // do NOT invert diagonal
FALSE, // reverse iteration if upper?
FALSE, // reverse iteration if lower?

View File

@@ -78,7 +78,6 @@ void bli_trmm3m_cntl_init()
// multiple is set to mr.
gemm3m_mr,
gemm3m_kr,
TRUE, // densify
FALSE, // do NOT invert diagonal
FALSE, // reverse iteration if upper?
FALSE, // reverse iteration if lower?
@@ -93,7 +92,6 @@ void bli_trmm3m_cntl_init()
// since "k" dim multiple is set to mr above.
gemm3m_kr,
gemm3m_nr,
TRUE, // already dense
FALSE, // do NOT invert diagonal
FALSE, // reverse iteration if upper?
FALSE, // reverse iteration if lower?
@@ -109,7 +107,6 @@ void bli_trmm3m_cntl_init()
// multiple is set to nr.
gemm3m_mr,
gemm3m_nr,
FALSE, // already dense
FALSE, // do NOT invert diagonal
FALSE, // reverse iteration if upper?
FALSE, // reverse iteration if lower?
@@ -124,7 +121,6 @@ void bli_trmm3m_cntl_init()
// since "k" dim multiple is set to nr above.
gemm3m_nr,
gemm3m_nr,
TRUE, // densify
FALSE, // do NOT invert diagonal
FALSE, // reverse iteration if upper?
FALSE, // reverse iteration if lower?

View File

@@ -78,7 +78,6 @@ void bli_trmm4m_cntl_init()
// multiple is set to mr.
gemm4m_mr,
gemm4m_kr,
TRUE, // densify
FALSE, // do NOT invert diagonal
FALSE, // reverse iteration if upper?
FALSE, // reverse iteration if lower?
@@ -93,7 +92,6 @@ void bli_trmm4m_cntl_init()
// since "k" dim multiple is set to mr above.
gemm4m_kr,
gemm4m_nr,
TRUE, // already dense
FALSE, // do NOT invert diagonal
FALSE, // reverse iteration if upper?
FALSE, // reverse iteration if lower?
@@ -109,7 +107,6 @@ void bli_trmm4m_cntl_init()
// multiple is set to nr.
gemm4m_mr,
gemm4m_nr,
FALSE, // already dense
FALSE, // do NOT invert diagonal
FALSE, // reverse iteration if upper?
FALSE, // reverse iteration if lower?
@@ -124,7 +121,6 @@ void bli_trmm4m_cntl_init()
// since "k" dim multiple is set to nr above.
gemm4m_nr,
gemm4m_nr,
TRUE, // densify
FALSE, // do NOT invert diagonal
FALSE, // reverse iteration if upper?
FALSE, // reverse iteration if lower?

View File

@@ -70,7 +70,6 @@ void bli_trmm_cntl_init()
// "k" dim multiple equal to mr.
gemm_mr,
gemm_kr,
TRUE, // densify
FALSE, // do NOT invert diagonal
FALSE, // reverse iteration if upper?
FALSE, // reverse iteration if lower?
@@ -85,7 +84,6 @@ void bli_trmm_cntl_init()
// "k" dim multiple equal to mr.
gemm_kr,
gemm_nr,
TRUE, // densify
FALSE, // do NOT invert diagonal
FALSE, // reverse iteration if upper?
FALSE, // reverse iteration if lower?

View File

@@ -97,7 +97,6 @@ void bli_trsm3m_cntl_init()
// support right and bottom-right edge cases
gemm3m_mr,
gemm3m_mr,
TRUE, // densify
TRUE, // invert diagonal
TRUE, // reverse iteration if upper?
FALSE, // reverse iteration if lower?
@@ -112,7 +111,6 @@ void bli_trsm3m_cntl_init()
// B_pack is updated (ie: serves as C) in trsm
gemm3m_mr,
gemm3m_nr,
FALSE, // already dense; densify not necessary
FALSE, // do NOT invert diagonal
FALSE, // reverse iteration if upper?
FALSE, // reverse iteration if lower?
@@ -126,7 +124,6 @@ void bli_trsm3m_cntl_init()
BLIS_VARIANT2,
gemm3m_nr,
gemm3m_mr,
FALSE, // already dense; densify not necessary
FALSE, // do NOT invert diagonal
FALSE, // reverse iteration if upper?
FALSE, // reverse iteration if lower?
@@ -139,7 +136,6 @@ void bli_trsm3m_cntl_init()
BLIS_VARIANT2,
gemm3m_mr,
gemm3m_mr,
TRUE, // densify
TRUE, // invert diagonal
FALSE, // reverse iteration if upper?
TRUE, // reverse iteration if lower?

View File

@@ -98,7 +98,6 @@ void bli_trsm4m_cntl_init()
// support right and bottom-right edge cases
gemm4m_mr,
gemm4m_mr,
TRUE, // densify
TRUE, // invert diagonal
TRUE, // reverse iteration if upper?
FALSE, // reverse iteration if lower?
@@ -113,7 +112,6 @@ void bli_trsm4m_cntl_init()
// B_pack is updated (ie: serves as C) in trsm
gemm4m_mr,
gemm4m_nr,
FALSE, // already dense; densify not necessary
FALSE, // do NOT invert diagonal
FALSE, // reverse iteration if upper?
FALSE, // reverse iteration if lower?
@@ -127,7 +125,6 @@ void bli_trsm4m_cntl_init()
BLIS_VARIANT2,
gemm4m_nr,
gemm4m_mr,
FALSE, // already dense; densify not necessary
FALSE, // do NOT invert diagonal
FALSE, // reverse iteration if upper?
FALSE, // reverse iteration if lower?
@@ -140,7 +137,6 @@ void bli_trsm4m_cntl_init()
BLIS_VARIANT2,
gemm4m_mr,
gemm4m_mr,
TRUE, // densify
TRUE, // invert diagonal
FALSE, // reverse iteration if upper?
TRUE, // reverse iteration if lower?

View File

@@ -99,7 +99,6 @@ void bli_trsm_cntl_init()
// support right and bottom-right edge cases
gemm_mr,
gemm_mr,
TRUE, // densify
TRUE, // invert diagonal
TRUE, // reverse iteration if upper?
FALSE, // reverse iteration if lower?
@@ -114,7 +113,6 @@ void bli_trsm_cntl_init()
// B_pack is updated (ie: serves as C) in trsm
gemm_mr,
gemm_nr,
FALSE, // already dense; densify not necessary
FALSE, // do NOT invert diagonal
FALSE, // reverse iteration if upper?
FALSE, // reverse iteration if lower?
@@ -128,7 +126,6 @@ void bli_trsm_cntl_init()
BLIS_VARIANT1,
gemm_nr,
gemm_mr,
FALSE, // already dense; densify not necessary
FALSE, // do NOT invert diagonal
FALSE, // reverse iteration if upper?
FALSE, // reverse iteration if lower?
@@ -141,7 +138,6 @@ void bli_trsm_cntl_init()
BLIS_VARIANT1, // pack panels of B compactly
gemm_mr,
gemm_mr,
TRUE, // densify
TRUE, // invert diagonal
FALSE, // reverse iteration if upper?
TRUE, // reverse iteration if lower?