From 0ec3581940dff82718401f7e1b37513d21f71d5d Mon Sep 17 00:00:00 2001 From: mangala v Date: Fri, 23 Feb 2024 07:33:02 +0530 Subject: [PATCH] Gtestsuite: Memory testing of ZGEMM micro kernels - Testing out of bound read and write of input and output matrix for SUP and Native micro kernels - Protected buffers and memory testing feature available in gtestuite is used to validate memory error AMD_Internal: [CPUPL-4623] Change-Id: I620fd3cd4eed1002e08b6233effb89b47beb073f --- .../testsuite/ukr/gemm/test_zgemm_ukr.h | 452 +++++++ .../testsuite/ukr/gemm/zgemm_ukernel.cpp | 1190 ++++++++++------- 2 files changed, 1122 insertions(+), 520 deletions(-) create mode 100644 gtestsuite/testsuite/ukr/gemm/test_zgemm_ukr.h diff --git a/gtestsuite/testsuite/ukr/gemm/test_zgemm_ukr.h b/gtestsuite/testsuite/ukr/gemm/test_zgemm_ukr.h new file mode 100644 index 000000000..7515ee069 --- /dev/null +++ b/gtestsuite/testsuite/ukr/gemm/test_zgemm_ukr.h @@ -0,0 +1,452 @@ +/* + + BLIS + An object-based framework for developing high-performance BLAS-like + libraries. + + Copyright (C) 2024, Advanced Micro Devices, Inc. All rights reserved. + + 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(s) of the copyright holder(s) 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. + +*/ + +#pragma once +#include +#include +#include "level3/ref_gemm.h" +#include "inc/check_error.h" +#include "blis.h" +#include "common/testing_helpers.h" + +/**********************************************************************/ +/************ Code path when memory test is disabled **************/ +/* 1. Compute Leading dimension of all matrix based on */ +/* storage, size and trans parameters */ +/* 2. Compute size of matrices for which memory needs to be allocated */ +/* 3. Allocate memory for all matrices */ +/* 4. Initialise matrices with random numbers */ +/* 5. Copy blis output matrix content to reference output matrix */ +/* 6. Call blis micro kernel with output matrix */ +/* 7. Call reference kernel with reference output matrix */ +/* 8. Compute difference of blis and reference output */ +/* based on threshold set */ +/**********************************************************************/ +/************ Code path when memory test is enabled **************/ +/* 1. Compute Leading dimension of all matrix based on */ +/* storage, size and trans parameters */ +/* 2. Compute size of matrices for which memory needs to be allocated */ +/* 3. Allocate 2 set of memories for A, B, C matrix */ +/* green_zone1: Memory near red_zone1 */ +/* green_zone2: Memory near red_zone2 */ +/* 2 set of memory is required to check memory leaks */ +/* before starting of buffer or after end of buffer */ +/* 4. Initialise matrices with random numbers */ +/* 5. Call blis micro kernel with output matrix with green_zone1 ptr */ +/* 6. Call blis micro kernel again with green_zone2 ptr */ +/* 7. Failure is reported if there is out of bound read/write error */ +/* 8. Call reference kernel with reference output matrix to */ +/* check for any accuracy failures */ +/* 9. Compute difference of blis and reference output */ +/* based on threshold set */ +/**********************************************************************/ + +template +static void test_zgemmsup_ukr( char storage, char trnsa, char trnsb, gtint_t m, gtint_t n, gtint_t k, T alpha, T beta, double thresh, FT ukr_fp, bool is_memory_test = false ) +{ + // Compute the leading dimensions of a, b, and c. + gtint_t lda = testinghelpers::get_leading_dimension( storage, trnsa, m, k, 0 ); + gtint_t ldb = testinghelpers::get_leading_dimension( storage, trnsb, k, n, 0 ); + gtint_t ldc = testinghelpers::get_leading_dimension( storage, 'n', m, n, 0 ); + + //---------------------------------------------------------- + // Compute size of Matrix: A, B, C + //---------------------------------------------------------- + gtint_t sizea = testinghelpers::matsize( storage, trnsa, m, k, lda ) * sizeof(T); + gtint_t sizeb = testinghelpers::matsize( storage, trnsb, k, n, ldb ) * sizeof(T); + gtint_t sizec = testinghelpers::matsize( storage, 'n', m, n, ldc ) * sizeof(T); + + // Allocate memory for Matrix: A, B, C, CRef + testinghelpers::ProtectedBuffer buf_a_ptrs( sizea, false, is_memory_test ); + testinghelpers::ProtectedBuffer buf_b_ptrs( sizeb, false , is_memory_test ); + testinghelpers::ProtectedBuffer buf_c_ptrs( sizec, false , is_memory_test ); + + /* No need to check for memory errors for reference code path, */ + /* hence is_memory_test is set to false */ + testinghelpers::ProtectedBuffer buf_cref_ptrs( sizec, false , false ); + + /* GreenZone-1 and GreenZone-2 might overlap hence we need */ + /* additional buffer to copy contents of GreenZone-1 before */ + /* copying it to GreenZone-2 */ + testinghelpers::ProtectedBuffer buf_aref_ptrs( sizea, false , false ); + testinghelpers::ProtectedBuffer buf_bref_ptrs( sizeb, false , false ); + + + T* buf_a = (T*)buf_a_ptrs.greenzone_1; + T* buf_b = (T*)buf_b_ptrs.greenzone_1; + T* buf_c = (T*)buf_c_ptrs.greenzone_1; + T* buf_cref = (T*)buf_cref_ptrs.greenzone_1; + T* buf_aref = (T*)buf_aref_ptrs.greenzone_1; + T* buf_bref = (T*)buf_bref_ptrs.greenzone_1; + + // Check if the memory has been successfully allocated + if ((buf_a == NULL) || (buf_b == NULL) ||(buf_c == NULL) || (buf_cref == NULL) + || (buf_aref == NULL) || (buf_bref == NULL) ) { + printf("Memory not allocated for input or output Matrix.\n"); + return ; + } + + testinghelpers::datagenerators::randomgenerators( -2, 8, storage, m, k, (T*)(buf_a), trnsa, lda); + testinghelpers::datagenerators::randomgenerators( -5, 2, storage, k, n, (T*)(buf_b), trnsb, ldb); + testinghelpers::datagenerators::randomgenerators( -3, 5, storage, m, n, (T*)(buf_c), 'n', ldc); + + // Create a copy of c so that we can check reference results. + memcpy(buf_cref, buf_c, sizec); + + memcpy(buf_aref, buf_a, sizea); + memcpy(buf_bref, buf_b, sizeb); + + gtint_t rs_a = 1, cs_a = 1, rs_b = 1, cs_b = 1, rs_c = 1, cs_c = 1; + gtint_t rs_a0 = 1, cs_a0 = 1, rs_b0 = 1, cs_b0 = 1; + + if(storage == 'r') + { + rs_a = lda; + rs_b = ldb; + rs_c = ldc; + + cs_a = 1; + cs_b = 1; + cs_c = 1; + + rs_a0 = lda; + rs_b0 = ldb; + + cs_a0 = 1; + cs_b0 = 1; + } + else + { + cs_a = lda; + cs_b = ldb; + cs_c = ldc; + + rs_a = 1; + rs_b = 1; + rs_c = 1; + + cs_a0 = lda; + cs_b0 = ldb; + + rs_a0 = 1; + rs_b0 = 1; + } + + if(trnsb == 't' || trnsb == 'T') + { + rs_b = cs_b0; + cs_b = rs_b0; + } + + if(trnsa == 't' || trnsa == 'T') + { + rs_a = cs_a0; + cs_a = rs_a0; + } + + // add signal handler for segmentation fault + testinghelpers::ProtectedBuffer::start_signal_handler(); + try + { + auxinfo_t data; + //Panel stride update is required only for zen4 sup kernels + inc_t ps_a_use = (12 * rs_a); //12 = MR + bli_auxinfo_set_ps_a( ps_a_use, &data ); + + ukr_fp( + BLIS_NO_CONJUGATE, + BLIS_NO_CONJUGATE, + m, + n, + k, + &alpha, + buf_a, rs_a, cs_a, + buf_b, rs_b, cs_b, + &beta, + buf_c, rs_c, cs_c, + &data, + NULL + ); + + if (is_memory_test) + { + // set pointers to second buffer + buf_a = (T*)buf_a_ptrs.greenzone_2; + buf_b = (T*)buf_b_ptrs.greenzone_2; + buf_c = (T*)buf_c_ptrs.greenzone_2; + + // Check if the memory has been successfully allocated + if ((buf_a == NULL) || (buf_b == NULL) || (buf_c == NULL)) { + printf("Memory not allocated for input or output Matrix for memory test.\n"); + return ; + } + + // copy data from 1st buffer of A and B to second buffer + memcpy(buf_a, buf_aref, sizea); + memcpy(buf_b, buf_bref, sizeb); + + //buf_c_ptrs.greenzone_1 has been updated with output from previous + // gemm call, hence use buf_cref + memcpy(buf_c, buf_cref, sizec); + + // second call to ukr + auxinfo_t data; + inc_t ps_a_use = (12 * rs_a); //12 = MR + bli_auxinfo_set_ps_a( ps_a_use, &data ); + + ukr_fp( + BLIS_NO_CONJUGATE, + BLIS_NO_CONJUGATE, + m, + n, + k, + &alpha, + buf_a, rs_a, cs_a, + buf_b, rs_b, cs_b, + &beta, + buf_c, rs_c, cs_c, + &data, + NULL + ); + } + } + catch(const std::exception& e) + { + // reset to default signal handler + testinghelpers::ProtectedBuffer::stop_signal_handler(); + + // show failure in case seg fault was detected + FAIL() << "Memory Test Failed"; + } + // reset to default signal handler + testinghelpers::ProtectedBuffer::stop_signal_handler(); + + // call reference implementation + testinghelpers::ref_gemm( storage, trnsa, trnsb, m, n, k, alpha, + buf_a, lda, buf_b, ldb, beta, buf_cref, ldc); + + // Check component-wise error + computediff( storage, m, n, buf_c, buf_cref, ldc, thresh ); + +} + +// The function is templatized based on the datatype and function-pointer type to the kernel. +template +static void test_gemmnat_ukr( char storage, gtint_t m, gtint_t n, gtint_t k, T alpha, T beta, double thresh, FT ukr_fp, bool is_memory_test = false ) +{ + // In case of memory test: + // Allocate packed buffer size for Matrix A, B native kernel works on packed buffer + // Native kernel has preload or prebroadcase design + // If we allocate size required by dimension then memtest fails + obj_t a, b; + obj_t ap, bp; // for packed buffers + cntx_t* cntx; + num_t dt = BLIS_DCOMPLEX; + cntx = bli_gks_query_cntx(); + bli_obj_create(dt, m, k, 1, m, &a); + bli_obj_create(dt, k, n, n, 1, &b); + + bli_obj_create(dt, m, k, 1, m, &ap); + bli_obj_create(dt, k, n, n, 1, &bp); + + gtint_t sizea = bli_packm_init_pack( BLIS_NO_INVERT_DIAG, BLIS_GEMM, BLIS_PACKED_ROW_PANELS, + BLIS_PACK_FWD_IF_UPPER, BLIS_PACK_FWD_IF_LOWER, + BLIS_MR, BLIS_KR, &a, &ap, cntx) * sizeof(T); + gtint_t sizeb = bli_packm_init_pack( BLIS_NO_INVERT_DIAG, BLIS_GEMM, BLIS_PACKED_COL_PANELS, + BLIS_PACK_FWD_IF_UPPER, BLIS_PACK_FWD_IF_LOWER, + BLIS_KR, BLIS_NR, &b, &bp, cntx ) * sizeof(T); + + // Create test operands + // matrix A will be in col-storage + // matrix B will be in row-storage + // column * row = matrix -- rank-k update + + // Set matrix A dimensions + gtint_t rs = 1; + gtint_t cs = m; + gtint_t lda = cs; + //gtint_t sizea = m * k * sizeof(T); + + // Set matrix B dimensions + rs = n; + cs = 1; + gtint_t ldb = rs; + //gtint_t sizeb = k * n * sizeof(T); + + // Set matrix C dimensions + gtint_t ldc = m; + if(storage == 'r' || storage == 'R') + { + rs = n; + cs = 1; + ldc = rs; + } + else + { + rs = 1; + cs = m; + ldc = cs; + } + gtint_t sizec = m * n * sizeof(T); + + // Allocating aligned memory for A and B matrix as Native microkernel issues + // VMOVAPD which expects memory to be accessed to be aligned. + // Matrix C need not be aligned + testinghelpers::ProtectedBuffer buf_a_ptrs( sizea, true, is_memory_test ); + testinghelpers::ProtectedBuffer buf_b_ptrs( sizeb, true, is_memory_test ); + testinghelpers::ProtectedBuffer buf_c_ptrs( sizec, false, is_memory_test ); + + // Allocate memory for C Matrix used for reference computation + testinghelpers::ProtectedBuffer buf_c_ref_ptrs( sizec, false , false ); + + /* GreenZone-1 and GreenZone-2 might overlap hence we need */ + /* additional buffer to copy contents of GreenZone-1 before */ + /* copying it to GreenZone-2 */ + testinghelpers::ProtectedBuffer buf_a_ref_ptrs( sizea, false , false ); + testinghelpers::ProtectedBuffer buf_b_ref_ptrs( sizeb, false , false ); + + T* buf_a = (T*)buf_a_ptrs.greenzone_1; + T* buf_b = (T*)buf_b_ptrs.greenzone_1; + T* buf_c = (T*)buf_c_ptrs.greenzone_1; + T* buf_cref = (T*)buf_c_ref_ptrs.greenzone_1; + T* buf_aref = (T*)buf_a_ref_ptrs.greenzone_1; + T* buf_bref = (T*)buf_b_ref_ptrs.greenzone_1; + + // Check if the memory has been successfully allocated + if (( buf_a == NULL ) || ( buf_b == NULL ) || ( buf_c == NULL ) || + ( buf_cref == NULL ) || ( buf_aref == NULL ) || ( buf_bref == NULL )) { + printf("Matrix: Memory not allocated.\n"); + return ; + } + + /* Initialize Matrices with random numbers */ + testinghelpers::datagenerators::randomgenerators( -2, 8, 'c', m, k, (T*)(buf_a), 'n', lda); + testinghelpers::datagenerators::randomgenerators( -5, 2, 'r', k, n, (T*)(buf_b), 'n', ldb); + testinghelpers::datagenerators::randomgenerators( -5, 2, storage , m, n, (T*)(buf_c), 'n', ldc); + + // Create a copy of c so that we can check reference results. + memcpy(buf_cref, buf_c, sizec); + + memcpy(buf_aref, buf_a, sizea); + memcpy(buf_bref, buf_b, sizeb); + + /* Fill the auxinfo_t struct in case the micro-kernel uses it. */ + auxinfo_t data; + bli_auxinfo_set_ps_a(0, &data); + + // add signal handler for segmentation fault + testinghelpers::ProtectedBuffer::start_signal_handler(); + try + { + // call micro-kernel + ukr_fp ( + k, + &alpha, + buf_a, + buf_b, + &beta, + buf_c, + rs, + cs, + &data, + NULL + ); + if(is_memory_test) + { + // set pointers to second buffer + buf_a = (T*)buf_a_ptrs.greenzone_2; + buf_b = (T*)buf_b_ptrs.greenzone_2; + buf_c = (T*)buf_c_ptrs.greenzone_2; + + // copy data from 1st buffer of A and B to second buffer + memcpy(buf_a, buf_aref, sizea); + memcpy(buf_b, buf_bref, sizeb); + + //buf_c_ptrs.greenzone_1 has been updated with output from previous + // gemm call, hence use buf_cref + memcpy(buf_c, buf_cref, sizec); + + ukr_fp ( + k, + &alpha, + buf_a, + buf_b, + &beta, + buf_c, + rs, + cs, + &data, + NULL + ); + } + } + catch(const std::exception& e) + { + // reset to default signal handler + testinghelpers::ProtectedBuffer::stop_signal_handler(); + + // show failure in case seg fault was detected + FAIL() << "Memory Test Failed"; + } + // reset to default signal handler + testinghelpers::ProtectedBuffer::stop_signal_handler(); + + // In native micro-kernel + // op(A) = No transpose & op(B) = transpose + // for column-storage + char transa = 'n'; + char transb = 't'; + + // The objective here is to make storage of all matrices same + // To do this we set transpose of A and B appropriatley. + if (storage == 'r' || storage == 'R') + { + // if row-storage + transa = 't'; + transb = 'n'; + // because matrix A is created with col-storage + // and matrix B is created with row-storage + // Generally storage parameter in cblas signifies + // storage of all matrices A, B and C. + // since A is col-storage, A' will be row-storage + } + + // call reference implementation + testinghelpers::ref_gemm( storage, transa, transb, m, n, k, alpha, + buf_a, lda, buf_b, ldb, beta, (T*)buf_cref, ldc); + + // Check component-wise error + computediff( storage, m, n, (T*)buf_c, (T*)buf_cref, ldc, thresh ); + +} \ No newline at end of file diff --git a/gtestsuite/testsuite/ukr/gemm/zgemm_ukernel.cpp b/gtestsuite/testsuite/ukr/gemm/zgemm_ukernel.cpp index bf1d7e605..4023f07e0 100644 --- a/gtestsuite/testsuite/ukr/gemm/zgemm_ukernel.cpp +++ b/gtestsuite/testsuite/ukr/gemm/zgemm_ukernel.cpp @@ -1,4 +1,3 @@ - /* BLIS An object-based framework for developing high-performance BLAS-like @@ -30,52 +29,70 @@ #include #include "blis.h" #include "common/testing_helpers.h" -#include "test_gemm_ukr.h" +#include "test_zgemm_ukr.h" /*******************************************************/ /* SUP Kernel testing */ /*******************************************************/ -class ZGEMMUkrSUPTest : - public ::testing::TestWithParam> {}; - // m, n, k, alpha, beta, storage of c, zgemm sup kernel, transa, transb +class zgemmUkrSUP: + public ::testing::TestWithParam> {}; -GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST(ZGEMMUkrSUPTest); -TEST_P(ZGEMMUkrSUPTest, sup_kernel) +GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST(zgemmUkrSUP); +TEST_P(zgemmUkrSUP, FunctionalTest) { using T = dcomplex; - gtint_t m = std::get<0>(GetParam()); // dimension m - gtint_t n = std::get<1>(GetParam()); // dimension n - gtint_t k = std::get<2>(GetParam()); // dimension k - T alpha = std::get<3>(GetParam()); // alpha - T beta = std::get<4>(GetParam()); // beta - char storageC = std::get<5>(GetParam()); // storage scheme for C matrix - zgemmsup_ker_ft kern_ptr = std::get<6>(GetParam()); //pointer to the gemm kernel - char transa = std::get<7>(GetParam()); - char transb = std::get<8>(GetParam()); - test_zgemmsup_ukr(storageC, transa, transb, m, n, k, alpha, beta, kern_ptr); + gtint_t m = std::get<0>(GetParam()); // dimension m + gtint_t n = std::get<1>(GetParam()); // dimension n + gtint_t k = std::get<2>(GetParam()); // dimension k + T alpha = std::get<3>(GetParam()); // alpha + T beta = std::get<4>(GetParam()); // beta + char storageC = std::get<5>(GetParam()); // storage scheme for C matrix + zgemmsup_ker_ft kern_ptr = std::get<6>(GetParam()); // pointer to the gemm kernel + char transa = std::get<7>(GetParam()); // transa + char transb = std::get<8>(GetParam()); // transb + bool is_memory_test = std::get<9>(GetParam()); // is_memory_test + double thresh = 30 * (std::max(k,10)) * testinghelpers::getEpsilon(); // Set the threshold for the errors + test_zgemmsup_ukr(storageC, transa, transb, m, n, k, alpha, beta, thresh, kern_ptr, is_memory_test); }// end of function -class ZGEMMukrsupTestPrint { +class zgemmUkrSUPPrint { public: std::string operator()( - testing::TestParamInfo> str) const { - gtint_t m = std::get<0>(str.param); - gtint_t n = std::get<1>(str.param); - gtint_t k = std::get<2>(str.param); - dcomplex alpha = std::get<3>(str.param); - dcomplex beta = std::get<4>(str.param); - char storageC = std::get<5>(str.param); - char trnsa = std::get<7>(str.param); - char trnsb = std::get<8>(str.param); - std::string str_name = "zgemmsup_ukr"; - str_name = str_name + "_" + trnsa; - str_name = str_name + "_" + trnsb; - str_name = str_name + "_" + std::to_string(m); - str_name = str_name + "_" + std::to_string(n); - str_name = str_name + "_" + std::to_string(k); - str_name = str_name + "_a" + testinghelpers::get_value_string(alpha); - str_name = str_name + "_b" + testinghelpers::get_value_string(beta); - str_name = str_name + "_" + storageC; + testing::TestParamInfo> str) const { + gtint_t m = std::get<0>(str.param); + gtint_t n = std::get<1>(str.param); + gtint_t k = std::get<2>(str.param); + dcomplex alpha = std::get<3>(str.param); + dcomplex beta = std::get<4>(str.param); + char storageC = std::get<5>(str.param); + char trnsa = std::get<7>(str.param); + char trnsb = std::get<8>(str.param); + bool is_memory_test = std::get<9>(str.param); + std::string str_name ; + str_name = str_name + "StorageOfCMatrix_" + storageC; + str_name = str_name + "_transA_" + trnsa; + str_name = str_name + "_transB_" + trnsb; + str_name = str_name + "_m_" + std::to_string(m); + str_name = str_name + "_n_" + std::to_string(n); + str_name = str_name + "_k_" + std::to_string(k); + std::string alpha_str = (alpha.real < 0) ? ("m" + std::to_string(int(std::abs(alpha.real)))) : std::to_string(int(alpha.real)); + alpha_str = alpha_str + ((alpha.imag < 0) ? ("m" + std::to_string(int(std::abs(alpha.imag)))) : "i" + std::to_string(int(alpha.imag))); + std::string beta_str = (beta.real < 0) ? ("m" + std::to_string(int(std::abs(beta.real)))) : std::to_string(int(beta.real)); + beta_str = beta_str + ((beta.imag < 0) ? ("m" + std::to_string(int(std::abs(beta.imag)))) : "i" + std::to_string(int(beta.imag))); + str_name = str_name + "_alpha_" + alpha_str; + str_name = str_name + "_beta_" + beta_str; + str_name = str_name + (is_memory_test ? "_mem_test_enabled" : "_mem_test_disabled"); return str_name; } }; @@ -83,859 +100,920 @@ public: #if defined(BLIS_KERNELS_ZEN) && defined(GTEST_AVX2FMA3) INSTANTIATE_TEST_SUITE_P ( bli_zgemmsup_rv_zen_asm_3x4m_row_stored_c, - ZGEMMUkrSUPTest, + zgemmUkrSUP, ::testing::Combine( - ::testing::Range(gtint_t(1), gtint_t(10), 1), // values of m - ::testing::Range(gtint_t(1), gtint_t(5), 1), // values of n - ::testing::Range(gtint_t(0), gtint_t(15), 1), // values of k + ::testing::Range(gtint_t(1), gtint_t(10), 1), // values of m + ::testing::Range(gtint_t(1), gtint_t(5), 1), // values of n + ::testing::Range(gtint_t(0), gtint_t(15), 1), // values of k //alpha values dcomplex{0.0, 0.0} failure observed - ::testing::Values(dcomplex{1.0, 0.0}, dcomplex{-1.0, 0.0}, dcomplex{4.0, 0.0}, dcomplex{0.0, -5.0}, dcomplex{3.5, 4.5}), // alpha value + ::testing::Values(dcomplex{1.0, 0.0}, dcomplex{-1.0, 0.0}, dcomplex{4.0, 0.0}, dcomplex{0.0, -5.0}, dcomplex{3, 4.5}), // alpha value ::testing::Values(dcomplex{0.0, 0.0}, dcomplex{1.0, 0.0}, dcomplex{-1.0, 0.0}, dcomplex{-5.0, 0.0}, dcomplex{0.0, -5.0}, dcomplex{-7.3, 6.7}), // beta value - ::testing::Values('r'), // storage of c - ::testing::Values(bli_zgemmsup_rv_zen_asm_3x4m), // zgemm_sup kernel - ::testing::Values('t'), // transa - ::testing::Values('n') // transb + ::testing::Values('r'), // storage of c + ::testing::Values(bli_zgemmsup_rv_zen_asm_3x4m), // zgemm_sup kernel + ::testing::Values('t'), // transa + ::testing::Values('n'), // transb + ::testing::Values(false, true) // is_memory_test ), - ::ZGEMMukrsupTestPrint() + ::zgemmUkrSUPPrint() ); INSTANTIATE_TEST_SUITE_P ( bli_zgemmsup_rv_zen_asm_2x4_row_stored_c, - ZGEMMUkrSUPTest, + zgemmUkrSUP, ::testing::Combine( - ::testing::Values(gtint_t(2)), // values of m - ::testing::Values(gtint_t(4)), // values of n - ::testing::Range(gtint_t(0), gtint_t(19), 1), // values of k + ::testing::Values(gtint_t(2)), // values of m + ::testing::Values(gtint_t(4)), // values of n + ::testing::Range(gtint_t(0), gtint_t(19), 1), // values of k ::testing::Values(dcomplex{0.0, 0.0}, dcomplex{1.0, 0.0}, dcomplex{-1.0, 0.0}, dcomplex{4.0, 0.0}, dcomplex{0.0, 5.0}, dcomplex{3.5, 4.5}), // alpha value ::testing::Values(dcomplex{0.0, 0.0}, dcomplex{1.0, 0.0}, dcomplex{-1.0, 0.0}, dcomplex{-5.0, 0.0}, dcomplex{0.0, 5.0}, dcomplex{-7.3, 6.7}), // beta value - ::testing::Values('r'), // storage of c - ::testing::Values(bli_zgemmsup_rv_zen_asm_2x4), // zgemm_sup kernel - ::testing::Values('t'), // transa - ::testing::Values('n') // transb + ::testing::Values('r'), // storage of c + ::testing::Values(bli_zgemmsup_rv_zen_asm_2x4), // zgemm_sup kernel + ::testing::Values('t'), // transa + ::testing::Values('n'), // transb + ::testing::Values(false, true) // is_memory_test ), - ::ZGEMMukrsupTestPrint() + ::zgemmUkrSUPPrint() ); INSTANTIATE_TEST_SUITE_P ( bli_zgemmsup_rv_zen_asm_1x4_row_stored_c, - ZGEMMUkrSUPTest, + zgemmUkrSUP, ::testing::Combine( - ::testing::Values(gtint_t(1)), // values of m - ::testing::Values(gtint_t(4)), // values of n - ::testing::Range(gtint_t(0), gtint_t(18), 1), // values of k + ::testing::Values(gtint_t(1)), // values of m + ::testing::Values(gtint_t(4)), // values of n + ::testing::Range(gtint_t(0), gtint_t(18), 1), // values of k ::testing::Values(dcomplex{0.0, 0.0}, dcomplex{1.0, 0.0}, dcomplex{-1.0, 0.0}, dcomplex{4.0, 0.0}, dcomplex{0.0, 5.5}, dcomplex{3.5, 4.5}), // alpha value ::testing::Values(dcomplex{0.0, 0.0}, dcomplex{1.0, 0.0}, dcomplex{-1.0, 0.0}, dcomplex{-5.0, 0.0}, dcomplex{0.0, 5.4}, dcomplex{-7.3, 6.7}), // beta value - ::testing::Values('r'), // storage of c - ::testing::Values(bli_zgemmsup_rv_zen_asm_1x4), // zgemm_sup kernel - ::testing::Values('t'), // transa - ::testing::Values('n') // transb + ::testing::Values('r'), // storage of c + ::testing::Values(bli_zgemmsup_rv_zen_asm_1x4), // zgemm_sup kernel + ::testing::Values('t'), // transa + ::testing::Values('n'), // transb + ::testing::Values(false, true) // is_memory_test ), - ::ZGEMMukrsupTestPrint() + ::zgemmUkrSUPPrint() ); INSTANTIATE_TEST_SUITE_P ( bli_zgemmsup_rv_zen_asm_3x2m_row_stored_c, - ZGEMMUkrSUPTest, + zgemmUkrSUP, ::testing::Combine( - ::testing::Range(gtint_t(1), gtint_t(20), 1), // values of m - ::testing::Values(gtint_t(2)), // values of n - ::testing::Range(gtint_t(0), gtint_t(13), 1), // values of k + ::testing::Range(gtint_t(1), gtint_t(20), 1), // values of m + ::testing::Values(gtint_t(2)), // values of n + ::testing::Range(gtint_t(0), gtint_t(13), 1), // values of k ::testing::Values(dcomplex{0.0, 0.0}, dcomplex{1.0, 0.0}, dcomplex{-1.0, 0.0}, dcomplex{4.0, 0.0}, dcomplex{0.0, 2}, dcomplex{3.5, 4.5}), // alpha value ::testing::Values(dcomplex{0.0, 0.0}, dcomplex{1.0, 0.0}, dcomplex{-1.0, 0.0}, dcomplex{-5.0, 0.0}, dcomplex{0.0, 9}, dcomplex{-7.3, 6.7}), // beta value - ::testing::Values('r'), // storage of c - ::testing::Values(bli_zgemmsup_rv_zen_asm_3x2m), // zgemm_sup kernel - ::testing::Values('t'), // transa - ::testing::Values('n') // transb + ::testing::Values('r'), // storage of c + ::testing::Values(bli_zgemmsup_rv_zen_asm_3x2m), // zgemm_sup kernel + ::testing::Values('t'), // transa + ::testing::Values('n'), // transb + ::testing::Values(false, true) // is_memory_test ), - ::ZGEMMukrsupTestPrint() + ::zgemmUkrSUPPrint() ); INSTANTIATE_TEST_SUITE_P ( bli_zgemmsup_rv_zen_asm_3x2_row_stored_c, - ZGEMMUkrSUPTest, + zgemmUkrSUP, ::testing::Combine( - ::testing::Values(gtint_t(3)), // values of m - ::testing::Values(gtint_t(2)), // values of n - ::testing::Range(gtint_t(0), gtint_t(5), 1), // values of k + ::testing::Values(gtint_t(3)), // values of m + ::testing::Values(gtint_t(2)), // values of n + ::testing::Range(gtint_t(0), gtint_t(5), 1), // values of k ::testing::Values(dcomplex{0.0, 0.0}, dcomplex{1.0, 0.0}, dcomplex{-1.0, 0.0}, dcomplex{4.0, 0.0}, dcomplex{0.0,15.0}, dcomplex{3.5, 4.5}), // alpha value ::testing::Values(dcomplex{0.0, 0.0}, dcomplex{1.0, 0.0}, dcomplex{-1.0, 0.0}, dcomplex{-5.0, 0.0}, dcomplex{0.0, 2.3}, dcomplex{-7.3, 6.7}), // beta value - ::testing::Values('r'), // storage of c - ::testing::Values(bli_zgemmsup_rv_zen_asm_3x2), // zgemm_sup kernel - ::testing::Values('t'), // transa - ::testing::Values('n') // transb + ::testing::Values('r'), // storage of c + ::testing::Values(bli_zgemmsup_rv_zen_asm_3x2), // zgemm_sup kernel + ::testing::Values('t'), // transa + ::testing::Values('n'), // transb + ::testing::Values(false, true) // is_memory_test ), - ::ZGEMMukrsupTestPrint() + ::zgemmUkrSUPPrint() ); INSTANTIATE_TEST_SUITE_P ( bli_zgemmsup_rv_zen_asm_2x2_row_stored_c, - ZGEMMUkrSUPTest, + zgemmUkrSUP, ::testing::Combine( - ::testing::Values(gtint_t(2)), // values of m - ::testing::Values(gtint_t(2)), // values of n - ::testing::Range(gtint_t(0), gtint_t(12), 1), // values of k + ::testing::Values(gtint_t(2)), // values of m + ::testing::Values(gtint_t(2)), // values of n + ::testing::Range(gtint_t(0), gtint_t(12), 1), // values of k ::testing::Values(dcomplex{0.0, 0.0}, dcomplex{1.0, 0.0}, dcomplex{-1.0, 0.0}, dcomplex{4.0, 0.0}, dcomplex{0.0, 12}, dcomplex{3.5, 4.5}), // alpha value ::testing::Values(dcomplex{0.0, 0.0}, dcomplex{1.0, 0.0}, dcomplex{-1.0, 0.0}, dcomplex{-5.0, 0.0}, dcomplex{0.0, 13}, dcomplex{-7.3, 6.7}), // beta value - ::testing::Values('r'), // storage of c - ::testing::Values(bli_zgemmsup_rv_zen_asm_2x2), // zgemm_sup kernel - ::testing::Values('t'), // transa - ::testing::Values('n') // transb + ::testing::Values('r'), // storage of c + ::testing::Values(bli_zgemmsup_rv_zen_asm_2x2), // zgemm_sup kernel + ::testing::Values('t'), // transa + ::testing::Values('n'), // transb + ::testing::Values(false, true) // is_memory_test ), - ::ZGEMMukrsupTestPrint() + ::zgemmUkrSUPPrint() ); INSTANTIATE_TEST_SUITE_P ( bli_zgemmsup_rv_zen_asm_1x2_row_stored_c, - ZGEMMUkrSUPTest, + zgemmUkrSUP, ::testing::Combine( - ::testing::Values(gtint_t(1)), // values of m - ::testing::Values(gtint_t(2)), // values of n - ::testing::Range(gtint_t(0), gtint_t(8), 1), // values of k + ::testing::Values(gtint_t(1)), // values of m + ::testing::Values(gtint_t(2)), // values of n + ::testing::Range(gtint_t(0), gtint_t(8), 1), // values of k ::testing::Values(dcomplex{0.0, 0.0}, dcomplex{1.0, 0.0}, dcomplex{-1.0, 0.0}, dcomplex{4.0, 0.0}, dcomplex{0.0, 6}, dcomplex{3.5, 4.5}), // alpha value ::testing::Values(dcomplex{0.0, 0.0}, dcomplex{1.0, 0.0}, dcomplex{-1.0, 0.0}, dcomplex{-5.0, 0.0}, dcomplex{0.0, 3}, dcomplex{-7.3, 6.7}), // beta value - ::testing::Values('r'), // storage of c - ::testing::Values(bli_zgemmsup_rv_zen_asm_1x2), // zgemm_sup kernel - ::testing::Values('t'), // transa - ::testing::Values('n') // transb + ::testing::Values('r'), // storage of c + ::testing::Values(bli_zgemmsup_rv_zen_asm_1x2), // zgemm_sup kernel + ::testing::Values('t'), // transa + ::testing::Values('n'), // transb + ::testing::Values(false, true) // is_memory_test ), - ::ZGEMMukrsupTestPrint() + ::zgemmUkrSUPPrint() ); INSTANTIATE_TEST_SUITE_P ( bli_zgemmsup_rv_zen_asm_3x4m_col_stored_c, - ZGEMMUkrSUPTest, + zgemmUkrSUP, ::testing::Combine( - ::testing::Range(gtint_t(1), gtint_t(14), 1), // values of m - ::testing::Range(gtint_t(1), gtint_t(5), 1), // values of n - ::testing::Range(gtint_t(0), gtint_t(22), 1), // values of k + ::testing::Range(gtint_t(1), gtint_t(14), 1), // values of m + ::testing::Range(gtint_t(1), gtint_t(5), 1), // values of n + ::testing::Range(gtint_t(0), gtint_t(22), 1), // values of k ::testing::Values(dcomplex{1.0, 0.0}, dcomplex{-1.0, 0.0}, dcomplex{4.0, 0.0}, dcomplex{0.0, -15.0}, dcomplex{3.5, 4.5}), // alpha value ::testing::Values(dcomplex{0.0, 0.0}, dcomplex{1.0, 0.0}, dcomplex{-1.0, 0.0}, dcomplex{-5.0, 0.0}, dcomplex{0.0, 1.9}, dcomplex{-7.3, 6.7}), // beta value - ::testing::Values('c'), // storage of c - ::testing::Values(bli_zgemmsup_rv_zen_asm_3x4m), // zgemm_sup kernel - ::testing::Values('n'), // transa - ::testing::Values('t') // transb + ::testing::Values('c'), // storage of c + ::testing::Values(bli_zgemmsup_rv_zen_asm_3x4m), // zgemm_sup kernel + ::testing::Values('n'), // transa + ::testing::Values('t'), // transb + ::testing::Values(false, true) // is_memory_test ), - ::ZGEMMukrsupTestPrint() + ::zgemmUkrSUPPrint() ); INSTANTIATE_TEST_SUITE_P ( bli_zgemmsup_rv_zen_asm_3x2m_col_stored_c, - ZGEMMUkrSUPTest, + zgemmUkrSUP, ::testing::Combine( - ::testing::Range(gtint_t(1), gtint_t(14), 1), // values of m - ::testing::Values(gtint_t(2)), // values of n - ::testing::Range(gtint_t(0), gtint_t(20), 1), // values of k + ::testing::Range(gtint_t(1), gtint_t(14), 1), // values of m + ::testing::Values(gtint_t(2)), // values of n + ::testing::Range(gtint_t(0), gtint_t(20), 1), // values of k ::testing::Values(dcomplex{0.0, 0.0}, dcomplex{1.0, 0.0}, dcomplex{-1.0, 0.0}, dcomplex{4.0, 0.0}, dcomplex{0.0, 1.9}, dcomplex{3.5, 4.5}), // alpha value ::testing::Values(dcomplex{0.0, 0.0}, dcomplex{1.0, 0.0}, dcomplex{-1.0, 0.0}, dcomplex{-5.0, 0.0}, dcomplex{0.0, 3.9}, dcomplex{-7.3, 6.7}), // beta value - ::testing::Values('c'), // storage of c - ::testing::Values(bli_zgemmsup_rv_zen_asm_3x2m), // zgemm_sup kernel - ::testing::Values('n'), // transa - ::testing::Values('t') // transb + ::testing::Values('c'), // storage of c + ::testing::Values(bli_zgemmsup_rv_zen_asm_3x2m), // zgemm_sup kernel + ::testing::Values('n'), // transa + ::testing::Values('t'), // transb + ::testing::Values(false, true) // is_memory_test ), - ::ZGEMMukrsupTestPrint() + ::zgemmUkrSUPPrint() ); INSTANTIATE_TEST_SUITE_P ( bli_zgemmsup_rv_zen_asm_3x2_col_stored_c, - ZGEMMUkrSUPTest, + zgemmUkrSUP, ::testing::Combine( - ::testing::Values(gtint_t(3)), // values of m - ::testing::Values(gtint_t(2)), // values of n - ::testing::Range(gtint_t(0), gtint_t(19), 1), // values of k + ::testing::Values(gtint_t(3)), // values of m + ::testing::Values(gtint_t(2)), // values of n + ::testing::Range(gtint_t(0), gtint_t(19), 1), // values of k ::testing::Values(dcomplex{0.0, 0.0}, dcomplex{1.0, 0.0}, dcomplex{-1.0, 0.0}, dcomplex{4.0, 0.0}, dcomplex{0.0, 2.3}, dcomplex{3.5, 4.5}), // alpha value ::testing::Values(dcomplex{0.0, 0.0}, dcomplex{1.0, 0.0}, dcomplex{-1.0, 0.0}, dcomplex{-5.0, 0.0}, dcomplex{0.0, 1.4}, dcomplex{-7.3, 6.7}), // beta value - ::testing::Values('c'), // storage of c - ::testing::Values(bli_zgemmsup_rv_zen_asm_3x2), // zgemm_sup kernel - ::testing::Values('n'), // transa - ::testing::Values('t') // transb + ::testing::Values('c'), // storage of c + ::testing::Values(bli_zgemmsup_rv_zen_asm_3x2), // zgemm_sup kernel + ::testing::Values('n'), // transa + ::testing::Values('t'), // transb + ::testing::Values(false, true) // is_memory_test ), - ::ZGEMMukrsupTestPrint() + ::zgemmUkrSUPPrint() ); INSTANTIATE_TEST_SUITE_P ( bli_zgemmsup_rv_zen_asm_2x4_col_stored_c, - ZGEMMUkrSUPTest, + zgemmUkrSUP, ::testing::Combine( - ::testing::Values(gtint_t(2)), // values of m - ::testing::Values(gtint_t(4)), // values of n - ::testing::Range(gtint_t(0), gtint_t(7), 1), // values of k + ::testing::Values(gtint_t(2)), // values of m + ::testing::Values(gtint_t(4)), // values of n + ::testing::Range(gtint_t(0), gtint_t(7), 1), // values of k ::testing::Values(dcomplex{0.0, 0.0}, dcomplex{1.0, 0.0}, dcomplex{-1.0, 0.0}, dcomplex{4.0, 0.0}, dcomplex{0.0, 19.9}, dcomplex{3.5, 4.5}), // alpha value ::testing::Values(dcomplex{0.0, 0.0}, dcomplex{1.0, 0.0}, dcomplex{-1.0, 0.0}, dcomplex{-5.0, 0.0}, dcomplex{0.0, 1.99}, dcomplex{-7.3, 6.7}), // beta value - ::testing::Values('c'), // storage of c - ::testing::Values(bli_zgemmsup_rv_zen_asm_2x4), // zgemm_sup kernel - ::testing::Values('n'), // transa - ::testing::Values('t') // transb + ::testing::Values('c'), // storage of c + ::testing::Values(bli_zgemmsup_rv_zen_asm_2x4), // zgemm_sup kernel + ::testing::Values('n'), // transa + ::testing::Values('t'), // transb + ::testing::Values(false, true) // is_memory_test ), - ::ZGEMMukrsupTestPrint() + ::zgemmUkrSUPPrint() ); INSTANTIATE_TEST_SUITE_P ( bli_zgemmsup_rv_zen_asm_1x4_col_stored_c, - ZGEMMUkrSUPTest, + zgemmUkrSUP, ::testing::Combine( - ::testing::Values(gtint_t(1)), // values of m - ::testing::Values(gtint_t(4)), // values of n - ::testing::Range(gtint_t(0), gtint_t(8), 1), // values of k + ::testing::Values(gtint_t(1)), // values of m + ::testing::Values(gtint_t(4)), // values of n + ::testing::Range(gtint_t(0), gtint_t(8), 1), // values of k ::testing::Values(dcomplex{0.0, 0.0}, dcomplex{1.0, 0.0}, dcomplex{-1.0, 0.0}, dcomplex{4.0, 0.0}, dcomplex{0.0, 1.9}, dcomplex{3.5, 4.5}), // alpha value ::testing::Values(dcomplex{0.0, 0.0}, dcomplex{1.0, 0.0}, dcomplex{-1.0, 0.0}, dcomplex{-5.0, 0.0},dcomplex{0.0, 1.9}, dcomplex{-7.3, 6.7}), // beta value - ::testing::Values('c'), // storage of c - ::testing::Values(bli_zgemmsup_rv_zen_asm_1x4), // zgemm_sup kernel - ::testing::Values('n'), // transa - ::testing::Values('t') // transb + ::testing::Values('c'), // storage of c + ::testing::Values(bli_zgemmsup_rv_zen_asm_1x4), // zgemm_sup kernel + ::testing::Values('n'), // transa + ::testing::Values('t'), // transb + ::testing::Values(false, true) // is_memory_test ), - ::ZGEMMukrsupTestPrint() + ::zgemmUkrSUPPrint() ); INSTANTIATE_TEST_SUITE_P ( bli_zgemmsup_rv_zen_asm_2x2_col_stored_c, - ZGEMMUkrSUPTest, + zgemmUkrSUP, ::testing::Combine( - ::testing::Values(gtint_t(2)), // values of m - ::testing::Values(gtint_t(2)), // values of n - ::testing::Range(gtint_t(0), gtint_t(17), 1), // values of k + ::testing::Values(gtint_t(2)), // values of m + ::testing::Values(gtint_t(2)), // values of n + ::testing::Range(gtint_t(0), gtint_t(17), 1), // values of k ::testing::Values(dcomplex{0.0, 0.0}, dcomplex{1.0, 0.0}, dcomplex{-1.0, 0.0}, dcomplex{4.0, 0.0}, dcomplex{0.0, -1.5}, dcomplex{3.5, 4.5}), // alpha value ::testing::Values(dcomplex{0.0, 0.0}, dcomplex{1.0, 0.0}, dcomplex{-1.0, 0.0}, dcomplex{-5.0, 0.0}, dcomplex{0.0, -1.3}, dcomplex{-7.3, 6.7}), // beta value - ::testing::Values('c'), // storage of c - ::testing::Values(bli_zgemmsup_rv_zen_asm_2x2), // zgemm_sup kernel - ::testing::Values('n'), // transa - ::testing::Values('t') // transb + ::testing::Values('c'), // storage of c + ::testing::Values(bli_zgemmsup_rv_zen_asm_2x2), // zgemm_sup kernel + ::testing::Values('n'), // transa + ::testing::Values('t'), // transb + ::testing::Values(false, true) // is_memory_test ), - ::ZGEMMukrsupTestPrint() + ::zgemmUkrSUPPrint() ); INSTANTIATE_TEST_SUITE_P ( bli_zgemmsup_rv_zen_asm_1x2_col_stored_c, - ZGEMMUkrSUPTest, + zgemmUkrSUP, ::testing::Combine( - ::testing::Values(gtint_t(1)), // values of m - ::testing::Values(gtint_t(2)), // values of n - ::testing::Range(gtint_t(0), gtint_t(8), 1), // values of k + ::testing::Values(gtint_t(1)), // values of m + ::testing::Values(gtint_t(2)), // values of n + ::testing::Range(gtint_t(0), gtint_t(8), 1), // values of k ::testing::Values(dcomplex{0.0, 0.0}, dcomplex{1.0, 0.0}, dcomplex{-1.0, 0.0}, dcomplex{4.0, 0.0}, dcomplex{0.0, 1.9}, dcomplex{3.5, 4.5}), // alpha value ::testing::Values(dcomplex{0.0, 0.0}, dcomplex{1.0, 0.0}, dcomplex{-1.0, 0.0}, dcomplex{-5.0, 0.0}, dcomplex{0.0, 2.3}, dcomplex{-7.3, 6.7}), // beta value - ::testing::Values('c'), // storage of c - ::testing::Values(bli_zgemmsup_rv_zen_asm_1x2), // zgemm_sup kernel - ::testing::Values('n'), // transa - ::testing::Values('t') // transb + ::testing::Values('c'), // storage of c + ::testing::Values(bli_zgemmsup_rv_zen_asm_1x2), // zgemm_sup kernel + ::testing::Values('n'), // transa + ::testing::Values('t'), // transb + ::testing::Values(false, true) // is_memory_test ), - ::ZGEMMukrsupTestPrint() + ::zgemmUkrSUPPrint() ); INSTANTIATE_TEST_SUITE_P ( bli_zgemmsup_rd_zen_asm_3x4m_row_stored_c, - ZGEMMUkrSUPTest, + zgemmUkrSUP, ::testing::Combine( - ::testing::Range(gtint_t(1), gtint_t(12), 1), // values of m - ::testing::Range(gtint_t(1), gtint_t(5), 1), // values of n - ::testing::Range(gtint_t(0), gtint_t(17), 1), // values of k + ::testing::Range(gtint_t(1), gtint_t(12), 1), // values of m + ::testing::Range(gtint_t(1), gtint_t(5), 1), // values of n + ::testing::Range(gtint_t(0), gtint_t(17), 1), // values of k ::testing::Values(dcomplex{0.0, 0.0}, dcomplex{1.0, 0.0}, dcomplex{-1.0, 0.0}, dcomplex{4.0, 0.0}, dcomplex{0.0, 1.5}, dcomplex{3.5, 4.5}), // alpha value ::testing::Values(dcomplex{0.0, 0.0}, dcomplex{1.0, 0.0}, dcomplex{-1.0, 0.0}, dcomplex{-5.0, 0.0}, dcomplex{0.0, 2.9}, dcomplex{-7.3, 6.7}), // beta value - ::testing::Values('r'), // storage of c - ::testing::Values(bli_zgemmsup_rd_zen_asm_3x4m), // zgemm_sup kernel - ::testing::Values('n'), // transa - ::testing::Values('t') // transb + ::testing::Values('r'), // storage of c + ::testing::Values(bli_zgemmsup_rd_zen_asm_3x4m), // zgemm_sup kernel + ::testing::Values('n'), // transa + ::testing::Values('t'), // transb + ::testing::Values(false, true) // is_memory_test ), - ::ZGEMMukrsupTestPrint() + ::zgemmUkrSUPPrint() ); INSTANTIATE_TEST_SUITE_P ( bli_zgemmsup_rd_zen_asm_3x2m_row_stored_c, - ZGEMMUkrSUPTest, + zgemmUkrSUP, ::testing::Combine( - ::testing::Range(gtint_t(1), gtint_t(11), 1), // values of m - ::testing::Values(gtint_t(2)), // values of n - ::testing::Range(gtint_t(0), gtint_t(17), 1), // values of k + ::testing::Range(gtint_t(1), gtint_t(11), 1), // values of m + ::testing::Values(gtint_t(2)), // values of n + ::testing::Range(gtint_t(0), gtint_t(17), 1), // values of k ::testing::Values(dcomplex{0.0, 0.0}, dcomplex{1.0, 0.0}, dcomplex{-1.0, 0.0}, dcomplex{4.0, 0.0}, dcomplex{0.0, -1.9}, dcomplex{3.5, 4.5}), // alpha value ::testing::Values(dcomplex{0.0, 0.0}, dcomplex{1.0, 0.0}, dcomplex{-1.0, 0.0}, dcomplex{-5.0, 0.0}, dcomplex{0.0, 1.19}, dcomplex{-7.3, 6.7}), // beta value - ::testing::Values('r'), // storage of c - ::testing::Values(bli_zgemmsup_rd_zen_asm_3x2m), // zgemm_sup kernel - ::testing::Values('n'), // transa - ::testing::Values('t') // transb + ::testing::Values('r'), // storage of c + ::testing::Values(bli_zgemmsup_rd_zen_asm_3x2m), // zgemm_sup kernel + ::testing::Values('n'), // transa + ::testing::Values('t'), // transb + ::testing::Values(false, true) // is_memory_test ), - ::ZGEMMukrsupTestPrint() + ::zgemmUkrSUPPrint() ); INSTANTIATE_TEST_SUITE_P ( bli_zgemmsup_rd_zen_asm_3x4n_row_stored_c, - ZGEMMUkrSUPTest, + zgemmUkrSUP, ::testing::Combine( - ::testing::Range(gtint_t(1), gtint_t(4), 1), // values of m - ::testing::Range(gtint_t(1), gtint_t(10), 1), // values of n - ::testing::Range(gtint_t(0), gtint_t(16),1), // values of k + ::testing::Range(gtint_t(1), gtint_t(4), 1), // values of m + ::testing::Range(gtint_t(1), gtint_t(10), 1), // values of n + ::testing::Range(gtint_t(0), gtint_t(16),1), // values of k ::testing::Values(dcomplex{0.0, 0.0}, dcomplex{1.0, 0.0}, dcomplex{-1.0, 0.0}, dcomplex{4.0, 0.0}, dcomplex{0.0, 1.0}, dcomplex{3.5, 4.5}), // alpha value ::testing::Values(dcomplex{0.0, 0.0}, dcomplex{1.0, 0.0}, dcomplex{-1.0, 0.0}, dcomplex{-5.0, 0.0}, dcomplex{0.0, 2.9}, dcomplex{-7.3, 6.7}), // beta value - ::testing::Values('r'), // storage of c - ::testing::Values(bli_zgemmsup_rd_zen_asm_3x4n), // zgemm_sup kernel - ::testing::Values('n'), // transa - ::testing::Values('t') // transb + ::testing::Values('r'), // storage of c + ::testing::Values(bli_zgemmsup_rd_zen_asm_3x4n), // zgemm_sup kernel + ::testing::Values('n'), // transa + ::testing::Values('t'), // transb + ::testing::Values(false, true) // is_memory_test ), - ::ZGEMMukrsupTestPrint() + ::zgemmUkrSUPPrint() ); INSTANTIATE_TEST_SUITE_P ( bli_zgemmsup_rd_zen_asm_2x4n_row_stored_c, - ZGEMMUkrSUPTest, + zgemmUkrSUP, ::testing::Combine( - ::testing::Values(gtint_t(2)), // values of m - ::testing::Range(gtint_t(1), gtint_t(12), 1), // values of n - ::testing::Range(gtint_t(0), gtint_t(14), 1), // values of k + ::testing::Values(gtint_t(2)), // values of m + ::testing::Range(gtint_t(1), gtint_t(12), 1), // values of n + ::testing::Range(gtint_t(0), gtint_t(14), 1), // values of k ::testing::Values(dcomplex{0.0, 0.0}, dcomplex{1.0, 0.0}, dcomplex{-1.0, 0.0}, dcomplex{4.0, 0.0}, dcomplex{0.0, -1.9}, dcomplex{3.5, 4.5}), // alpha value ::testing::Values(dcomplex{0.0, 0.0}, dcomplex{1.0, 0.0}, dcomplex{-1.0, 0.0}, dcomplex{-5.0, 0.0}, dcomplex{0.0, 1.23}, dcomplex{-7.3, 6.7}), // beta value - ::testing::Values('r'), // storage of c - ::testing::Values(bli_zgemmsup_rd_zen_asm_2x4n), // zgemm_sup kernel - ::testing::Values('n'), // transa - ::testing::Values('t') // transb + ::testing::Values('r'), // storage of c + ::testing::Values(bli_zgemmsup_rd_zen_asm_2x4n), // zgemm_sup kernel + ::testing::Values('n'), // transa + ::testing::Values('t'), // transb + ::testing::Values(false, true) // is_memory_test ), - ::ZGEMMukrsupTestPrint() + ::zgemmUkrSUPPrint() ); INSTANTIATE_TEST_SUITE_P ( bli_zgemmsup_rd_zen_asm_2x4_row_stored_c, - ZGEMMUkrSUPTest, + zgemmUkrSUP, ::testing::Combine( - ::testing::Values(gtint_t(2)), // values of m - ::testing::Values(gtint_t(4)), // values of n - ::testing::Range(gtint_t(0), gtint_t(14), 1), // values of k + ::testing::Values(gtint_t(2)), // values of m + ::testing::Values(gtint_t(4)), // values of n + ::testing::Range(gtint_t(0), gtint_t(14), 1), // values of k ::testing::Values(dcomplex{0.0, 0.0}, dcomplex{1.0, 0.0}, dcomplex{-1.0, 0.0}, dcomplex{4.0, 0.0}, dcomplex{0.0, 1.34}, dcomplex{3.5, 4.5}), // alpha value ::testing::Values(dcomplex{0.0, 0.0}, dcomplex{1.0, 0.0}, dcomplex{-1.0, 0.0}, dcomplex{-5.0, 0.0}, dcomplex{0.0, 2.9}, dcomplex{-7.3, 6.7}), // beta value - ::testing::Values('r'), // storage of c - ::testing::Values(bli_zgemmsup_rd_zen_asm_2x4), // zgemm_sup kernel - ::testing::Values('n'), // transa - ::testing::Values('t') // transb + ::testing::Values('r'), // storage of c + ::testing::Values(bli_zgemmsup_rd_zen_asm_2x4), // zgemm_sup kernel + ::testing::Values('n'), // transa + ::testing::Values('t'), // transb + ::testing::Values(false, true) // is_memory_test ), - ::ZGEMMukrsupTestPrint() + ::zgemmUkrSUPPrint() ); INSTANTIATE_TEST_SUITE_P ( bli_zgemmsup_rd_zen_asm_1x4_row_stored_c, - ZGEMMUkrSUPTest, + zgemmUkrSUP, ::testing::Combine( - ::testing::Values(gtint_t(1)), // values of m - ::testing::Values(gtint_t(4)), // values of n - ::testing::Range(gtint_t(0), gtint_t(9), 1), // values of k + ::testing::Values(gtint_t(1)), // values of m + ::testing::Values(gtint_t(4)), // values of n + ::testing::Range(gtint_t(0), gtint_t(9), 1), // values of k ::testing::Values(dcomplex{0.0, 0.0}, dcomplex{1.0, 0.0}, dcomplex{-1.0, 0.0}, dcomplex{4.0, 0.0}, dcomplex{0.0, 1.56}, dcomplex{3.5, 4.5}), // alpha value ::testing::Values(dcomplex{0.0, 0.0}, dcomplex{1.0, 0.0}, dcomplex{-1.0, 0.0}, dcomplex{-5.0, 0.0}, dcomplex{0.0, 21.9}, dcomplex{-7.3, 6.7}), // beta value - ::testing::Values('r'), // storage of c - ::testing::Values(bli_zgemmsup_rd_zen_asm_1x4), // zgemm_sup kernel - ::testing::Values('n'), // transa - ::testing::Values('t') // transb + ::testing::Values('r'), // storage of c + ::testing::Values(bli_zgemmsup_rd_zen_asm_1x4), // zgemm_sup kernel + ::testing::Values('n'), // transa + ::testing::Values('t'), // transb + ::testing::Values(false, true) // is_memory_test ), - ::ZGEMMukrsupTestPrint() + ::zgemmUkrSUPPrint() ); INSTANTIATE_TEST_SUITE_P ( bli_zgemmsup_rd_zen_asm_1x2_row_stored_c, - ZGEMMUkrSUPTest, + zgemmUkrSUP, ::testing::Combine( - ::testing::Values(gtint_t(1)), // values of m - ::testing::Values(gtint_t(2)), // values of n - ::testing::Range(gtint_t(0), gtint_t(8), 1), // values of k + ::testing::Values(gtint_t(1)), // values of m + ::testing::Values(gtint_t(2)), // values of n + ::testing::Range(gtint_t(0), gtint_t(8), 1), // values of k ::testing::Values(dcomplex{0.0, 0.0}, dcomplex{1.0, 0.0}, dcomplex{-1.0, 0.0}, dcomplex{4.0, 0.0}, dcomplex{0.0, 1.99}, dcomplex{3.5, 4.5}), // alpha value ::testing::Values(dcomplex{0.0, 0.0}, dcomplex{1.0, 0.0}, dcomplex{-1.0, 0.0}, dcomplex{-5.0, 0.0}, dcomplex{0.0, -21.9}, dcomplex{-7.3, 6.7}), // beta value - ::testing::Values('r'), // storage of c - ::testing::Values(bli_zgemmsup_rd_zen_asm_1x2), // zgemm_sup kernel - ::testing::Values('n'), // transa - ::testing::Values('t') // transb + ::testing::Values('r'), // storage of c + ::testing::Values(bli_zgemmsup_rd_zen_asm_1x2), // zgemm_sup kernel + ::testing::Values('n'), // transa + ::testing::Values('t'), // transb + ::testing::Values(false, true) // is_memory_test ), - ::ZGEMMukrsupTestPrint() + ::zgemmUkrSUPPrint() ); INSTANTIATE_TEST_SUITE_P ( bli_zgemmsup_rd_zen_asm_2x2_row_stored_c, - ZGEMMUkrSUPTest, + zgemmUkrSUP, ::testing::Combine( - ::testing::Values(gtint_t(2)), // values of m - ::testing::Values(gtint_t(2)), // values of n - ::testing::Range(gtint_t(0), gtint_t(10), 1), // values of k + ::testing::Values(gtint_t(2)), // values of m + ::testing::Values(gtint_t(2)), // values of n + ::testing::Range(gtint_t(0), gtint_t(10), 1), // values of k ::testing::Values(dcomplex{0.0, 0.0}, dcomplex{1.0, 0.0}, dcomplex{-1.0, 0.0}, dcomplex{4.0, 0.0}, dcomplex{0.0, 91.9}, dcomplex{3.5, 4.5}), // alpha value ::testing::Values(dcomplex{0.0, 0.0}, dcomplex{1.0, 0.0}, dcomplex{-1.0, 0.0}, dcomplex{-5.0, 0.0}, dcomplex{0.0, -2.3}, dcomplex{-7.3, 6.7}), // beta value - ::testing::Values('r'), // storage of c - ::testing::Values(bli_zgemmsup_rd_zen_asm_2x2), // zgemm_sup kernel - ::testing::Values('n'), // transa - ::testing::Values('t') // transb + ::testing::Values('r'), // storage of c + ::testing::Values(bli_zgemmsup_rd_zen_asm_2x2), // zgemm_sup kernel + ::testing::Values('n'), // transa + ::testing::Values('t'), // transb + ::testing::Values(false, true) // is_memory_test ), - ::ZGEMMukrsupTestPrint() + ::zgemmUkrSUPPrint() ); INSTANTIATE_TEST_SUITE_P ( bli_zgemmsup_rv_zen_asm_3x4n_col_stored_c, - ZGEMMUkrSUPTest, + zgemmUkrSUP, ::testing::Combine( - ::testing::Range(gtint_t(1), gtint_t(4), 1), // values of m - ::testing::Range(gtint_t(1), gtint_t(15), 1), // values of n - ::testing::Range(gtint_t(0), gtint_t(12), 1), // values of k + ::testing::Range(gtint_t(1), gtint_t(4), 1), // values of m + ::testing::Range(gtint_t(1), gtint_t(15), 1), // values of n + ::testing::Range(gtint_t(0), gtint_t(12), 1), // values of k ::testing::Values(dcomplex{1.0, 0.0}, dcomplex{-1.0, 0.0}, dcomplex{4.0, 0.0}, dcomplex{0.0, -2}, dcomplex{3.5, 4.5}), // alpha value ::testing::Values(dcomplex{0.0, 0.0}, dcomplex{1.0, 0.0}, dcomplex{-1.0, 0.0}, dcomplex{-5.0, 0.0}, dcomplex{0.0, -3}, dcomplex{-7.3, 6.7}), // beta value - ::testing::Values('c'), // storage of c - ::testing::Values(bli_zgemmsup_rv_zen_asm_3x4n), // zgemm_sup kernel - ::testing::Values('n'), // transa - ::testing::Values('t') // transb + ::testing::Values('c'), // storage of c + ::testing::Values(bli_zgemmsup_rv_zen_asm_3x4n), // zgemm_sup kernel + ::testing::Values('n'), // transa + ::testing::Values('t'), // transb + ::testing::Values(false, true) // is_memory_test ), - ::ZGEMMukrsupTestPrint() + ::zgemmUkrSUPPrint() ); INSTANTIATE_TEST_SUITE_P ( bli_zgemmsup_rv_zen_asm_2x4n_col_stored_c, - ZGEMMUkrSUPTest, + zgemmUkrSUP, ::testing::Combine( - ::testing::Values(gtint_t(2)), // values of m - ::testing::Range(gtint_t(1), gtint_t(13), 1), // values of n - ::testing::Range(gtint_t(0), gtint_t(20), 1), // values of k + ::testing::Values(gtint_t(2)), // values of m + ::testing::Range(gtint_t(1), gtint_t(13), 1), // values of n + ::testing::Range(gtint_t(0), gtint_t(20), 1), // values of k ::testing::Values(dcomplex{0.0, 0.0}, dcomplex{1.0, 0.0}, dcomplex{-1.0, 0.0}, dcomplex{4.0, 0.0}, dcomplex{0.0, 8.9}, dcomplex{3.5, 4.5}), // alpha value ::testing::Values(dcomplex{0.0, 0.0}, dcomplex{1.0, 0.0}, dcomplex{-1.0, 0.0}, dcomplex{-5.0, 0.0}, dcomplex{0.0, -1.9}, dcomplex{-7.3, 6.7}), // beta value - ::testing::Values('c'), // storage of c - ::testing::Values(bli_zgemmsup_rv_zen_asm_2x4n), // zgemm_sup kernel - ::testing::Values('n'), // transa - ::testing::Values('t') // transb + ::testing::Values('c'), // storage of c + ::testing::Values(bli_zgemmsup_rv_zen_asm_2x4n), // zgemm_sup kernel + ::testing::Values('n'), // transa + ::testing::Values('t'), // transb + ::testing::Values(false, true) // is_memory_test ), - ::ZGEMMukrsupTestPrint() + ::zgemmUkrSUPPrint() ); INSTANTIATE_TEST_SUITE_P ( bli_zgemmsup_rv_zen_asm_1x4n_col_stored_c, - ZGEMMUkrSUPTest, + zgemmUkrSUP, ::testing::Combine( - ::testing::Values(gtint_t(1)), // values of m - ::testing::Range(gtint_t(1), gtint_t(8), 1), // values of n - ::testing::Range(gtint_t(0), gtint_t(20), 1), // values of k + ::testing::Values(gtint_t(1)), // values of m + ::testing::Range(gtint_t(1), gtint_t(8), 1), // values of n + ::testing::Range(gtint_t(0), gtint_t(20), 1), // values of k ::testing::Values(dcomplex{0.0, 0.0}, dcomplex{1.0, 0.0}, dcomplex{-1.0, 0.0}, dcomplex{4.0, 0.0}, dcomplex{0.0, -1.3}, dcomplex{3.5, 4.5}), // alpha value ::testing::Values(dcomplex{0.0, 0.0}, dcomplex{1.0, 0.0}, dcomplex{-1.0, 0.0}, dcomplex{-5.0, 0.0}, dcomplex{0.0, 5.6}, dcomplex{-7.3, 6.7}), // beta value - ::testing::Values('c'), // storage of c - ::testing::Values(bli_zgemmsup_rv_zen_asm_1x4n), // zgemm_sup kernel - ::testing::Values('n'), // transa - ::testing::Values('t') // transb + ::testing::Values('c'), // storage of c + ::testing::Values(bli_zgemmsup_rv_zen_asm_1x4n), // zgemm_sup kernel + ::testing::Values('n'), // transa + ::testing::Values('t'), // transb + ::testing::Values(false, true) // is_memory_test ), - ::ZGEMMukrsupTestPrint() + ::zgemmUkrSUPPrint() ); INSTANTIATE_TEST_SUITE_P ( bli_zgemmsup_rv_zen_asm_3x4n_row_stored_c, - ZGEMMUkrSUPTest, + zgemmUkrSUP, ::testing::Combine( - ::testing::Range(gtint_t(1), gtint_t(4), 1), // values of m - ::testing::Range(gtint_t(1), gtint_t(18), 1), // values of n - ::testing::Range(gtint_t(0), gtint_t(20), 1), // values of k + ::testing::Range(gtint_t(1), gtint_t(4), 1), // values of m + ::testing::Range(gtint_t(1), gtint_t(18), 1), // values of n + ::testing::Range(gtint_t(0), gtint_t(20), 1), // values of k ::testing::Values(dcomplex{1.0, 0.0}, dcomplex{-1.0, 0.0}, dcomplex{4.0,.0}, dcomplex{0.0, 2.9}, dcomplex{3.5, 4.5}), // alpha value ::testing::Values(dcomplex{0.0, 0.0}, dcomplex{1.0, 0.0}, dcomplex{-1.0, 0.0}, dcomplex{-5.0, 0.0}, dcomplex{0.0, 1.3}, dcomplex{-7.3, 6.7}), // beta value - ::testing::Values('r'), // storage of c - ::testing::Values(bli_zgemmsup_rv_zen_asm_3x4n), // zgemm_sup kernel - ::testing::Values('t'), // transa - ::testing::Values('n') // transb + ::testing::Values('r'), // storage of c + ::testing::Values(bli_zgemmsup_rv_zen_asm_3x4n), // zgemm_sup kernel + ::testing::Values('t'), // transa + ::testing::Values('n'), // transb + ::testing::Values(false, true) // is_memory_test ), - ::ZGEMMukrsupTestPrint() + ::zgemmUkrSUPPrint() ); INSTANTIATE_TEST_SUITE_P ( bli_zgemmsup_rv_zen_asm_2x4n_row_stored_c, - ZGEMMUkrSUPTest, + zgemmUkrSUP, ::testing::Combine( - ::testing::Values(gtint_t(2)), // values of m - ::testing::Range(gtint_t(1), gtint_t(6), 1), // values of n - ::testing::Range(gtint_t(0), gtint_t(20), 1), // values of k + ::testing::Values(gtint_t(2)), // values of m + ::testing::Range(gtint_t(1), gtint_t(6), 1), // values of n + ::testing::Range(gtint_t(0), gtint_t(20), 1), // values of k ::testing::Values(dcomplex{0.0, 0.0}, dcomplex{1.0, 0.0}, dcomplex{-1.0, 0.0}, dcomplex{4.0, 0.0}, dcomplex{0.0, -5.6}, dcomplex{3.5, 4.5}), // alpha value ::testing::Values(dcomplex{0.0, 0.0}, dcomplex{1.0, 0.0}, dcomplex{-1.0, 0.0}, dcomplex{-5.0, 0.0}, dcomplex{0.0, 1.9}, dcomplex{-7.3, 6.7}), // beta value - ::testing::Values('r'), // storage of c - ::testing::Values(bli_zgemmsup_rv_zen_asm_2x4n), // zgemm_sup kernel - ::testing::Values('t'), // transa - ::testing::Values('n') // transb + ::testing::Values('r'), // storage of c + ::testing::Values(bli_zgemmsup_rv_zen_asm_2x4n), // zgemm_sup kernel + ::testing::Values('t'), // transa + ::testing::Values('n'), // transb + ::testing::Values(false, true) // is_memory_test ), - ::ZGEMMukrsupTestPrint() + ::zgemmUkrSUPPrint() ); INSTANTIATE_TEST_SUITE_P ( bli_zgemmsup_rv_zen_asm_1x4n_row_stored_c, - ZGEMMUkrSUPTest, + zgemmUkrSUP, ::testing::Combine( - ::testing::Values(gtint_t(1)), // values of m - ::testing::Range(gtint_t(1), gtint_t(9), 1), // values of n - ::testing::Range(gtint_t(0), gtint_t(20), 1), // values of k + ::testing::Values(gtint_t(1)), // values of m + ::testing::Range(gtint_t(1), gtint_t(9), 1), // values of n + ::testing::Range(gtint_t(0), gtint_t(20), 1), // values of k ::testing::Values(dcomplex{0.0, 0.0}, dcomplex{1.0, 0.0}, dcomplex{-1.0, 0.0}, dcomplex{4.0, 0.0}, dcomplex{0.0, -1.9}, dcomplex{3.5, 4.5}), // alpha value ::testing::Values(dcomplex{0.0, 0.0}, dcomplex{1.0, 0.0}, dcomplex{-1.0, 0.0}, dcomplex{-5.0, 0.0}, dcomplex{0.0, -1.3}, dcomplex{-7.3, 6.7}), // beta value - ::testing::Values('r'), // storage of c - ::testing::Values(bli_zgemmsup_rv_zen_asm_1x4n), // zgemm_sup kernel - ::testing::Values('t'), // transa - ::testing::Values('n') // transb + ::testing::Values('r'), // storage of c + ::testing::Values(bli_zgemmsup_rv_zen_asm_1x4n), // zgemm_sup kernel + ::testing::Values('t'), // transa + ::testing::Values('n'), // transb + ::testing::Values(false, true) // is_memory_test ), - ::ZGEMMukrsupTestPrint() + ::zgemmUkrSUPPrint() ); #endif #if defined(BLIS_KERNELS_ZEN4) && defined(GTEST_AVX512) INSTANTIATE_TEST_SUITE_P ( bli_zgemmsup_cv_zen4_asm_12x4m_col_stored_c, - ZGEMMUkrSUPTest, + zgemmUkrSUP, ::testing::Combine( - ::testing::Range(gtint_t(1), gtint_t(28), 1), // values of m - ::testing::Range(gtint_t(1), gtint_t(5), 1), // values of n - ::testing::Range(gtint_t(0), gtint_t(19), 1), // values of k + ::testing::Range(gtint_t(1), gtint_t(28), 1), // values of m + ::testing::Range(gtint_t(1), gtint_t(5), 1), // values of n + ::testing::Range(gtint_t(0), gtint_t(19), 1), // values of k ::testing::Values(dcomplex{0.0, 0.0}, dcomplex{1.0, 0.0}, dcomplex{-1.0, 0.0}, dcomplex{4.0, 0.0}, dcomplex{0.0, -8}, dcomplex{3.5, 4.5}), // alpha value ::testing::Values(dcomplex{0.0, 0.0}, dcomplex{1.0, 0.0}, dcomplex{-1.0, 0.0}, dcomplex{-5.0, 0.0}, dcomplex{0.0, -9}, dcomplex{-7.3, 6.7}), // beta value - ::testing::Values('c'), // storage of c - ::testing::Values(bli_zgemmsup_cv_zen4_asm_12x4m), // zgemm_sup kernel - ::testing::Values('n'), // transa - ::testing::Values('n') // transb + ::testing::Values('c'), // storage of c + ::testing::Values(bli_zgemmsup_cv_zen4_asm_12x4m), // zgemm_sup kernel + ::testing::Values('n'), // transa + ::testing::Values('n'), // transb + ::testing::Values(false, true) // is_memory_test ), - ::ZGEMMukrsupTestPrint() + ::zgemmUkrSUPPrint() ); INSTANTIATE_TEST_SUITE_P ( bli_zgemmsup_cv_zen4_asm_12x3m_col_stored_c, - ZGEMMUkrSUPTest, + zgemmUkrSUP, ::testing::Combine( - ::testing::Range(gtint_t(1), gtint_t(25), 1), // values of m - ::testing::Values(gtint_t(3)), // values of n - ::testing::Range(gtint_t(0), gtint_t(10), 1), // values of k + ::testing::Range(gtint_t(1), gtint_t(25), 1), // values of m + ::testing::Values(gtint_t(3)), // values of n + ::testing::Range(gtint_t(0), gtint_t(10), 1), // values of k ::testing::Values(dcomplex{0.0, 0.0}, dcomplex{1.0, 0.0}, dcomplex{-1.0, 0.0}, dcomplex{4.0, 0.0}, dcomplex{0.0, 1.9}, dcomplex{3.5, 4.5}), // alpha value ::testing::Values(dcomplex{0.0, 0.0}, dcomplex{1.0, 0.0}, dcomplex{-1.0, 0.0}, dcomplex{-5.0, 0.0}, dcomplex{0.0, 9}, dcomplex{-7.3, 6.7}), // beta value - ::testing::Values('c'), // storage of c - ::testing::Values(bli_zgemmsup_cv_zen4_asm_12x3m), // zgemm_sup kernel - ::testing::Values('n'), // transa - ::testing::Values('n') // transb + ::testing::Values('c'), // storage of c + ::testing::Values(bli_zgemmsup_cv_zen4_asm_12x3m), // zgemm_sup kernel + ::testing::Values('n'), // transa + ::testing::Values('n'), // transb + ::testing::Values(false, true) // is_memory_test ), - ::ZGEMMukrsupTestPrint() + ::zgemmUkrSUPPrint() ); INSTANTIATE_TEST_SUITE_P ( bli_zgemmsup_cv_zen4_asm_12x2m_col_stored_c, - ZGEMMUkrSUPTest, + zgemmUkrSUP, ::testing::Combine( - ::testing::Range(gtint_t(1), gtint_t(20), 1), // values of m - ::testing::Values(gtint_t(2)), // values of n - ::testing::Range(gtint_t(0), gtint_t(13), 1), // values of k + ::testing::Range(gtint_t(1), gtint_t(20), 1), // values of m + ::testing::Values(gtint_t(2)), // values of n + ::testing::Range(gtint_t(0), gtint_t(13), 1), // values of k ::testing::Values(dcomplex{0.0, 0.0}, dcomplex{1.0, 0.0}, dcomplex{-1.0, 0.0}, dcomplex{4.0, 0.0}, dcomplex{0.0, -0.9}, dcomplex{3.5, 4.5}), // alpha value ::testing::Values(dcomplex{0.0, 0.0}, dcomplex{1.0, 0.0}, dcomplex{-1.0, 0.0}, dcomplex{-5.0, 0.0}, dcomplex{0.0, -21.9}, dcomplex{-7.3, 6.7}), // beta value - ::testing::Values('c'), // storage of c - ::testing::Values(bli_zgemmsup_cv_zen4_asm_12x2m), // zgemm_sup kernel - ::testing::Values('n'), // transa - ::testing::Values('n') // transb + ::testing::Values('c'), // storage of c + ::testing::Values(bli_zgemmsup_cv_zen4_asm_12x2m), // zgemm_sup kernel + ::testing::Values('n'), // transa + ::testing::Values('n'), // transb + ::testing::Values(false, true) // is_memory_test ), - ::ZGEMMukrsupTestPrint() + ::zgemmUkrSUPPrint() ); INSTANTIATE_TEST_SUITE_P ( bli_zgemmsup_cv_zen4_asm_12x1m_col_stored_c, - ZGEMMUkrSUPTest, + zgemmUkrSUP, ::testing::Combine( - ::testing::Range(gtint_t(1), gtint_t(25), 1), // values of m - ::testing::Values(gtint_t(1)), // values of n - ::testing::Range(gtint_t(0), gtint_t(22), 1), // values of k + ::testing::Range(gtint_t(1), gtint_t(25), 1), // values of m + ::testing::Values(gtint_t(1)), // values of n + ::testing::Range(gtint_t(0), gtint_t(22), 1), // values of k ::testing::Values(dcomplex{0.0, 0.0}, dcomplex{1.0, 0.0}, dcomplex{-1.0, 0.0}, dcomplex{4.0, 0.0}, dcomplex{0.0, -31.9}, dcomplex{3.5, 4.5}), // alpha value ::testing::Values(dcomplex{0.0, 0.0}, dcomplex{1.0, 0.0}, dcomplex{-1.0, 0.0}, dcomplex{-5.0, 0.0}, dcomplex{0.0, 1.4}, dcomplex{-7.3, 6.7}), // beta value - ::testing::Values('c'), // storage of c - ::testing::Values(bli_zgemmsup_cv_zen4_asm_12x1m), // zgemm_sup kernel - ::testing::Values('n'), // transa - ::testing::Values('n') // transb + ::testing::Values('c'), // storage of c + ::testing::Values(bli_zgemmsup_cv_zen4_asm_12x1m), // zgemm_sup kernel + ::testing::Values('n'), // transa + ::testing::Values('n'), // transb + ::testing::Values(false, true) // is_memory_test ), - ::ZGEMMukrsupTestPrint() + ::zgemmUkrSUPPrint() ); INSTANTIATE_TEST_SUITE_P ( bli_zgemmsup_cv_zen4_asm_8x4_col_stored_c, - ZGEMMUkrSUPTest, + zgemmUkrSUP, ::testing::Combine( - ::testing::Values(gtint_t(8)), // values of m - ::testing::Values(gtint_t(4)), // values of n - ::testing::Range(gtint_t(0), gtint_t(17), 1), // values of k + ::testing::Values(gtint_t(8)), // values of m + ::testing::Values(gtint_t(4)), // values of n + ::testing::Range(gtint_t(0), gtint_t(17), 1), // values of k ::testing::Values(dcomplex{0.0, 0.0}, dcomplex{1.0, 0.0}, dcomplex{-1.0, 0.0}, dcomplex{4.0, 0.0}, dcomplex{0.0, 9}, dcomplex{3.5, 4.5}), // alpha value ::testing::Values(dcomplex{0.0, 0.0}, dcomplex{1.0, 0.0}, dcomplex{-1.0, 0.0}, dcomplex{-5.0, 0.0}, dcomplex{0.0, 8}, dcomplex{-7.3, 6.7}), // beta value - ::testing::Values('c'), // storage of c - ::testing::Values(bli_zgemmsup_cv_zen4_asm_8x4), // zgemm_sup kernel - ::testing::Values('n'), // transa - ::testing::Values('n') // transb + ::testing::Values('c'), // storage of c + ::testing::Values(bli_zgemmsup_cv_zen4_asm_8x4), // zgemm_sup kernel + ::testing::Values('n'), // transa + ::testing::Values('n'), // transb + ::testing::Values(false, true) // is_memory_test ), - ::ZGEMMukrsupTestPrint() + ::zgemmUkrSUPPrint() ); INSTANTIATE_TEST_SUITE_P ( bli_zgemmsup_cv_zen4_asm_8x3_col_stored_c, - ZGEMMUkrSUPTest, + zgemmUkrSUP, ::testing::Combine( - ::testing::Values(gtint_t(8)), // values of m - ::testing::Values(gtint_t(3)), // values of n - ::testing::Range(gtint_t(0), gtint_t(16), 1), // values of k + ::testing::Values(gtint_t(8)), // values of m + ::testing::Values(gtint_t(3)), // values of n + ::testing::Range(gtint_t(0), gtint_t(16), 1), // values of k ::testing::Values(dcomplex{0.0, 0.0}, dcomplex{1.0, 0.0}, dcomplex{-1.0, 0.0}, dcomplex{4.0, 0.0}, dcomplex{0.0, 1.2}, dcomplex{3.5, 4.5}), // alpha value ::testing::Values(dcomplex{0.0, 0.0}, dcomplex{1.0, 0.0}, dcomplex{-1.0, 0.0}, dcomplex{-5.0, 0.0}, dcomplex{0.0, -1.8}, dcomplex{-7.3, 6.7}), // beta value - ::testing::Values('c'), // storage of c - ::testing::Values(bli_zgemmsup_cv_zen4_asm_8x3), // zgemm_sup kernel - ::testing::Values('n'), // transa - ::testing::Values('n') // transb + ::testing::Values('c'), // storage of c + ::testing::Values(bli_zgemmsup_cv_zen4_asm_8x3), // zgemm_sup kernel + ::testing::Values('n'), // transa + ::testing::Values('n'), // transb + ::testing::Values(false, true) // is_memory_test ), - ::ZGEMMukrsupTestPrint() + ::zgemmUkrSUPPrint() ); INSTANTIATE_TEST_SUITE_P ( bli_zgemmsup_cv_zen4_asm_8x2_col_stored_c, - ZGEMMUkrSUPTest, + zgemmUkrSUP, ::testing::Combine( - ::testing::Values(gtint_t(8)), // values of m - ::testing::Values(gtint_t(2)), // values of n - ::testing::Range(gtint_t(0), gtint_t(14), 1), // values of k + ::testing::Values(gtint_t(8)), // values of m + ::testing::Values(gtint_t(2)), // values of n + ::testing::Range(gtint_t(0), gtint_t(14), 1), // values of k ::testing::Values(dcomplex{0.0, 0.0}, dcomplex{1.0, 0.0}, dcomplex{-1.0, 0.0}, dcomplex{4.0, 0.0}, dcomplex{0.0, -1}, dcomplex{3.5, 4.5}), // alpha value ::testing::Values(dcomplex{0.0, 0.0}, dcomplex{1.0, 0.0}, dcomplex{-1.0, 0.0}, dcomplex{-5.0, 0.0}, dcomplex{0.0, 9}, dcomplex{-7.3, 6.7}), // beta value - ::testing::Values('c'), // storage of c - ::testing::Values(bli_zgemmsup_cv_zen4_asm_8x2), // zgemm_sup kernel - ::testing::Values('n'), // transa - ::testing::Values('n') // transb + ::testing::Values('c'), // storage of c + ::testing::Values(bli_zgemmsup_cv_zen4_asm_8x2), // zgemm_sup kernel + ::testing::Values('n'), // transa + ::testing::Values('n'), // transb + ::testing::Values(false, true) // is_memory_test ), - ::ZGEMMukrsupTestPrint() + ::zgemmUkrSUPPrint() ); INSTANTIATE_TEST_SUITE_P ( bli_zgemmsup_cv_zen4_asm_8x1_col_stored_c, - ZGEMMUkrSUPTest, + zgemmUkrSUP, ::testing::Combine( - ::testing::Values(gtint_t(8)), // values of m - ::testing::Values(gtint_t(1)), // values of n - ::testing::Range(gtint_t(0), gtint_t(10), 1), // values of k + ::testing::Values(gtint_t(8)), // values of m + ::testing::Values(gtint_t(1)), // values of n + ::testing::Range(gtint_t(0), gtint_t(10), 1), // values of k ::testing::Values(dcomplex{0.0, 0.0}, dcomplex{1.0, 0.0}, dcomplex{-1.0, 0.0}, dcomplex{4.0, 0.0}, dcomplex{0.0, -9}, dcomplex{3.5, 4.5}), // alpha value ::testing::Values(dcomplex{0.0, 0.0}, dcomplex{1.0, 0.0}, dcomplex{-1.0, 0.0}, dcomplex{-5.0, 0.0}, dcomplex{0.0, -2}, dcomplex{-7.3, 6.7}), // beta value - ::testing::Values('c'), // storage of c - ::testing::Values(bli_zgemmsup_cv_zen4_asm_8x1), // zgemm_sup kernel - ::testing::Values('n'), // transa - ::testing::Values('n') // transb + ::testing::Values('c'), // storage of c + ::testing::Values(bli_zgemmsup_cv_zen4_asm_8x1), // zgemm_sup kernel + ::testing::Values('n'), // transa + ::testing::Values('n'), // transb + ::testing::Values(false, true) // is_memory_test ), - ::ZGEMMukrsupTestPrint() + ::zgemmUkrSUPPrint() ); INSTANTIATE_TEST_SUITE_P ( bli_zgemmsup_cv_zen4_asm_4x4_col_stored_c, - ZGEMMUkrSUPTest, + zgemmUkrSUP, ::testing::Combine( - ::testing::Values(gtint_t(4)), // values of m - ::testing::Values(gtint_t(4)), // values of n - ::testing::Range(gtint_t(0), gtint_t(9), 1), // values of k + ::testing::Values(gtint_t(4)), // values of m + ::testing::Values(gtint_t(4)), // values of n + ::testing::Range(gtint_t(0), gtint_t(9), 1), // values of k ::testing::Values(dcomplex{0.0, 0.0}, dcomplex{1.0, 0.0}, dcomplex{-1.0, 0.0}, dcomplex{4.0, 0.0}, dcomplex{0.0, 3}, dcomplex{3.5, 4.5}), // alpha value ::testing::Values(dcomplex{0.0, 0.0}, dcomplex{1.0, 0.0}, dcomplex{-1.0, 0.0}, dcomplex{-5.0, 0.0}, dcomplex{0.0, 9}, dcomplex{-7.3, 6.7}), // beta value - ::testing::Values('c'), // storage of c - ::testing::Values(bli_zgemmsup_cv_zen4_asm_4x4), // zgemm_sup kernel - ::testing::Values('n'), // transa - ::testing::Values('n') // transb + ::testing::Values('c'), // storage of c + ::testing::Values(bli_zgemmsup_cv_zen4_asm_4x4), // zgemm_sup kernel + ::testing::Values('n'), // transa + ::testing::Values('n'), // transb + ::testing::Values(false, true) // is_memory_test ), - ::ZGEMMukrsupTestPrint() + ::zgemmUkrSUPPrint() ); INSTANTIATE_TEST_SUITE_P ( bli_zgemmsup_cv_zen4_asm_4x3_col_stored_c, - ZGEMMUkrSUPTest, + zgemmUkrSUP, ::testing::Combine( - ::testing::Values(gtint_t(4)), // values of m - ::testing::Values(gtint_t(3)), // values of n - ::testing::Range(gtint_t(0), gtint_t(19), 1), // values of k + ::testing::Values(gtint_t(4)), // values of m + ::testing::Values(gtint_t(3)), // values of n + ::testing::Range(gtint_t(0), gtint_t(19), 1), // values of k ::testing::Values(dcomplex{0.0, 0.0}, dcomplex{1.0, 0.0}, dcomplex{-1.0, 0.0}, dcomplex{4.0, 0.0}, dcomplex{0.0, -1.9}, dcomplex{3.5, 4.5}), // alpha value ::testing::Values(dcomplex{0.0, 0.0}, dcomplex{1.0, 0.0}, dcomplex{-1.0, 0.0}, dcomplex{-5.0, 0.0}, dcomplex{0.0, 1.5}, dcomplex{-7.3, 6.7}), // beta value - ::testing::Values('c'), // storage of c - ::testing::Values(bli_zgemmsup_cv_zen4_asm_4x3), // zgemm_sup kernel - ::testing::Values('n'), // transa - ::testing::Values('n') // transb + ::testing::Values('c'), // storage of c + ::testing::Values(bli_zgemmsup_cv_zen4_asm_4x3), // zgemm_sup kernel + ::testing::Values('n'), // transa + ::testing::Values('n'), // transb + ::testing::Values(false, true) // is_memory_test ), - ::ZGEMMukrsupTestPrint() + ::zgemmUkrSUPPrint() ); INSTANTIATE_TEST_SUITE_P ( bli_zgemmsup_cv_zen4_asm_4x2_col_stored_c, - ZGEMMUkrSUPTest, + zgemmUkrSUP, ::testing::Combine( - ::testing::Values(gtint_t(4)), // values of m - ::testing::Values(gtint_t(2)), // values of n - ::testing::Range(gtint_t(0), gtint_t(14), 1), // values of k + ::testing::Values(gtint_t(4)), // values of m + ::testing::Values(gtint_t(2)), // values of n + ::testing::Range(gtint_t(0), gtint_t(14), 1), // values of k ::testing::Values(dcomplex{0.0, 0.0}, dcomplex{1.0, 0.0}, dcomplex{-1.0, 0.0}, dcomplex{4.0, 0.0}, dcomplex{0.0, -19}, dcomplex{3.5, 4.5}), // alpha value ::testing::Values(dcomplex{0.0, 0.0}, dcomplex{1.0, 0.0}, dcomplex{-1.0, 0.0}, dcomplex{-5.0, 0.0}, dcomplex{0.0, -9}, dcomplex{-7.3, 6.7}), // beta value - ::testing::Values('c'), // storage of c - ::testing::Values(bli_zgemmsup_cv_zen4_asm_4x2), // zgemm_sup kernel - ::testing::Values('n'), // transa - ::testing::Values('n') // transb + ::testing::Values('c'), // storage of c + ::testing::Values(bli_zgemmsup_cv_zen4_asm_4x2), // zgemm_sup kernel + ::testing::Values('n'), // transa + ::testing::Values('n'), // transb + ::testing::Values(false, true) // is_memory_test ), - ::ZGEMMukrsupTestPrint() + ::zgemmUkrSUPPrint() ); INSTANTIATE_TEST_SUITE_P ( bli_zgemmsup_cv_zen4_asm_4x1_col_stored_c, - ZGEMMUkrSUPTest, + zgemmUkrSUP, ::testing::Combine( - ::testing::Values(gtint_t(4)), // values of m - ::testing::Values(gtint_t(1)), // values of n - ::testing::Range(gtint_t(0), gtint_t(12), 1), // values of k + ::testing::Values(gtint_t(4)), // values of m + ::testing::Values(gtint_t(1)), // values of n + ::testing::Range(gtint_t(0), gtint_t(12), 1), // values of k ::testing::Values(dcomplex{0.0, 0.0}, dcomplex{1.0, 0.0}, dcomplex{-1.0, 0.0}, dcomplex{4.0, 0.0}, dcomplex{0.0, -19}, dcomplex{3.5, 4.5}), // alpha value ::testing::Values(dcomplex{0.0, 0.0}, dcomplex{1.0, 0.0}, dcomplex{-1.0, 0.0}, dcomplex{-5.0, 0.0}, dcomplex{0.0, 1}, dcomplex{-7.3, 6.7}), // beta value - ::testing::Values('c'), // storage of c - ::testing::Values(bli_zgemmsup_cv_zen4_asm_4x1), // zgemm_sup kernel - ::testing::Values('n'), // transa - ::testing::Values('n') // transb + ::testing::Values('c'), // storage of c + ::testing::Values(bli_zgemmsup_cv_zen4_asm_4x1), // zgemm_sup kernel + ::testing::Values('n'), // transa + ::testing::Values('n'), // transb + ::testing::Values(false, true) // is_memory_test ), - ::ZGEMMukrsupTestPrint() + ::zgemmUkrSUPPrint() ); INSTANTIATE_TEST_SUITE_P ( bli_zgemmsup_cv_zen4_asm_2x4_col_stored_c, - ZGEMMUkrSUPTest, + zgemmUkrSUP, ::testing::Combine( - ::testing::Values(gtint_t(2)), // values of m - ::testing::Values(gtint_t(4)), // values of n - ::testing::Range(gtint_t(0), gtint_t(16), 1), // values of k + ::testing::Values(gtint_t(2)), // values of m + ::testing::Values(gtint_t(4)), // values of n + ::testing::Range(gtint_t(0), gtint_t(16), 1), // values of k ::testing::Values(dcomplex{0.0, 0.0}, dcomplex{1.0, 0.0}, dcomplex{-1.0, 0.0}, dcomplex{4.0, 0.0}, dcomplex{0.0, 1.9}, dcomplex{3.5, 4.5}), // alpha value ::testing::Values(dcomplex{0.0, 0.0}, dcomplex{1.0, 0.0}, dcomplex{-1.0, 0.0}, dcomplex{-5.0, 0.0}, dcomplex{0.0, 1.8}, dcomplex{-7.3, 6.7}), // beta value - ::testing::Values('c'), // storage of c - ::testing::Values(bli_zgemmsup_cv_zen4_asm_2x4), // zgemm_sup kernel - ::testing::Values('n'), // transa - ::testing::Values('n') // transb + ::testing::Values('c'), // storage of c + ::testing::Values(bli_zgemmsup_cv_zen4_asm_2x4), // zgemm_sup kernel + ::testing::Values('n'), // transa + ::testing::Values('n'), // transb + ::testing::Values(false, true) // is_memory_test ), - ::ZGEMMukrsupTestPrint() + ::zgemmUkrSUPPrint() ); INSTANTIATE_TEST_SUITE_P ( bli_zgemmsup_cv_zen4_asm_2x3_col_stored_c, - ZGEMMUkrSUPTest, + zgemmUkrSUP, ::testing::Combine( - ::testing::Values(gtint_t(2)), // values of m - ::testing::Values(gtint_t(3)), // values of n - ::testing::Range(gtint_t(0), gtint_t(5), 1), // values of k + ::testing::Values(gtint_t(2)), // values of m + ::testing::Values(gtint_t(3)), // values of n + ::testing::Range(gtint_t(0), gtint_t(5), 1), // values of k ::testing::Values(dcomplex{0.0, 0.0}, dcomplex{1.0, 0.0}, dcomplex{-1.0, 0.0}, dcomplex{4.0, 0.0}, dcomplex{0.0, 18}, dcomplex{3.5, 4.5}), // alpha value ::testing::Values(dcomplex{0.0, 0.0}, dcomplex{1.0, 0.0}, dcomplex{-1.0, 0.0}, dcomplex{-5.0, 0.0}, dcomplex{0.0, 1}, dcomplex{-7.3, 6.7}), // beta value - ::testing::Values('c'), // storage of c - ::testing::Values(bli_zgemmsup_cv_zen4_asm_2x3), // zgemm_sup kernel - ::testing::Values('n'), // transa - ::testing::Values('n') // transb + ::testing::Values('c'), // storage of c + ::testing::Values(bli_zgemmsup_cv_zen4_asm_2x3), // zgemm_sup kernel + ::testing::Values('n'), // transa + ::testing::Values('n'), // transb + ::testing::Values(false, true) // is_memory_test ), - ::ZGEMMukrsupTestPrint() + ::zgemmUkrSUPPrint() ); INSTANTIATE_TEST_SUITE_P ( bli_zgemmsup_cv_zen4_asm_2x2_col_stored_c, - ZGEMMUkrSUPTest, + zgemmUkrSUP, ::testing::Combine( - ::testing::Values(gtint_t(2)), // values of m - ::testing::Values(gtint_t(2)), // values of n - ::testing::Range(gtint_t(0), gtint_t(9), 1), // values of k + ::testing::Values(gtint_t(2)), // values of m + ::testing::Values(gtint_t(2)), // values of n + ::testing::Range(gtint_t(0), gtint_t(9), 1), // values of k ::testing::Values(dcomplex{0.0, 0.0}, dcomplex{1.0, 0.0}, dcomplex{-1.0, 0.0}, dcomplex{4.0, 0.0}, dcomplex{0.0, -19}, dcomplex{3.5, 4.5}), // alpha value ::testing::Values(dcomplex{0.0, 0.0}, dcomplex{1.0, 0.0}, dcomplex{-1.0, 0.0}, dcomplex{-5.0, 0.0}, dcomplex{0.0, 9}, dcomplex{-7.3, 6.7}), // beta value - ::testing::Values('c'), // storage of c - ::testing::Values(bli_zgemmsup_cv_zen4_asm_2x2), // zgemm_sup kernel - ::testing::Values('n'), // transa - ::testing::Values('n') // transb + ::testing::Values('c'), // storage of c + ::testing::Values(bli_zgemmsup_cv_zen4_asm_2x2), // zgemm_sup kernel + ::testing::Values('n'), // transa + ::testing::Values('n'), // transb + ::testing::Values(false, true) // is_memory_test ), - ::ZGEMMukrsupTestPrint() + ::zgemmUkrSUPPrint() ); INSTANTIATE_TEST_SUITE_P ( bli_zgemmsup_cv_zen4_asm_2x1_col_stored_c, - ZGEMMUkrSUPTest, + zgemmUkrSUP, ::testing::Combine( - ::testing::Values(gtint_t(2)), // values of m - ::testing::Values(gtint_t(1)), // values of n - ::testing::Range(gtint_t(0), gtint_t(15), 1), // values of k + ::testing::Values(gtint_t(2)), // values of m + ::testing::Values(gtint_t(1)), // values of n + ::testing::Range(gtint_t(0), gtint_t(15), 1), // values of k ::testing::Values(dcomplex{0.0, 0.0}, dcomplex{1.0, 0.0}, dcomplex{-1.0, 0.0}, dcomplex{4.0, 0.0}, dcomplex{0.0, 9}, dcomplex{3.5, 4.5}), // alpha value ::testing::Values(dcomplex{0.0, 0.0}, dcomplex{1.0, 0.0}, dcomplex{-1.0, 0.0}, dcomplex{-5.0, 0.0}, dcomplex{0.0, -9}, dcomplex{-7.3, 6.7}), // beta value - ::testing::Values('c'), // storage of c - ::testing::Values(bli_zgemmsup_cv_zen4_asm_2x1), // zgemm_sup kernel - ::testing::Values('n'), // transa - ::testing::Values('n') // transb + ::testing::Values('c'), // storage of c + ::testing::Values(bli_zgemmsup_cv_zen4_asm_2x1), // zgemm_sup kernel + ::testing::Values('n'), // transa + ::testing::Values('n'), // transb + ::testing::Values(false, true) // is_memory_test ), - ::ZGEMMukrsupTestPrint() + ::zgemmUkrSUPPrint() ); INSTANTIATE_TEST_SUITE_P ( bli_zgemmsup_cv_zen4_asm_12x4m_row_stored_c, - ZGEMMUkrSUPTest, + zgemmUkrSUP, ::testing::Combine( - ::testing::Range(gtint_t(1), gtint_t(13), 1), // values of m - ::testing::Range(gtint_t(1), gtint_t(5), 1), // values of n - ::testing::Range(gtint_t(0), gtint_t(14), 1), // values of k + ::testing::Range(gtint_t(1), gtint_t(13), 1), // values of m + ::testing::Range(gtint_t(1), gtint_t(5), 1), // values of n + ::testing::Range(gtint_t(0), gtint_t(14), 1), // values of k ::testing::Values(dcomplex{0.0, 0.0}, dcomplex{1.0, 0.0}, dcomplex{-1.0, 0.0}, dcomplex{4.0, 0.0}, dcomplex{0.0, 7}, dcomplex{3.5, 4.5}), // alpha value ::testing::Values(dcomplex{0.0, 0.0}, dcomplex{1.0, 0.0}, dcomplex{-1.0, 0.0}, dcomplex{-5.0, 0.0}, dcomplex{0.0, -9}, dcomplex{-7.3, 6.7}), // beta value - ::testing::Values('r'), // storage of c - ::testing::Values(bli_zgemmsup_cv_zen4_asm_12x4m), // zgemm_sup kernel - ::testing::Values('t'), // transa - ::testing::Values('n') // transb + ::testing::Values('r'), // storage of c + ::testing::Values(bli_zgemmsup_cv_zen4_asm_12x4m), // zgemm_sup kernel + ::testing::Values('t'), // transa + ::testing::Values('n'), // transb + ::testing::Values(false, true) // is_memory_test ), - ::ZGEMMukrsupTestPrint() + ::zgemmUkrSUPPrint() ); INSTANTIATE_TEST_SUITE_P ( bli_zgemmsup_cv_zen4_asm_12x3m_row_stored_c, - ZGEMMUkrSUPTest, + zgemmUkrSUP, ::testing::Combine( - ::testing::Range(gtint_t(1), gtint_t(33), 1), // values of m - ::testing::Values(gtint_t(3)), // values of n - ::testing::Range(gtint_t(0), gtint_t(12), 1), // values of k + ::testing::Range(gtint_t(1), gtint_t(33), 1), // values of m + ::testing::Values(gtint_t(3)), // values of n + ::testing::Range(gtint_t(0), gtint_t(12), 1), // values of k ::testing::Values(dcomplex{0.0, 0.0}, dcomplex{1.0, 0.0}, dcomplex{-1.0, 0.0}, dcomplex{4.0, 0.0}, dcomplex{0.0, -9.7}, dcomplex{3.5, 4.5}), // alpha value ::testing::Values(dcomplex{0.0, 0.0}, dcomplex{1.0, 0.0}, dcomplex{-1.0, 0.0}, dcomplex{-5.0, 0.0}, dcomplex{0.0, 1.2}, dcomplex{-7.3, 6.7}), // beta value - ::testing::Values('r'), // storage of c - ::testing::Values(bli_zgemmsup_cv_zen4_asm_12x3m), // zgemm_sup kernel - ::testing::Values('t'), // transa - ::testing::Values('n') // transb + ::testing::Values('r'), // storage of c + ::testing::Values(bli_zgemmsup_cv_zen4_asm_12x3m), // zgemm_sup kernel + ::testing::Values('t'), // transa + ::testing::Values('n'), // transb + ::testing::Values(false, true) // is_memory_test ), - ::ZGEMMukrsupTestPrint() + ::zgemmUkrSUPPrint() ); INSTANTIATE_TEST_SUITE_P ( bli_zgemmsup_cv_zen4_asm_12x2m_row_stored_c, - ZGEMMUkrSUPTest, + zgemmUkrSUP, ::testing::Combine( - ::testing::Range(gtint_t(1), gtint_t(21), 1), // values of m - ::testing::Values(gtint_t(2)), // values of n - ::testing::Range(gtint_t(0), gtint_t(12), 1), // values of k + ::testing::Range(gtint_t(1), gtint_t(21), 1), // values of m + ::testing::Values(gtint_t(2)), // values of n + ::testing::Range(gtint_t(0), gtint_t(12), 1), // values of k ::testing::Values(dcomplex{0.0, 0.0}, dcomplex{1.0, 0.0}, dcomplex{-1.0, 0.0}, dcomplex{4.0, 0.0}, dcomplex{0.0, 1.4}, dcomplex{3.5, 4.5}), // alpha value ::testing::Values(dcomplex{0.0, 0.0}, dcomplex{1.0, 0.0}, dcomplex{-1.0, 0.0}, dcomplex{-5.0, 0.0}, dcomplex{0.0, 8.9}, dcomplex{-7.3, 6.7}), // beta value - ::testing::Values('r'), // storage of c - ::testing::Values(bli_zgemmsup_cv_zen4_asm_12x2m), // zgemm_sup kernel - ::testing::Values('t'), // transa - ::testing::Values('n') // transb + ::testing::Values('r'), // storage of c + ::testing::Values(bli_zgemmsup_cv_zen4_asm_12x2m), // zgemm_sup kernel + ::testing::Values('t'), // transa + ::testing::Values('n'), // transb + ::testing::Values(false, true) // is_memory_test ), - ::ZGEMMukrsupTestPrint() + ::zgemmUkrSUPPrint() ); INSTANTIATE_TEST_SUITE_P ( bli_zgemmsup_cv_zen4_asm_12x1m_row_stored_c, - ZGEMMUkrSUPTest, + zgemmUkrSUP, ::testing::Combine( - ::testing::Range(gtint_t(1), gtint_t(20), 1), // values of m - ::testing::Values(gtint_t(1)), // values of n - ::testing::Range(gtint_t(0), gtint_t(10), 1), // values of k + ::testing::Range(gtint_t(1), gtint_t(20), 1), // values of m + ::testing::Values(gtint_t(1)), // values of n + ::testing::Range(gtint_t(0), gtint_t(10), 1), // values of k ::testing::Values(dcomplex{0.0, 0.0}, dcomplex{1.0, 0.0}, dcomplex{-1.0, 0.0}, dcomplex{4.0, 0.0}, dcomplex{0.0, 9}, dcomplex{3.5, 4.5}), // alpha value ::testing::Values(dcomplex{0.0, 0.0}, dcomplex{1.0, 0.0}, dcomplex{-1.0, 0.0}, dcomplex{-5.0, 0.0}, dcomplex{0.0, 19}, dcomplex{-7.3, 6.7}), // beta value - ::testing::Values('r'), // storage of c - ::testing::Values(bli_zgemmsup_cv_zen4_asm_12x1m), // zgemm_sup kernel - ::testing::Values('t'), // transa - ::testing::Values('n') // transb + ::testing::Values('r'), // storage of c + ::testing::Values(bli_zgemmsup_cv_zen4_asm_12x1m), // zgemm_sup kernel + ::testing::Values('t'), // transa + ::testing::Values('n'), // transb + ::testing::Values(false, true) // is_memory_test ), - ::ZGEMMukrsupTestPrint() + ::zgemmUkrSUPPrint() ); #endif /*******************************************************/ /* Native Kernel testing */ /*******************************************************/ -class ZGEMMUkrNatTest : - public ::testing::TestWithParam> {}; -// k, alpha, beta, storage of c, m, n, zgemm native kernel +class zgemmUkrNat : + public ::testing::TestWithParam> {}; -GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST(ZGEMMUkrNatTest); -TEST_P(ZGEMMUkrNatTest, native_kernel_testing) +GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST(zgemmUkrNat); +TEST_P(zgemmUkrNat, MicroKernelTest) { using T = dcomplex; - gtint_t k = std::get<0>(GetParam()); // dimension k - T alpha = std::get<1>(GetParam()); // alpha - T beta = std::get<2>(GetParam()); // beta - char storage = std::get<3>(GetParam()); // indicates storage of all matrix operands + gtint_t k = std::get<0>(GetParam()); // dimension k + T alpha = std::get<1>(GetParam()); // alpha + T beta = std::get<2>(GetParam()); // beta + char storage = std::get<3>(GetParam()); // indicates storage of all matrix operands // Fix m and n to MR and NR respectively. - gtint_t m = std::get<4>(GetParam()); - gtint_t n = std::get<5>(GetParam()); - zgemm_ukr_ft kern_ptr = std::get<6>(GetParam()); - test_gemmnat_ukr(storage, m, n, k, alpha, beta, kern_ptr); + gtint_t m = std::get<4>(GetParam()); // m + gtint_t n = std::get<5>(GetParam()); // n + zgemm_ukr_ft kern_ptr = std::get<6>(GetParam()); // pointer to the gemm kernel + bool is_memory_test = std::get<7>(GetParam()); // is_memory_test + double thresh = 10 * (std::max(k,1)) * testinghelpers::getEpsilon(); // Set the threshold for the errors + + test_gemmnat_ukr(storage, m, n, k, alpha, beta, thresh, kern_ptr, is_memory_test); }// end of function -class ZGEMMukrnatTestPrint { +class zgemmUkrNativePrint { public: std::string operator()( - testing::TestParamInfo> str) const { + testing::TestParamInfo> str) const { gtint_t k = std::get<0>(str.param); dcomplex alpha = std::get<1>(str.param); dcomplex beta = std::get<2>(str.param); char storage = std::get<3>(str.param); - std::string str_name = "zgemmnat_ukr"; - str_name = str_name + "_" + std::to_string(k); - str_name = str_name + "_a" + testinghelpers::get_value_string(alpha); - str_name = str_name + "_b" + testinghelpers::get_value_string(beta); - str_name = str_name + "_" + storage; + bool is_memory_test = std::get<7>(str.param); + std::string str_name ; + + str_name = str_name + "StorageOfCMatrix_" + storage; + str_name = str_name + "_k_" + std::to_string(k); + str_name = str_name + "_alpha_" + testinghelpers::get_value_string(alpha); + str_name = str_name + "_beta_" + testinghelpers::get_value_string(beta); + str_name = str_name + (is_memory_test ? "_mem_test_enabled" : "_mem_test_disabled"); return str_name; } }; @@ -943,65 +1021,137 @@ public: #if defined(BLIS_KERNELS_ZEN4) && defined(GTEST_AVX512) INSTANTIATE_TEST_SUITE_P ( bli_zgemm_zen4_asm_12x4, - ZGEMMUkrNatTest, + zgemmUkrNat, ::testing::Combine( //Failure observed for this case zgemmnat_ukr_1_a0pi2_bm7pi6_r - ::testing::Range(gtint_t(0), gtint_t(15), 1), // values of k - ::testing::Values(dcomplex{0.0, 0.0}, dcomplex{1.0, 0.0}, dcomplex{-1.0, 0.0}, dcomplex{4.0, 0.0}, dcomplex{0.0, 2.3}, dcomplex{3.5, 4.5}), // alpha value + ::testing::Range(gtint_t(1), gtint_t(15), 1), // values of k + ::testing::Values(dcomplex{0.0, 0.0}, dcomplex{1.0, 0.0}, dcomplex{-1.0, 0.0}, dcomplex{4.0, 0.0}, dcomplex{0.0, 2.3}, dcomplex{3.5, 4.5}), // alpha value ::testing::Values(dcomplex{0.0, 0.0}, dcomplex{1.0, 0.0}, dcomplex{-1.0, 0.0}, dcomplex{-5.0, 0.0}, dcomplex{0.0, 1.0}, dcomplex{-3, 6.7}), // beta value - ::testing::Values('r', 'c'), // storage - ::testing::Values(12), // values of m - ::testing::Values(4), // values of n - ::testing::Values(bli_zgemm_zen4_asm_12x4) + ::testing::Values('r', 'c'), // storage + ::testing::Values(12), // values of m + ::testing::Values(4), // values of n + ::testing::Values(bli_zgemm_zen4_asm_12x4), // zgemm_nat kernel + ::testing::Values(false, true) // is_memory_test ), - ::ZGEMMukrnatTestPrint() + ::zgemmUkrNativePrint() +); + +// Memory test fails when k=0, hence below test validated when is_memory_test disabled +INSTANTIATE_TEST_SUITE_P ( + bli_zgemm_zen4_asm_12x4_k0, + zgemmUkrNat, + ::testing::Combine( //Failure observed for this case zgemmnat_ukr_1_a0pi2_bm7pi6_r + ::testing::Values(gtint_t(0)), // values of k + ::testing::Values(dcomplex{0.0, 0.0}, dcomplex{1.0, 0.0}, dcomplex{-1.0, 0.0}, dcomplex{4.0, 0.0}, dcomplex{0.0, 2.3}, dcomplex{3.5, 4.5}), // alpha value + ::testing::Values(dcomplex{0.0, 0.0}, dcomplex{1.0, 0.0}, dcomplex{-1.0, 0.0}, dcomplex{-5.0, 0.0}, dcomplex{0.0, 1.0}, dcomplex{-3, 6.7}), // beta value + ::testing::Values('r', 'c'), // storage + ::testing::Values(12), // values of m + ::testing::Values(4), // values of n + ::testing::Values(bli_zgemm_zen4_asm_12x4), // zgemm_nat kernel + ::testing::Values(false) // is_memory_test + ), + ::zgemmUkrNativePrint() ); /*Kernel reqired for trsm computation*/ INSTANTIATE_TEST_SUITE_P ( bli_zgemm_zen4_asm_4x12, - ZGEMMUkrNatTest, + zgemmUkrNat, ::testing::Combine( - ::testing::Range(gtint_t(0), gtint_t(10), 1), // values of k + ::testing::Range(gtint_t(1), gtint_t(10), 1), // values of k ::testing::Values(dcomplex{0.0, 0.0}, dcomplex{1.0, 0.0}, dcomplex{-1.0, 0.0}, dcomplex{4.0, 0.0}, dcomplex{0.0, 2.3}, dcomplex{3.5, 4.5}), // alpha value ::testing::Values(dcomplex{0.0, 0.0}, dcomplex{1.0, 0.0}, dcomplex{-1.0, 0.0}, dcomplex{-5.0, 0.0}, dcomplex{0.0, 3.3}, dcomplex{-7.3, 6.7}), // beta value - ::testing::Values('r', 'c'), // storage - ::testing::Values(4), // values of m - ::testing::Values(12), // values of n - ::testing::Values(bli_zgemm_zen4_asm_4x12) + ::testing::Values('r', 'c'), // storage + ::testing::Values(4), // values of m + ::testing::Values(12), // values of n + ::testing::Values(bli_zgemm_zen4_asm_4x12), // zgemm_nat kernel + ::testing::Values(false, true) // is_memory_test ), - ::ZGEMMukrnatTestPrint() + ::zgemmUkrNativePrint() +); + +// Memory test fails when k=0, hence below test validated when is_memory_test disabled +INSTANTIATE_TEST_SUITE_P ( + bli_zgemm_zen4_asm_4x12_k0, + zgemmUkrNat, + ::testing::Combine( + ::testing::Values(gtint_t(0)), // values of k + ::testing::Values(dcomplex{0.0, 0.0}, dcomplex{1.0, 0.0}, dcomplex{-1.0, 0.0}, dcomplex{4.0, 0.0}, dcomplex{0.0, 2.3}, dcomplex{3.5, 4.5}), // alpha value + ::testing::Values(dcomplex{0.0, 0.0}, dcomplex{1.0, 0.0}, dcomplex{-1.0, 0.0}, dcomplex{-5.0, 0.0}, dcomplex{0.0, 3.3}, dcomplex{-7.3, 6.7}), // beta value + ::testing::Values('r', 'c'), // storage + ::testing::Values(4), // values of m + ::testing::Values(12), // values of n + ::testing::Values(bli_zgemm_zen4_asm_4x12), // zgemm_nat kernel + ::testing::Values(false) // is_memory_test + ), + ::zgemmUkrNativePrint() ); #endif #if defined(BLIS_KERNELS_ZEN) && defined(GTEST_AVX2FMA3) INSTANTIATE_TEST_SUITE_P ( - bli_zgemm_zen_asm_3x4, - ZGEMMUkrNatTest, + bli_zgemm_haswell_asm_3x4, + zgemmUkrNat, ::testing::Combine( - ::testing::Range(gtint_t(0), gtint_t(20), 1), // values of k + ::testing::Range(gtint_t(1), gtint_t(20), 1), // values of k ::testing::Values(dcomplex{1.0, 0.0}, dcomplex{-1.0, 0.0}, dcomplex{4.0, 0.0}, dcomplex{0.0, -0.2}, dcomplex{3.5, 4.5}), // alpha value ::testing::Values(dcomplex{0.0, 0.0}, dcomplex{1.0, 0.0}, dcomplex{-1.0, 0.0}, dcomplex{-5.0, 0.0}, dcomplex{0.0, -2.1}, dcomplex{-7.3, 6.7}), // beta value - ::testing::Values('r', 'c'), // storage - ::testing::Values(3), // values of m - ::testing::Values(4), // values of n - ::testing::Values(bli_zgemm_haswell_asm_3x4) + ::testing::Values('r', 'c'), // storage + ::testing::Values(3), // values of m + ::testing::Values(4), // values of n + ::testing::Values(bli_zgemm_haswell_asm_3x4), // zgemm_nat kernel + ::testing::Values(false, true) // is_memory_test ), - ::ZGEMMukrnatTestPrint() + ::zgemmUkrNativePrint() +); + +// Memory test fails when k=0, hence below test validated when is_memory_test disabled +INSTANTIATE_TEST_SUITE_P ( + bli_zgemm_haswell_asm_3x4_k0, + zgemmUkrNat, + ::testing::Combine( + ::testing::Values(gtint_t(0)), // values of k + ::testing::Values(dcomplex{1.0, 0.0}, dcomplex{-1.0, 0.0}, dcomplex{4.0, 0.0}, dcomplex{0.0, -0.2}, dcomplex{3.5, 4.5}), // alpha value + ::testing::Values(dcomplex{0.0, 0.0}, dcomplex{1.0, 0.0}, dcomplex{-1.0, 0.0}, dcomplex{-5.0, 0.0}, dcomplex{0.0, -2.1}, dcomplex{-7.3, 6.7}), // beta value + ::testing::Values('r', 'c'), // storage + ::testing::Values(3), // values of m + ::testing::Values(4), // values of n + ::testing::Values(bli_zgemm_haswell_asm_3x4), // zgemm_nat kernel + ::testing::Values(false) // is_memory_test + ), + ::zgemmUkrNativePrint() ); /*Kernel reqired for trsm computation*/ INSTANTIATE_TEST_SUITE_P ( bli_zgemm_zen_asm_2x6, - ZGEMMUkrNatTest, + zgemmUkrNat, ::testing::Combine( - ::testing::Range(gtint_t(0), gtint_t(10), 1), // values of k + ::testing::Range(gtint_t(1), gtint_t(10), 1), // values of k ::testing::Values(dcomplex{0.0, 0.0}, dcomplex{1.0, 0.0}, dcomplex{-1.0, 0.0}, dcomplex{4.0, 0.0}, dcomplex{0.0, -0.3}, dcomplex{3.5, 4.5}), // alpha value ::testing::Values(dcomplex{0.0, 0.0}, dcomplex{1.0, 0.0}, dcomplex{-1.0, 0.0}, dcomplex{-5.0, 0.0}, dcomplex{0.0, -2.0}, dcomplex{-7.3, 6.7}), // beta value - ::testing::Values('r', 'c'), // storage - ::testing::Values(2), // values of m - ::testing::Values(6), // values of n - ::testing::Values(bli_zgemm_zen_asm_2x6) + ::testing::Values('r', 'c'), // storage + ::testing::Values(2), // values of m + ::testing::Values(6), // values of n + ::testing::Values(bli_zgemm_zen_asm_2x6), // zgemm_nat kernel + ::testing::Values(false, true) // is_memory_test ), - ::ZGEMMukrnatTestPrint() + ::zgemmUkrNativePrint() ); -#endif \ No newline at end of file + +// Memory test fails when k=0, hence below test validated when is_memory_test disabled +INSTANTIATE_TEST_SUITE_P ( + bli_zgemm_zen_asm_2x6_k0, + zgemmUkrNat, + ::testing::Combine( + ::testing::Values(gtint_t(0)), // values of k + ::testing::Values(dcomplex{0.0, 0.0}, dcomplex{1.0, 0.0}, dcomplex{-1.0, 0.0}, dcomplex{4.0, 0.0}, dcomplex{0.0, -0.3}, dcomplex{3.5, 4.5}), // alpha value + ::testing::Values(dcomplex{0.0, 0.0}, dcomplex{1.0, 0.0}, dcomplex{-1.0, 0.0}, dcomplex{-5.0, 0.0}, dcomplex{0.0, -2.0}, dcomplex{-7.3, 6.7}), // beta value + ::testing::Values('r', 'c'), // storage + ::testing::Values(2), // values of m + ::testing::Values(6), // values of n + ::testing::Values(bli_zgemm_zen_asm_2x6), // zgemm_nat kernel + ::testing::Values(false) // is_memory_test + ), + ::zgemmUkrNativePrint() +); +#endif