From 8d5169ccda954e5f72944308a036dcb7ebfc9097 Mon Sep 17 00:00:00 2001 From: "Field G. Van Zee" Date: Wed, 18 Mar 2015 11:38:08 -0500 Subject: [PATCH] Fixed bug in release of mem_t buffer. Details: - Fixed a bug that affects all level-2 and level-3 blocked variants. The bug only manifested, however, if the packing of operands (A and B in gemm, for example) spanned multiple nodes in the control tree. Until recently, the main consumers of packm were level-3 operations, all of which packed both input operands from blocked variant 1 (B outside of the loop, and A within the loop). This particular usage masked a flaw in the code whereby bli_obj_release_pack() would always release the underlying mem_t buffer (provided it was allocated), even if the buffer was not allocated in the current variant. This has been fixed by replacing all calls to bli_obj_release_pack() with calls to a new function, bli_packm_release(), which takes the same control tree node argument passed into the object's corresponding call to packm_init() or packv_init(). bli_packm_release() then proceeds to invoke bli_obj_release_pack() only if the control tree node indicates that packing was requested. Thanks to Devangi Parikh for identifying this bug. --- frame/1/packv/bli_packv_init.c | 7 +++++++ frame/1/packv/bli_packv_init.h | 3 +++ frame/1m/packm/bli_packm_init.c | 7 +++++++ frame/1m/packm/bli_packm_init.h | 4 ++++ frame/2/gemv/bli_gemv_blk_var1.c | 4 ++-- frame/2/gemv/bli_gemv_blk_var2.c | 4 ++-- frame/2/ger/bli_ger_blk_var1.c | 4 ++-- frame/2/ger/bli_ger_blk_var2.c | 4 ++-- frame/2/hemv/bli_hemv_blk_var1.c | 6 +++--- frame/2/hemv/bli_hemv_blk_var2.c | 6 +++--- frame/2/hemv/bli_hemv_blk_var3.c | 6 +++--- frame/2/hemv/bli_hemv_blk_var4.c | 6 +++--- frame/2/her/bli_her_blk_var1.c | 4 ++-- frame/2/her/bli_her_blk_var2.c | 4 ++-- frame/2/her2/bli_her2_blk_var1.c | 6 +++--- frame/2/her2/bli_her2_blk_var2.c | 6 +++--- frame/2/her2/bli_her2_blk_var3.c | 6 +++--- frame/2/her2/bli_her2_blk_var4.c | 6 +++--- frame/2/trmv/bli_trmv_l_blk_var1.c | 4 ++-- frame/2/trmv/bli_trmv_l_blk_var2.c | 4 ++-- frame/2/trmv/bli_trmv_u_blk_var1.c | 4 ++-- frame/2/trmv/bli_trmv_u_blk_var2.c | 4 ++-- frame/2/trsv/bli_trsv_l_blk_var1.c | 4 ++-- frame/2/trsv/bli_trsv_l_blk_var2.c | 4 ++-- frame/2/trsv/bli_trsv_u_blk_var1.c | 4 ++-- frame/2/trsv/bli_trsv_u_blk_var2.c | 4 ++-- frame/3/gemm/bli_gemm_blk_var1f.c | 6 +++--- frame/3/gemm/bli_gemm_blk_var2f.c | 6 +++--- frame/3/gemm/bli_gemm_blk_var3f.c | 6 +++--- frame/3/herk/bli_herk_blk_var1f.c | 6 +++--- frame/3/herk/bli_herk_blk_var2f.c | 6 +++--- frame/3/herk/bli_herk_blk_var3f.c | 6 +++--- frame/3/trmm/bli_trmm_blk_var1f.c | 6 +++--- frame/3/trmm/bli_trmm_blk_var2b.c | 6 +++--- frame/3/trmm/bli_trmm_blk_var2f.c | 6 +++--- frame/3/trmm/bli_trmm_blk_var3b.c | 6 +++--- frame/3/trmm/bli_trmm_blk_var3f.c | 6 +++--- frame/3/trsm/bli_trsm_blk_var1b.c | 4 ++-- frame/3/trsm/bli_trsm_blk_var1f.c | 4 ++-- frame/3/trsm/bli_trsm_blk_var2b.c | 6 +++--- frame/3/trsm/bli_trsm_blk_var2f.c | 6 +++--- frame/3/trsm/bli_trsm_blk_var3b.c | 6 +++--- frame/3/trsm/bli_trsm_blk_var3f.c | 6 +++--- frame/include/bli_obj_macro_defs.h | 1 + 44 files changed, 123 insertions(+), 101 deletions(-) diff --git a/frame/1/packv/bli_packv_init.c b/frame/1/packv/bli_packv_init.c index fadf23e95..2ecc96e4b 100644 --- a/frame/1/packv/bli_packv_init.c +++ b/frame/1/packv/bli_packv_init.c @@ -199,6 +199,13 @@ void bli_packv_init_pack( pack_t pack_schema, } } +void bli_packv_release( obj_t* p, + packv_t* cntl ) +{ + if ( !cntl_is_noop( cntl ) ) + bli_obj_release_pack( p ); +} + /* void bli_packv_init_cast( obj_t* a, diff --git a/frame/1/packv/bli_packv_init.h b/frame/1/packv/bli_packv_init.h index d77fc8166..3730fe3eb 100644 --- a/frame/1/packv/bli_packv_init.h +++ b/frame/1/packv/bli_packv_init.h @@ -41,6 +41,9 @@ void bli_packv_init_pack( pack_t pack_schema, obj_t* c, obj_t* p ); +void bli_packv_release( obj_t* p, + packv_t* cntl ); + /* void bli_packv_init_cast( obj_t* a, obj_t* p, diff --git a/frame/1m/packm/bli_packm_init.c b/frame/1m/packm/bli_packm_init.c index b9bf2af8b..6dd5b3c11 100644 --- a/frame/1m/packm/bli_packm_init.c +++ b/frame/1m/packm/bli_packm_init.c @@ -558,6 +558,13 @@ void bli_packm_init_pack( invdiag_t invert_diag, } +void bli_packm_release( obj_t* p, + packm_t* cntl ) +{ + if ( !cntl_is_noop( cntl ) ) + bli_obj_release_pack( p ); +} + /* void bli_packm_init_cast( obj_t* a, diff --git a/frame/1m/packm/bli_packm_init.h b/frame/1m/packm/bli_packm_init.h index 17bd2c1d4..f5d2f1f6a 100644 --- a/frame/1m/packm/bli_packm_init.h +++ b/frame/1m/packm/bli_packm_init.h @@ -51,3 +51,7 @@ void bli_packm_init_cast( obj_t* a, obj_t* p, obj_t* c ); */ + +void bli_packm_release( obj_t* p, + packm_t* cntl ); + diff --git a/frame/2/gemv/bli_gemv_blk_var1.c b/frame/2/gemv/bli_gemv_blk_var1.c index 76390ed14..337ad8f01 100644 --- a/frame/2/gemv/bli_gemv_blk_var1.c +++ b/frame/2/gemv/bli_gemv_blk_var1.c @@ -98,7 +98,7 @@ void bli_gemv_blk_var1( obj_t* alpha, // If any packing buffers were acquired within packm, release them back // to the memory manager. - bli_obj_release_pack( &a1_pack ); - bli_obj_release_pack( &y1_pack ); + bli_packm_release( &a1_pack, cntl_sub_packm_a( cntl ) ); + bli_packv_release( &y1_pack, cntl_sub_packv_y( cntl ) ); } diff --git a/frame/2/gemv/bli_gemv_blk_var2.c b/frame/2/gemv/bli_gemv_blk_var2.c index 74adaa1f5..b1aed7f41 100644 --- a/frame/2/gemv/bli_gemv_blk_var2.c +++ b/frame/2/gemv/bli_gemv_blk_var2.c @@ -99,7 +99,7 @@ void bli_gemv_blk_var2( obj_t* alpha, // If any packing buffers were acquired within packm, release them back // to the memory manager. - bli_obj_release_pack( &a1_pack ); - bli_obj_release_pack( &x1_pack ); + bli_packm_release( &a1_pack, cntl_sub_packm_a( cntl ) ); + bli_packv_release( &x1_pack, cntl_sub_packv_x( cntl ) ); } diff --git a/frame/2/ger/bli_ger_blk_var1.c b/frame/2/ger/bli_ger_blk_var1.c index 4e647c772..b52647928 100644 --- a/frame/2/ger/bli_ger_blk_var1.c +++ b/frame/2/ger/bli_ger_blk_var1.c @@ -97,7 +97,7 @@ void bli_ger_blk_var1( obj_t* alpha, // If any packing buffers were acquired within packm, release them back // to the memory manager. - bli_obj_release_pack( &a1_pack ); - bli_obj_release_pack( &x1_pack ); + bli_packm_release( &a1_pack, cntl_sub_packm_a( cntl ) ); + bli_packv_release( &x1_pack, cntl_sub_packv_x( cntl ) ); } diff --git a/frame/2/ger/bli_ger_blk_var2.c b/frame/2/ger/bli_ger_blk_var2.c index e02b7a0e8..3be4418a6 100644 --- a/frame/2/ger/bli_ger_blk_var2.c +++ b/frame/2/ger/bli_ger_blk_var2.c @@ -97,7 +97,7 @@ void bli_ger_blk_var2( obj_t* alpha, // If any packing buffers were acquired within packm, release them back // to the memory manager. - bli_obj_release_pack( &a1_pack ); - bli_obj_release_pack( &y1_pack ); + bli_packm_release( &a1_pack, cntl_sub_packm_a( cntl ) ); + bli_packv_release( &y1_pack, cntl_sub_packv_y( cntl ) ); } diff --git a/frame/2/hemv/bli_hemv_blk_var1.c b/frame/2/hemv/bli_hemv_blk_var1.c index 928a7f993..56b26e72c 100644 --- a/frame/2/hemv/bli_hemv_blk_var1.c +++ b/frame/2/hemv/bli_hemv_blk_var1.c @@ -149,8 +149,8 @@ void bli_hemv_blk_var1( conj_t conjh, // If any packing buffers were acquired within packm, release them back // to the memory manager. - bli_obj_release_pack( &a11_pack ); - bli_obj_release_pack( &x1_pack ); - bli_obj_release_pack( &y1_pack ); + bli_packm_release( &a11_pack, cntl_sub_packm_a11( cntl ) ); + bli_packv_release( &x1_pack, cntl_sub_packv_x1( cntl ) ); + bli_packv_release( &y1_pack, cntl_sub_packv_y1( cntl ) ); } diff --git a/frame/2/hemv/bli_hemv_blk_var2.c b/frame/2/hemv/bli_hemv_blk_var2.c index 00afa83a0..9ead6f7e9 100644 --- a/frame/2/hemv/bli_hemv_blk_var2.c +++ b/frame/2/hemv/bli_hemv_blk_var2.c @@ -152,8 +152,8 @@ void bli_hemv_blk_var2( conj_t conjh, // If any packing buffers were acquired within packm, release them back // to the memory manager. - bli_obj_release_pack( &a11_pack ); - bli_obj_release_pack( &x1_pack ); - bli_obj_release_pack( &y1_pack ); + bli_packm_release( &a11_pack, cntl_sub_packm_a11( cntl ) ); + bli_packv_release( &x1_pack, cntl_sub_packv_x1( cntl ) ); + bli_packv_release( &y1_pack, cntl_sub_packv_y1( cntl ) ); } diff --git a/frame/2/hemv/bli_hemv_blk_var3.c b/frame/2/hemv/bli_hemv_blk_var3.c index 571ea9444..06121f379 100644 --- a/frame/2/hemv/bli_hemv_blk_var3.c +++ b/frame/2/hemv/bli_hemv_blk_var3.c @@ -149,8 +149,8 @@ void bli_hemv_blk_var3( conj_t conjh, // If any packing buffers were acquired within packm, release them back // to the memory manager. - bli_obj_release_pack( &a11_pack ); - bli_obj_release_pack( &x1_pack ); - bli_obj_release_pack( &y1_pack ); + bli_packm_release( &a11_pack, cntl_sub_packm_a11( cntl ) ); + bli_packv_release( &x1_pack, cntl_sub_packv_x1( cntl ) ); + bli_packv_release( &y1_pack, cntl_sub_packv_y1( cntl ) ); } diff --git a/frame/2/hemv/bli_hemv_blk_var4.c b/frame/2/hemv/bli_hemv_blk_var4.c index 8c5c3bb78..ae6adf4eb 100644 --- a/frame/2/hemv/bli_hemv_blk_var4.c +++ b/frame/2/hemv/bli_hemv_blk_var4.c @@ -152,8 +152,8 @@ void bli_hemv_blk_var4( conj_t conjh, // If any packing buffers were acquired within packm, release them back // to the memory manager. - bli_obj_release_pack( &a11_pack ); - bli_obj_release_pack( &x1_pack ); - bli_obj_release_pack( &y1_pack ); + bli_packm_release( &a11_pack, cntl_sub_packm_a11( cntl ) ); + bli_packv_release( &x1_pack, cntl_sub_packv_x1( cntl ) ); + bli_packv_release( &y1_pack, cntl_sub_packv_y1( cntl ) ); } diff --git a/frame/2/her/bli_her_blk_var1.c b/frame/2/her/bli_her_blk_var1.c index a7074948e..40630f7cb 100644 --- a/frame/2/her/bli_her_blk_var1.c +++ b/frame/2/her/bli_her_blk_var1.c @@ -119,7 +119,7 @@ void bli_her_blk_var1( conj_t conjh, // If any packing buffers were acquired within packm, release them back // to the memory manager. - bli_obj_release_pack( &c11_pack ); - bli_obj_release_pack( &x1_pack ); + bli_packm_release( &c11_pack, cntl_sub_packm_c11( cntl ) ); + bli_packv_release( &x1_pack, cntl_sub_packv_x1( cntl ) ); } diff --git a/frame/2/her/bli_her_blk_var2.c b/frame/2/her/bli_her_blk_var2.c index 931e7538c..1e0cdbf8e 100644 --- a/frame/2/her/bli_her_blk_var2.c +++ b/frame/2/her/bli_her_blk_var2.c @@ -119,7 +119,7 @@ void bli_her_blk_var2( conj_t conjh, // If any packing buffers were acquired within packm, release them back // to the memory manager. - bli_obj_release_pack( &c11_pack ); - bli_obj_release_pack( &x1_pack ); + bli_packm_release( &c11_pack, cntl_sub_packm_c11( cntl ) ); + bli_packv_release( &x1_pack, cntl_sub_packv_x1( cntl ) ); } diff --git a/frame/2/her2/bli_her2_blk_var1.c b/frame/2/her2/bli_her2_blk_var1.c index a26ef2013..663bf50bf 100644 --- a/frame/2/her2/bli_her2_blk_var1.c +++ b/frame/2/her2/bli_her2_blk_var1.c @@ -143,8 +143,8 @@ void bli_her2_blk_var1( conj_t conjh, // If any packing buffers were acquired within packm, release them back // to the memory manager. - bli_obj_release_pack( &c11_pack ); - bli_obj_release_pack( &x1_pack ); - bli_obj_release_pack( &y1_pack ); + bli_packm_release( &c11_pack, cntl_sub_packm_c11( cntl ) ); + bli_packv_release( &x1_pack, cntl_sub_packv_x1( cntl ) ); + bli_packv_release( &y1_pack, cntl_sub_packv_y1( cntl ) ); } diff --git a/frame/2/her2/bli_her2_blk_var2.c b/frame/2/her2/bli_her2_blk_var2.c index ffa94b121..1757fa777 100644 --- a/frame/2/her2/bli_her2_blk_var2.c +++ b/frame/2/her2/bli_her2_blk_var2.c @@ -146,8 +146,8 @@ void bli_her2_blk_var2( conj_t conjh, // If any packing buffers were acquired within packm, release them back // to the memory manager. - bli_obj_release_pack( &c11_pack ); - bli_obj_release_pack( &x1_pack ); - bli_obj_release_pack( &y1_pack ); + bli_packm_release( &c11_pack, cntl_sub_packm_c11( cntl ) ); + bli_packv_release( &x1_pack, cntl_sub_packv_x1( cntl ) ); + bli_packv_release( &y1_pack, cntl_sub_packv_y1( cntl ) ); } diff --git a/frame/2/her2/bli_her2_blk_var3.c b/frame/2/her2/bli_her2_blk_var3.c index 2cf789302..5a12f3ce9 100644 --- a/frame/2/her2/bli_her2_blk_var3.c +++ b/frame/2/her2/bli_her2_blk_var3.c @@ -146,8 +146,8 @@ void bli_her2_blk_var3( conj_t conjh, // If any packing buffers were acquired within packm, release them back // to the memory manager. - bli_obj_release_pack( &c11_pack ); - bli_obj_release_pack( &x1_pack ); - bli_obj_release_pack( &y1_pack ); + bli_packm_release( &c11_pack, cntl_sub_packm_c11( cntl ) ); + bli_packv_release( &x1_pack, cntl_sub_packv_x1( cntl ) ); + bli_packv_release( &y1_pack, cntl_sub_packv_y1( cntl ) ); } diff --git a/frame/2/her2/bli_her2_blk_var4.c b/frame/2/her2/bli_her2_blk_var4.c index 57d2fc71b..8177115ff 100644 --- a/frame/2/her2/bli_her2_blk_var4.c +++ b/frame/2/her2/bli_her2_blk_var4.c @@ -143,8 +143,8 @@ void bli_her2_blk_var4( conj_t conjh, // If any packing buffers were acquired within packm, release them back // to the memory manager. - bli_obj_release_pack( &c11_pack ); - bli_obj_release_pack( &x1_pack ); - bli_obj_release_pack( &y1_pack ); + bli_packm_release( &c11_pack, cntl_sub_packm_c11( cntl ) ); + bli_packv_release( &x1_pack, cntl_sub_packv_x1( cntl ) ); + bli_packv_release( &y1_pack, cntl_sub_packv_y1( cntl ) ); } diff --git a/frame/2/trmv/bli_trmv_l_blk_var1.c b/frame/2/trmv/bli_trmv_l_blk_var1.c index 17d6347e8..cd7b6a248 100644 --- a/frame/2/trmv/bli_trmv_l_blk_var1.c +++ b/frame/2/trmv/bli_trmv_l_blk_var1.c @@ -108,7 +108,7 @@ void bli_trmv_l_blk_var1( obj_t* alpha, // If any packing buffers were acquired within packm, release them back // to the memory manager. - bli_obj_release_pack( &a11_pack ); - bli_obj_release_pack( &x1_pack ); + bli_packm_release( &a11_pack, cntl_sub_packm_a11( cntl ) ); + bli_packv_release( &x1_pack, cntl_sub_packv_x1( cntl ) ); } diff --git a/frame/2/trmv/bli_trmv_l_blk_var2.c b/frame/2/trmv/bli_trmv_l_blk_var2.c index 67ae1eac6..1df5b68af 100644 --- a/frame/2/trmv/bli_trmv_l_blk_var2.c +++ b/frame/2/trmv/bli_trmv_l_blk_var2.c @@ -108,7 +108,7 @@ void bli_trmv_l_blk_var2( obj_t* alpha, // If any packing buffers were acquired within packm, release them back // to the memory manager. - bli_obj_release_pack( &a11_pack ); - bli_obj_release_pack( &x1_pack ); + bli_packm_release( &a11_pack, cntl_sub_packm_a11( cntl ) ); + bli_packv_release( &x1_pack, cntl_sub_packv_x1( cntl ) ); } diff --git a/frame/2/trmv/bli_trmv_u_blk_var1.c b/frame/2/trmv/bli_trmv_u_blk_var1.c index 531f5e082..aa0b324fa 100644 --- a/frame/2/trmv/bli_trmv_u_blk_var1.c +++ b/frame/2/trmv/bli_trmv_u_blk_var1.c @@ -108,7 +108,7 @@ void bli_trmv_u_blk_var1( obj_t* alpha, // If any packing buffers were acquired within packm, release them back // to the memory manager. - bli_obj_release_pack( &a11_pack ); - bli_obj_release_pack( &x1_pack ); + bli_packm_release( &a11_pack, cntl_sub_packm_a11( cntl ) ); + bli_packv_release( &x1_pack, cntl_sub_packv_x1( cntl ) ); } diff --git a/frame/2/trmv/bli_trmv_u_blk_var2.c b/frame/2/trmv/bli_trmv_u_blk_var2.c index 80f7dbc7b..00e33d8ba 100644 --- a/frame/2/trmv/bli_trmv_u_blk_var2.c +++ b/frame/2/trmv/bli_trmv_u_blk_var2.c @@ -108,7 +108,7 @@ void bli_trmv_u_blk_var2( obj_t* alpha, // If any packing buffers were acquired within packm, release them back // to the memory manager. - bli_obj_release_pack( &a11_pack ); - bli_obj_release_pack( &x1_pack ); + bli_packm_release( &a11_pack, cntl_sub_packm_a11( cntl ) ); + bli_packv_release( &x1_pack, cntl_sub_packv_x1( cntl ) ); } diff --git a/frame/2/trsv/bli_trsv_l_blk_var1.c b/frame/2/trsv/bli_trsv_l_blk_var1.c index bbb1d0b55..557cab5d8 100644 --- a/frame/2/trsv/bli_trsv_l_blk_var1.c +++ b/frame/2/trsv/bli_trsv_l_blk_var1.c @@ -113,7 +113,7 @@ void bli_trsv_l_blk_var1( obj_t* alpha, // If any packing buffers were acquired within packm, release them back // to the memory manager. - bli_obj_release_pack( &a11_pack ); - bli_obj_release_pack( &x1_pack ); + bli_packm_release( &a11_pack, cntl_sub_packm_a11( cntl ) ); + bli_packv_release( &x1_pack, cntl_sub_packv_x1( cntl ) ); } diff --git a/frame/2/trsv/bli_trsv_l_blk_var2.c b/frame/2/trsv/bli_trsv_l_blk_var2.c index de9116bd3..3ee427e0b 100644 --- a/frame/2/trsv/bli_trsv_l_blk_var2.c +++ b/frame/2/trsv/bli_trsv_l_blk_var2.c @@ -113,7 +113,7 @@ void bli_trsv_l_blk_var2( obj_t* alpha, // If any packing buffers were acquired within packm, release them back // to the memory manager. - bli_obj_release_pack( &a11_pack ); - bli_obj_release_pack( &x1_pack ); + bli_packm_release( &a11_pack, cntl_sub_packm_a11( cntl ) ); + bli_packv_release( &x1_pack, cntl_sub_packv_x1( cntl ) ); } diff --git a/frame/2/trsv/bli_trsv_u_blk_var1.c b/frame/2/trsv/bli_trsv_u_blk_var1.c index c9f2d8810..b8b5a3f3b 100644 --- a/frame/2/trsv/bli_trsv_u_blk_var1.c +++ b/frame/2/trsv/bli_trsv_u_blk_var1.c @@ -113,7 +113,7 @@ void bli_trsv_u_blk_var1( obj_t* alpha, // If any packing buffers were acquired within packm, release them back // to the memory manager. - bli_obj_release_pack( &a11_pack ); - bli_obj_release_pack( &x1_pack ); + bli_packm_release( &a11_pack, cntl_sub_packm_a11( cntl ) ); + bli_packv_release( &x1_pack, cntl_sub_packv_x1( cntl ) ); } diff --git a/frame/2/trsv/bli_trsv_u_blk_var2.c b/frame/2/trsv/bli_trsv_u_blk_var2.c index 0a650861f..1020bf5bf 100644 --- a/frame/2/trsv/bli_trsv_u_blk_var2.c +++ b/frame/2/trsv/bli_trsv_u_blk_var2.c @@ -113,7 +113,7 @@ void bli_trsv_u_blk_var2( obj_t* alpha, // If any packing buffers were acquired within packm, release them back // to the memory manager. - bli_obj_release_pack( &a11_pack ); - bli_obj_release_pack( &x1_pack ); + bli_packm_release( &a11_pack, cntl_sub_packm_a11( cntl ) ); + bli_packv_release( &x1_pack, cntl_sub_packv_x1( cntl ) ); } diff --git a/frame/3/gemm/bli_gemm_blk_var1f.c b/frame/3/gemm/bli_gemm_blk_var1f.c index d42839214..21fa3c879 100644 --- a/frame/3/gemm/bli_gemm_blk_var1f.c +++ b/frame/3/gemm/bli_gemm_blk_var1f.c @@ -144,10 +144,10 @@ void bli_gemm_blk_var1f( obj_t* a, // to the memory manager. thread_obarrier( thread ); if( thread_am_ochief( thread ) ) - bli_obj_release_pack( b_pack ); + bli_packm_release( b_pack, cntl_sub_packm_b( cntl ) ); if( thread_am_ichief( thread ) ){ - bli_obj_release_pack( a1_pack ); - bli_obj_release_pack( c1_pack ); + bli_packm_release( a1_pack, cntl_sub_packm_a( cntl ) ); + bli_packm_release( c1_pack, cntl_sub_packm_c( cntl ) ); } } diff --git a/frame/3/gemm/bli_gemm_blk_var2f.c b/frame/3/gemm/bli_gemm_blk_var2f.c index 26b5d2e52..b43e40829 100644 --- a/frame/3/gemm/bli_gemm_blk_var2f.c +++ b/frame/3/gemm/bli_gemm_blk_var2f.c @@ -143,10 +143,10 @@ void bli_gemm_blk_var2f( obj_t* a, // to the memory manager. thread_obarrier( thread ); if( thread_am_ochief( thread ) ) - bli_obj_release_pack( a_pack ); + bli_packm_release( a_pack, cntl_sub_packm_a( cntl ) ); if( thread_am_ichief( thread ) ) { - bli_obj_release_pack( b1_pack ); - bli_obj_release_pack( c1_pack ); + bli_packm_release( b1_pack, cntl_sub_packm_b( cntl ) ); + bli_packm_release( c1_pack, cntl_sub_packm_c( cntl ) ); } } diff --git a/frame/3/gemm/bli_gemm_blk_var3f.c b/frame/3/gemm/bli_gemm_blk_var3f.c index 996f465a4..febf38cde 100644 --- a/frame/3/gemm/bli_gemm_blk_var3f.c +++ b/frame/3/gemm/bli_gemm_blk_var3f.c @@ -146,10 +146,10 @@ void bli_gemm_blk_var3f( obj_t* a, // If any packing buffers were acquired within packm, release them back // to the memory manager. if( thread_am_ochief( thread ) ) - bli_obj_release_pack( c_pack ); + bli_packm_release( c_pack, cntl_sub_packm_c( cntl ) ); if( thread_am_ichief( thread ) ){ - bli_obj_release_pack( a1_pack ); - bli_obj_release_pack( b1_pack ); + bli_packm_release( a1_pack, cntl_sub_packm_a( cntl ) ); + bli_packm_release( b1_pack, cntl_sub_packm_b( cntl ) ); } } diff --git a/frame/3/herk/bli_herk_blk_var1f.c b/frame/3/herk/bli_herk_blk_var1f.c index 11cc5edcf..9291ba6d0 100644 --- a/frame/3/herk/bli_herk_blk_var1f.c +++ b/frame/3/herk/bli_herk_blk_var1f.c @@ -139,10 +139,10 @@ void bli_herk_blk_var1f( obj_t* a, // to the memory manager. thread_obarrier( thread ); if( thread_am_ochief( thread ) ) - bli_obj_release_pack( ah_pack ); + bli_packm_release( ah_pack, cntl_sub_packm_b( cntl ) ); if( thread_am_ichief( thread ) ) { - bli_obj_release_pack( a1_pack ); - bli_obj_release_pack( c1_pack ); + bli_packm_release( a1_pack, cntl_sub_packm_a( cntl ) ); + bli_packm_release( c1_pack, cntl_sub_packm_c( cntl ) ); } } diff --git a/frame/3/herk/bli_herk_blk_var2f.c b/frame/3/herk/bli_herk_blk_var2f.c index f491d985f..33b009204 100644 --- a/frame/3/herk/bli_herk_blk_var2f.c +++ b/frame/3/herk/bli_herk_blk_var2f.c @@ -154,10 +154,10 @@ void bli_herk_blk_var2f( obj_t* a, // to the memory manager. thread_obarrier( thread ); if( thread_am_ochief( thread ) ) - bli_obj_release_pack( a_pack ); + bli_packm_release( a_pack, cntl_sub_packm_a( cntl ) ); if( thread_am_ichief( thread ) ) { - bli_obj_release_pack( ah1_pack ); - bli_obj_release_pack( c1S_pack ); + bli_packm_release( ah1_pack, cntl_sub_packm_b( cntl ) ); + bli_packm_release( c1S_pack, cntl_sub_packm_c( cntl ) ); } } diff --git a/frame/3/herk/bli_herk_blk_var3f.c b/frame/3/herk/bli_herk_blk_var3f.c index cb54f717b..df5ec73be 100644 --- a/frame/3/herk/bli_herk_blk_var3f.c +++ b/frame/3/herk/bli_herk_blk_var3f.c @@ -143,11 +143,11 @@ void bli_herk_blk_var3f( obj_t* a, // If any packing buffers were acquired within packm, release them back // to the memory manager. if( thread_am_ochief( thread ) ) { - bli_obj_release_pack( c_pack ); + bli_packm_release( c_pack, cntl_sub_packm_c( cntl ) ); } if( thread_am_ichief( thread ) ) { - bli_obj_release_pack( a1_pack ); - bli_obj_release_pack( ah1_pack ); + bli_packm_release( a1_pack, cntl_sub_packm_a( cntl ) ); + bli_packm_release( ah1_pack, cntl_sub_packm_b( cntl ) ); } } diff --git a/frame/3/trmm/bli_trmm_blk_var1f.c b/frame/3/trmm/bli_trmm_blk_var1f.c index 906d5f875..8a0e18929 100644 --- a/frame/3/trmm/bli_trmm_blk_var1f.c +++ b/frame/3/trmm/bli_trmm_blk_var1f.c @@ -150,10 +150,10 @@ void bli_trmm_blk_var1f( obj_t* a, // to the memory manager. thread_obarrier( thread ); if( thread_am_ochief( thread ) ) - bli_obj_release_pack( b_pack ); + bli_packm_release( b_pack, cntl_sub_packm_b( cntl ) ); if( thread_am_ichief( thread ) ){ - bli_obj_release_pack( a1_pack ); - bli_obj_release_pack( c1_pack ); + bli_packm_release( a1_pack, cntl_sub_packm_a( cntl ) ); + bli_packm_release( c1_pack, cntl_sub_packm_c( cntl ) ); } } diff --git a/frame/3/trmm/bli_trmm_blk_var2b.c b/frame/3/trmm/bli_trmm_blk_var2b.c index e7f92ec87..e64e301a8 100644 --- a/frame/3/trmm/bli_trmm_blk_var2b.c +++ b/frame/3/trmm/bli_trmm_blk_var2b.c @@ -138,10 +138,10 @@ void bli_trmm_blk_var2b( obj_t* a, // to the memory manager. thread_obarrier( thread ); if( thread_am_ochief( thread ) ) - bli_obj_release_pack( a_pack ); + bli_packm_release( a_pack, cntl_sub_packm_a( cntl ) ); if( thread_am_ichief( thread ) ) { - bli_obj_release_pack( b1_pack ); - bli_obj_release_pack( c1_pack ); + bli_packm_release( b1_pack, cntl_sub_packm_b( cntl ) ); + bli_packm_release( c1_pack, cntl_sub_packm_c( cntl ) ); } } diff --git a/frame/3/trmm/bli_trmm_blk_var2f.c b/frame/3/trmm/bli_trmm_blk_var2f.c index 6af42b061..fd493a534 100644 --- a/frame/3/trmm/bli_trmm_blk_var2f.c +++ b/frame/3/trmm/bli_trmm_blk_var2f.c @@ -138,10 +138,10 @@ void bli_trmm_blk_var2f( obj_t* a, // to the memory manager. thread_obarrier( thread ); if( thread_am_ochief( thread ) ) - bli_obj_release_pack( a_pack ); + bli_packm_release( a_pack, cntl_sub_packm_a( cntl ) ); if( thread_am_ichief( thread ) ) { - bli_obj_release_pack( b1_pack ); - bli_obj_release_pack( c1_pack ); + bli_packm_release( b1_pack, cntl_sub_packm_b( cntl ) ); + bli_packm_release( c1_pack, cntl_sub_packm_c( cntl ) ); } } diff --git a/frame/3/trmm/bli_trmm_blk_var3b.c b/frame/3/trmm/bli_trmm_blk_var3b.c index fc355deed..a9428edb6 100644 --- a/frame/3/trmm/bli_trmm_blk_var3b.c +++ b/frame/3/trmm/bli_trmm_blk_var3b.c @@ -137,11 +137,11 @@ void bli_trmm_blk_var3b( obj_t* a, // If any packing buffers were acquired within packm, release them back // to the memory manager. if( thread_am_ochief( thread ) ){ - bli_obj_release_pack( c_pack ); + bli_packm_release( c_pack, cntl_sub_packm_c( cntl ) ); } if( thread_am_ichief( thread ) ){ - bli_obj_release_pack( a1_pack ); - bli_obj_release_pack( b1_pack ); + bli_packm_release( a1_pack, cntl_sub_packm_a( cntl ) ); + bli_packm_release( b1_pack, cntl_sub_packm_b( cntl ) ); } } diff --git a/frame/3/trmm/bli_trmm_blk_var3f.c b/frame/3/trmm/bli_trmm_blk_var3f.c index 8e385e74d..cca0318f0 100644 --- a/frame/3/trmm/bli_trmm_blk_var3f.c +++ b/frame/3/trmm/bli_trmm_blk_var3f.c @@ -137,11 +137,11 @@ void bli_trmm_blk_var3f( obj_t* a, // If any packing buffers were acquired within packm, release them back // to the memory manager. if( thread_am_ochief( thread ) ){ - bli_obj_release_pack( c_pack ); + bli_packm_release( c_pack, cntl_sub_packm_c( cntl ) ); } if( thread_am_ichief( thread ) ){ - bli_obj_release_pack( a1_pack ); - bli_obj_release_pack( b1_pack ); + bli_packm_release( a1_pack, cntl_sub_packm_a( cntl ) ); + bli_packm_release( b1_pack, cntl_sub_packm_b( cntl ) ); } } diff --git a/frame/3/trsm/bli_trsm_blk_var1b.c b/frame/3/trsm/bli_trsm_blk_var1b.c index 9b69d86bd..adca959d1 100644 --- a/frame/3/trsm/bli_trsm_blk_var1b.c +++ b/frame/3/trsm/bli_trsm_blk_var1b.c @@ -128,8 +128,8 @@ void bli_trsm_blk_var1b( obj_t* a, // to the memory manager. thread_obarrier( thread ); if( thread_am_ochief( thread ) ) - bli_obj_release_pack( b_pack ); + bli_packm_release( b_pack, cntl_sub_packm_b( cntl ) ); if( thread_am_ichief( thread ) ) - bli_obj_release_pack( a1_pack ); + bli_packm_release( a1_pack, cntl_sub_packm_a( cntl ) ); } diff --git a/frame/3/trsm/bli_trsm_blk_var1f.c b/frame/3/trsm/bli_trsm_blk_var1f.c index f697011ff..2571cf176 100644 --- a/frame/3/trsm/bli_trsm_blk_var1f.c +++ b/frame/3/trsm/bli_trsm_blk_var1f.c @@ -127,8 +127,8 @@ void bli_trsm_blk_var1f( obj_t* a, // to the memory manager. thread_obarrier( thread ); if( thread_am_ochief( thread ) ) - bli_obj_release_pack( b_pack ); + bli_packm_release( b_pack, cntl_sub_packm_b( cntl ) ); if( thread_am_ichief( thread ) ) - bli_obj_release_pack( a1_pack ); + bli_packm_release( a1_pack, cntl_sub_packm_a( cntl ) ); } diff --git a/frame/3/trsm/bli_trsm_blk_var2b.c b/frame/3/trsm/bli_trsm_blk_var2b.c index 6802a625d..2e8af4688 100644 --- a/frame/3/trsm/bli_trsm_blk_var2b.c +++ b/frame/3/trsm/bli_trsm_blk_var2b.c @@ -140,10 +140,10 @@ void bli_trsm_blk_var2b( obj_t* a, // to the memory manager. thread_obarrier( thread ); if( thread_am_ochief( thread ) ) - bli_obj_release_pack( a_pack ); + bli_packm_release( a_pack, cntl_sub_packm_a( cntl ) ); if( thread_am_ichief( thread ) ) { - bli_obj_release_pack( b1_pack ); - bli_obj_release_pack( c1_pack ); + bli_packm_release( b1_pack, cntl_sub_packm_b( cntl ) ); + bli_packm_release( c1_pack, cntl_sub_packm_c( cntl ) ); } } diff --git a/frame/3/trsm/bli_trsm_blk_var2f.c b/frame/3/trsm/bli_trsm_blk_var2f.c index 25eedd431..92407c09c 100644 --- a/frame/3/trsm/bli_trsm_blk_var2f.c +++ b/frame/3/trsm/bli_trsm_blk_var2f.c @@ -140,10 +140,10 @@ void bli_trsm_blk_var2f( obj_t* a, // to the memory manager. thread_obarrier( thread ); if( thread_am_ochief( thread ) ) - bli_obj_release_pack( a_pack ); + bli_packm_release( a_pack, cntl_sub_packm_a( cntl ) ); if( thread_am_ichief( thread ) ) { - bli_obj_release_pack( b1_pack ); - bli_obj_release_pack( c1_pack ); + bli_packm_release( b1_pack, cntl_sub_packm_b( cntl ) ); + bli_packm_release( c1_pack, cntl_sub_packm_c( cntl ) ); } } diff --git a/frame/3/trsm/bli_trsm_blk_var3b.c b/frame/3/trsm/bli_trsm_blk_var3b.c index db4a36135..bb4c2eece 100644 --- a/frame/3/trsm/bli_trsm_blk_var3b.c +++ b/frame/3/trsm/bli_trsm_blk_var3b.c @@ -147,11 +147,11 @@ void bli_trsm_blk_var3b( obj_t* a, // If any packing buffers were acquired within packm, release them back // to the memory manager. if( thread_am_ochief( thread ) ) { - bli_obj_release_pack( c_pack ); + bli_packm_release( c_pack, cntl_sub_packm_c( cntl ) ); } if( thread_am_ichief( thread ) ) { - bli_obj_release_pack( a1_pack ); - bli_obj_release_pack( b1_pack ); + bli_packm_release( a1_pack, cntl_sub_packm_a( cntl ) ); + bli_packm_release( b1_pack, cntl_sub_packm_b( cntl ) ); } } diff --git a/frame/3/trsm/bli_trsm_blk_var3f.c b/frame/3/trsm/bli_trsm_blk_var3f.c index baf7f3502..e6c43387b 100644 --- a/frame/3/trsm/bli_trsm_blk_var3f.c +++ b/frame/3/trsm/bli_trsm_blk_var3f.c @@ -147,11 +147,11 @@ void bli_trsm_blk_var3f( obj_t* a, // If any packing buffers were acquired within packm, release them back // to the memory manager. if( thread_am_ochief( thread ) ) { - bli_obj_release_pack( c_pack ); + bli_packm_release( c_pack, cntl_sub_packm_c( cntl ) ); } if( thread_am_ichief( thread ) ) { - bli_obj_release_pack( a1_pack ); - bli_obj_release_pack( b1_pack ); + bli_packm_release( a1_pack, cntl_sub_packm_a( cntl ) ); + bli_packm_release( b1_pack, cntl_sub_packm_b( cntl ) ); } } diff --git a/frame/include/bli_obj_macro_defs.h b/frame/include/bli_obj_macro_defs.h index cee5314e2..e635577ce 100644 --- a/frame/include/bli_obj_macro_defs.h +++ b/frame/include/bli_obj_macro_defs.h @@ -946,6 +946,7 @@ bli_obj_width_stored( obj ) #define bli_obj_release_pack( obj_p ) \ { \ mem_t* pack_mem = bli_obj_pack_mem( *(obj_p) ); \ +\ if ( bli_mem_is_alloc( pack_mem ) ) \ bli_mem_release( pack_mem ); \ }