From 7b77c2bbd6a686802ea99cdff6eca7a1f4702751 Mon Sep 17 00:00:00 2001 From: Edward Smyth Date: Wed, 21 Aug 2024 09:33:30 -0400 Subject: [PATCH] GTestSuite: add option to test blis_impl layer Add BLAS_TEST_IMPL option for TEST_INTERFACE to test the wrapper layer underneath BLAS and CBLAS interfaces. This is particularly useful if building a BLIS library with these interfaces disabled, e.g. ./configure --disable-blas amdzen or cmake . -DENABLE_BLAS=OFF -DBLIS_CONFIG_FAMILY=amdzen The ?_blis_impl wrappers should have the same arguments as the BLAS interfaces, thus we define TEST_BLAS_LIKE as an additional definition for convenience when selecting tests and options in the C++ files. AMD-Internal: [CPUPL-5650] Change-Id: I0275a387563f3efc2b40029950c8569956f2df7b (cherry picked from commit 8d4881c4fd8a1ecd6b5ef4f115ee5de4b5d8e2fa) --- gtestsuite/CMakeLists.txt | 6 +- gtestsuite/README.md | 1 + gtestsuite/testinghelpers/CMakeLists.txt | 4 +- gtestsuite/testsuite/CMakeLists.txt | 4 +- .../extension/imatcopy/cimatcopy_evt.cpp | 2 +- .../extension/imatcopy/cimatcopy_generic.cpp | 2 +- .../extension/imatcopy/dimatcopy_evt.cpp | 2 +- .../extension/imatcopy/dimatcopy_generic.cpp | 2 +- .../testsuite/extension/imatcopy/imatcopy.h | 2 +- .../extension/imatcopy/imatcopy_IIT_ERS.cpp | 2 +- .../extension/imatcopy/simatcopy_evt.cpp | 2 +- .../extension/imatcopy/simatcopy_generic.cpp | 2 +- .../extension/imatcopy/zimatcopy_evt.cpp | 2 +- .../extension/imatcopy/zimatcopy_generic.cpp | 2 +- .../extension/omatcopy/comatcopy_evt.cpp | 2 +- .../extension/omatcopy/comatcopy_generic.cpp | 2 +- .../extension/omatcopy/domatcopy_evt.cpp | 2 +- .../extension/omatcopy/domatcopy_generic.cpp | 2 +- .../testsuite/extension/omatcopy/omatcopy.h | 2 +- .../extension/omatcopy/omatcopy_IIT_ERS.cpp | 2 +- .../extension/omatcopy/somatcopy_evt.cpp | 2 +- .../extension/omatcopy/somatcopy_generic.cpp | 2 +- .../extension/omatcopy/zomatcopy_evt.cpp | 2 +- .../extension/omatcopy/zomatcopy_generic.cpp | 2 +- .../extension/omatcopy2/comatcopy2_evt.cpp | 2 +- .../omatcopy2/comatcopy2_generic.cpp | 2 +- .../extension/omatcopy2/domatcopy2_evt.cpp | 2 +- .../omatcopy2/domatcopy2_generic.cpp | 2 +- .../testsuite/extension/omatcopy2/omatcopy2.h | 2 +- .../extension/omatcopy2/omatcopy2_IIT_ERS.cpp | 2 +- .../extension/omatcopy2/somatcopy2_evt.cpp | 2 +- .../omatcopy2/somatcopy2_generic.cpp | 2 +- .../extension/omatcopy2/zomatcopy2_evt.cpp | 2 +- .../omatcopy2/zomatcopy2_generic.cpp | 2 +- gtestsuite/testsuite/level1/addv/addv.h | 2 + gtestsuite/testsuite/level1/amaxv/amaxv.h | 22 ++ .../testsuite/level1/amaxv/amaxv_IIT_ERS.cpp | 86 +++---- gtestsuite/testsuite/level1/axpbyv/axpbyv.h | 17 ++ .../level1/axpbyv/axpbyv_IIT_ERS.cpp | 2 +- gtestsuite/testsuite/level1/axpyv/axpyv.h | 17 ++ .../testsuite/level1/axpyv/axpyv_IIT_ERS.cpp | 2 +- gtestsuite/testsuite/level1/copyv/copyv.h | 17 ++ .../testsuite/level1/copyv/copyv_IIT_ERS.cpp | 2 +- gtestsuite/testsuite/level1/dotv/dotv.h | 68 ++++++ .../testsuite/level1/dotv/dotv_IIT_ERS.cpp | 2 +- gtestsuite/testsuite/level1/dotxv/dotxv.h | 2 + gtestsuite/testsuite/level1/scal2v/scal2v.h | 4 +- gtestsuite/testsuite/level1/scalv/scalv.h | 25 +++ .../testsuite/level1/scalv/scalv_IIT_ERS.cpp | 2 +- gtestsuite/testsuite/level1/setv/setv.h | 2 + gtestsuite/testsuite/level1/subv/subv.h | 2 + gtestsuite/testsuite/level1/swapv/swapv.h | 18 ++ .../testsuite/level1/swapv/swapv_IIT_ERS.cpp | 2 +- gtestsuite/testsuite/level1/xpbyv/xpbyv.h | 2 + .../level2/gemv/IIT_ERS/gemv_IIT_ERS.cpp | 20 +- .../testsuite/level2/gemv/cgemv/cgemv_evt.cpp | 8 +- .../level2/gemv/cgemv/cgemv_generic.cpp | 16 +- .../testsuite/level2/gemv/dgemv/dgemv_evt.cpp | 8 +- .../level2/gemv/dgemv/dgemv_generic.cpp | 10 +- gtestsuite/testsuite/level2/gemv/gemv.h | 21 ++ .../testsuite/level2/gemv/sgemv/sgemv_evt.cpp | 8 +- .../level2/gemv/sgemv/sgemv_generic.cpp | 10 +- .../testsuite/level2/gemv/zgemv/zgemv_evt.cpp | 8 +- .../level2/gemv/zgemv/zgemv_generic.cpp | 10 +- gtestsuite/testsuite/level2/ger/cger_evt.cpp | 4 +- .../testsuite/level2/ger/cger_generic.cpp | 14 +- gtestsuite/testsuite/level2/ger/dger_evt.cpp | 4 +- .../testsuite/level2/ger/dger_generic.cpp | 12 +- gtestsuite/testsuite/level2/ger/ger.h | 29 +++ .../testsuite/level2/ger/ger_IIT_ERS.cpp | 30 +-- gtestsuite/testsuite/level2/ger/sger_evt.cpp | 4 +- .../testsuite/level2/ger/sger_generic.cpp | 14 +- gtestsuite/testsuite/level2/ger/zger_evt.cpp | 4 +- .../testsuite/level2/ger/zger_generic.cpp | 14 +- .../testsuite/level2/hemv/chemv_generic.cpp | 2 +- gtestsuite/testsuite/level2/hemv/hemv.h | 17 ++ .../testsuite/level2/hemv/zhemv_generic.cpp | 2 +- .../testsuite/level2/her/cher_generic.cpp | 2 +- gtestsuite/testsuite/level2/her/her.h | 17 ++ .../testsuite/level2/her/zher_generic.cpp | 2 +- .../testsuite/level2/her2/cher2_generic.cpp | 2 +- gtestsuite/testsuite/level2/her2/her2.h | 17 ++ .../testsuite/level2/her2/zher2_generic.cpp | 2 +- .../testsuite/level2/symv/dsymv_generic.cpp | 2 +- .../testsuite/level2/symv/ssymv_generic.cpp | 2 +- gtestsuite/testsuite/level2/symv/symv.h | 17 ++ .../testsuite/level2/syr/dsyr_generic.cpp | 2 +- .../testsuite/level2/syr/ssyr_generic.cpp | 2 +- gtestsuite/testsuite/level2/syr/syr.h | 17 ++ .../testsuite/level2/syr2/dsyr2_generic.cpp | 2 +- .../testsuite/level2/syr2/ssyr2_generic.cpp | 2 +- gtestsuite/testsuite/level2/syr2/syr2.h | 17 ++ .../testsuite/level2/trmv/ctrmv_generic.cpp | 2 +- .../testsuite/level2/trmv/dtrmv_generic.cpp | 2 +- .../testsuite/level2/trmv/strmv_generic.cpp | 2 +- gtestsuite/testsuite/level2/trmv/trmv.h | 26 ++- .../level2/trmv/trmv_IIT_ERS_test.cpp | 2 +- .../testsuite/level2/trmv/ztrmv_generic.cpp | 2 +- .../level2/trsv/IIT_ERS/trsv_IIT_ERS_test.cpp | 2 +- .../level2/trsv/ctrsv/ctrsv_generic.cpp | 2 +- .../testsuite/level2/trsv/dtrsv/dtrsv_evt.cpp | 2 +- .../level2/trsv/dtrsv/dtrsv_generic.cpp | 2 +- .../level2/trsv/strsv/strsv_generic.cpp | 2 +- gtestsuite/testsuite/level2/trsv/trsv.h | 26 ++- .../testsuite/level2/trsv/ztrsv/ztrsv_evt.cpp | 2 +- .../level2/trsv/ztrsv/ztrsv_generic.cpp | 2 +- .../level3/gemm/IIT_ERS/gemm_IIT_ERS.cpp | 26 +-- .../testsuite/level3/gemm/cgemm/cgemm_evt.cpp | 18 +- .../level3/gemm/cgemm/cgemm_generic.cpp | 12 +- .../testsuite/level3/gemm/dgemm/dgemm_evt.cpp | 16 +- gtestsuite/testsuite/level3/gemm/gemm.h | 22 +- .../testsuite/level3/gemm/sgemm/sgemm_evt.cpp | 10 +- .../level3/gemm/sgemm/sgemm_generic.cpp | 2 +- .../testsuite/level3/gemm/zgemm/zgemm_evt.cpp | 14 +- .../level3/gemm/zgemm/zgemm_generic.cpp | 18 +- .../gemm_compute/dgemm_compute_generic.cpp | 6 +- .../level3/gemm_compute/gemm_compute.h | 211 +++++++++++++++++- .../gemm_compute/gemm_compute_IIT_ERS.cpp | 26 +-- .../gemm_compute/sgemm_compute_generic.cpp | 6 +- .../testsuite/level3/gemmt/cgemmt_generic.cpp | 2 +- .../testsuite/level3/gemmt/dgemmt_evt.cpp | 2 +- .../testsuite/level3/gemmt/dgemmt_generic.cpp | 6 +- gtestsuite/testsuite/level3/gemmt/gemmt.h | 22 +- .../testsuite/level3/gemmt/gemmt_IIT_ERS.cpp | 20 +- .../testsuite/level3/gemmt/sgemmt_generic.cpp | 2 +- .../testsuite/level3/gemmt/zgemmt_generic.cpp | 2 +- .../testsuite/level3/hemm/chemm_generic.cpp | 2 +- gtestsuite/testsuite/level3/hemm/hemm.h | 18 +- .../testsuite/level3/hemm/zhemm_generic.cpp | 2 +- .../testsuite/level3/her2k/cher2k_generic.cpp | 2 +- gtestsuite/testsuite/level3/her2k/her2k.h | 18 +- .../testsuite/level3/her2k/zher2k_generic.cpp | 2 +- .../testsuite/level3/herk/cherk_generic.cpp | 2 +- gtestsuite/testsuite/level3/herk/herk.h | 17 ++ .../testsuite/level3/herk/zherk_generic.cpp | 2 +- .../testsuite/level3/symm/csymm_generic.cpp | 2 +- .../testsuite/level3/symm/dsymm_generic.cpp | 2 +- .../testsuite/level3/symm/ssymm_generic.cpp | 2 +- gtestsuite/testsuite/level3/symm/symm.h | 22 +- .../testsuite/level3/symm/zsymm_generic.cpp | 2 +- .../testsuite/level3/syr2k/csyr2k_generic.cpp | 2 +- .../testsuite/level3/syr2k/dsyr2k_generic.cpp | 2 +- .../testsuite/level3/syr2k/ssyr2k_generic.cpp | 2 +- gtestsuite/testsuite/level3/syr2k/syr2k.h | 22 +- .../testsuite/level3/syr2k/zsyr2k_generic.cpp | 2 +- .../testsuite/level3/syrk/csyrk_generic.cpp | 2 +- .../testsuite/level3/syrk/dsyrk_generic.cpp | 2 +- .../testsuite/level3/syrk/ssyrk_generic.cpp | 2 +- gtestsuite/testsuite/level3/syrk/syrk.h | 21 ++ .../testsuite/level3/syrk/zsyrk_generic.cpp | 2 +- .../testsuite/level3/trmm/ctrmm_generic.cpp | 2 +- .../testsuite/level3/trmm/dtrmm_generic.cpp | 2 +- .../testsuite/level3/trmm/strmm_generic.cpp | 2 +- gtestsuite/testsuite/level3/trmm/trmm.h | 22 +- .../testsuite/level3/trmm/ztrmm_generic.cpp | 2 +- gtestsuite/testsuite/level3/trmm3/trmm3.h | 4 +- .../level3/trsm/IIT_ERS/trsm_IIT_ERS.cpp | 22 +- .../testsuite/level3/trsm/ctrsm/ctrsm_evt.cpp | 2 +- .../level3/trsm/ctrsm/ctrsm_generic.cpp | 2 +- .../testsuite/level3/trsm/dtrsm/dtrsm_evt.cpp | 2 +- .../level3/trsm/dtrsm/dtrsm_generic.cpp | 2 +- .../testsuite/level3/trsm/strsm/strsm_evt.cpp | 4 +- .../level3/trsm/strsm/strsm_generic.cpp | 2 +- gtestsuite/testsuite/level3/trsm/trsm.h | 22 +- .../testsuite/level3/trsm/ztrsm/ztrsm_evt.cpp | 2 +- .../level3/trsm/ztrsm/ztrsm_generic.cpp | 2 +- gtestsuite/testsuite/util/asumv/asumv.h | 18 +- .../testsuite/util/asumv/asumv_IIT_ERS.cpp | 2 +- gtestsuite/testsuite/util/nrm2/nrm2.h | 16 ++ 169 files changed, 1185 insertions(+), 365 deletions(-) diff --git a/gtestsuite/CMakeLists.txt b/gtestsuite/CMakeLists.txt index f465554fb..6b1339570 100644 --- a/gtestsuite/CMakeLists.txt +++ b/gtestsuite/CMakeLists.txt @@ -132,10 +132,10 @@ endif() # Use TEST_INTERFACE to set which interface, supported by BLIS is meant to be tested. set(TEST_INTERFACE "BLAS" CACHE STRING "Interface of BLIS that is being tested.") # Set the possible values of interfaces for cmake-gui -set_property(CACHE TEST_INTERFACE PROPERTY STRINGS "BLAS" "CBLAS" "BLIS_TYPED") -if( NOT ((TEST_INTERFACE STREQUAL "BLAS") OR (TEST_INTERFACE STREQUAL "CBLAS") OR (TEST_INTERFACE STREQUAL "BLIS_TYPED")) ) +set_property(CACHE TEST_INTERFACE PROPERTY STRINGS "BLAS" "BLAS_BLIS_IMPL" "CBLAS" "BLIS_TYPED") +if( NOT ((TEST_INTERFACE STREQUAL "BLAS") OR (TEST_INTERFACE STREQUAL "BLAS_BLIS_IMPL") OR (TEST_INTERFACE STREQUAL "CBLAS") OR (TEST_INTERFACE STREQUAL "BLIS_TYPED")) ) message(FATAL_ERROR "TEST_INTERFACE option ${TEST_INTERFACE} is not supported. Please use on of the following options \ - during CMake invokation: BLAS, CBLAS, BLIS_TYPED") + during CMake invokation: BLAS, BLAS_BLIS_IMPL, CBLAS, BLIS_TYPED") endif() # Use BLIS_ELEMENT_TYPE to set whether the elements of any matrix/vector tested are integers or floating point values. diff --git a/gtestsuite/README.md b/gtestsuite/README.md index cb3b024e4..b36b47b8f 100644 --- a/gtestsuite/README.md +++ b/gtestsuite/README.md @@ -107,6 +107,7 @@ $ ASAN_OPTIONS=redzone=2048 ## BLIS Library Interface to be Tested * To build the testsuite using BLAS interface, configure using `-DTEST_INTERFACE=BLAS`. [**Default**] * To build the testsuite using CBLAS interface, configure using `-DTEST_INTERFACE=CBLAS`. +* To build the testsuite using BLAS_BLIS_IMPL wrapper layer (called underneath BLAS and CBLAS interfaces), configure using `-DTEST_INTERFACE=BLAS_BLIS_IMPL`. * To build the testsuite using BLIS-typed interface, configure using `-DTEST_INTERFACE=BLIS_TYPED`. Note that more tests are built for this option, due to the extended APIs. ## Test with upper case character arguments * To test with upper case character arguments, configure using `-DTEST_UPPERCASE_ARGS=ON`. [**OFF by default**] diff --git a/gtestsuite/testinghelpers/CMakeLists.txt b/gtestsuite/testinghelpers/CMakeLists.txt index 01fa43c43..78f459e3e 100644 --- a/gtestsuite/testinghelpers/CMakeLists.txt +++ b/gtestsuite/testinghelpers/CMakeLists.txt @@ -43,7 +43,9 @@ elseif(REF_CBLAS STREQUAL "OpenBLAS") target_compile_definitions(testinghelpers PUBLIC REF_IS_OPENBLAS) endif() if(TEST_INTERFACE STREQUAL "BLAS") - target_compile_definitions(testinghelpers PUBLIC TEST_BLAS) + target_compile_definitions(testinghelpers PUBLIC TEST_BLAS TEST_BLAS_LIKE) +elseif(TEST_INTERFACE STREQUAL "BLAS_BLIS_IMPL") + target_compile_definitions(testinghelpers PUBLIC TEST_BLAS_BLIS_IMPL TEST_BLAS_LIKE) elseif(TEST_INTERFACE STREQUAL "CBLAS") target_compile_definitions(testinghelpers PUBLIC TEST_CBLAS) else() # BLIS_TYPED option diff --git a/gtestsuite/testsuite/CMakeLists.txt b/gtestsuite/testsuite/CMakeLists.txt index ac43ef03b..8fc119737 100644 --- a/gtestsuite/testsuite/CMakeLists.txt +++ b/gtestsuite/testsuite/CMakeLists.txt @@ -127,7 +127,9 @@ foreach(dir ${test_files}) endif() target_link_libraries(${exec_name} ${ASAN_FLAGS} ${COVERAGE_FLAGS}) if(TEST_INTERFACE STREQUAL "BLAS") - target_compile_definitions(${exec_name} PUBLIC TEST_BLAS API_PRINT="blas") + target_compile_definitions(${exec_name} PUBLIC TEST_BLAS TEST_BLAS_LIKE API_PRINT="blas") + elseif(TEST_INTERFACE STREQUAL "BLAS_BLIS_IMPL") + target_compile_definitions(${exec_name} PUBLIC TEST_BLAS_BLIS_IMPL TEST_BLAS_LIKE API_PRINT="blas_blis_impl") elseif(TEST_INTERFACE STREQUAL "CBLAS") target_compile_definitions(${exec_name} PUBLIC TEST_CBLAS API_PRINT="cblas") else() # BLIS_TYPED option diff --git a/gtestsuite/testsuite/extension/imatcopy/cimatcopy_evt.cpp b/gtestsuite/testsuite/extension/imatcopy/cimatcopy_evt.cpp index 1b3eb5e5a..498bd9282 100644 --- a/gtestsuite/testsuite/extension/imatcopy/cimatcopy_evt.cpp +++ b/gtestsuite/testsuite/extension/imatcopy/cimatcopy_evt.cpp @@ -87,7 +87,7 @@ TEST_P( cimatcopyEVT, API ) test_imatcopy( storage, trans, m, n, alpha, lda_inc, ldb_inc, thresh, false, is_nan_inf_test, exval ); } -#if defined(TEST_BLAS) && (defined(REF_IS_MKL) || defined(REF_IS_OPENBLAS)) +#if defined(TEST_BLAS_LIKE) && (defined(REF_IS_MKL) || defined(REF_IS_OPENBLAS)) static float AOCL_NAN = std::numeric_limits::quiet_NaN(); static float AOCL_INF = std::numeric_limits::infinity(); diff --git a/gtestsuite/testsuite/extension/imatcopy/cimatcopy_generic.cpp b/gtestsuite/testsuite/extension/imatcopy/cimatcopy_generic.cpp index 6ddc129bd..7c99c045e 100644 --- a/gtestsuite/testsuite/extension/imatcopy/cimatcopy_generic.cpp +++ b/gtestsuite/testsuite/extension/imatcopy/cimatcopy_generic.cpp @@ -83,7 +83,7 @@ TEST_P( cimatcopyGeneric, API ) test_imatcopy( storage, trans, m, n, alpha, lda_in_inc, lda_out_inc, thresh, is_memory_test ); } -#if defined(TEST_BLAS) && (defined(REF_IS_MKL) || defined(REF_IS_OPENBLAS)) +#if defined(TEST_BLAS_LIKE) && (defined(REF_IS_MKL) || defined(REF_IS_OPENBLAS)) // Black box testing for generic and main use of cimatcopy. INSTANTIATE_TEST_SUITE_P( Blackbox, diff --git a/gtestsuite/testsuite/extension/imatcopy/dimatcopy_evt.cpp b/gtestsuite/testsuite/extension/imatcopy/dimatcopy_evt.cpp index 96afc0591..5960c266f 100644 --- a/gtestsuite/testsuite/extension/imatcopy/dimatcopy_evt.cpp +++ b/gtestsuite/testsuite/extension/imatcopy/dimatcopy_evt.cpp @@ -87,7 +87,7 @@ TEST_P( dimatcopyEVT, API ) test_imatcopy( storage, trans, m, n, alpha, lda_inc, ldb_inc, thresh, false, is_nan_inf_test, exval ); } -#if defined(TEST_BLAS) && (defined(REF_IS_MKL) || defined(REF_IS_OPENBLAS)) +#if defined(TEST_BLAS_LIKE) && (defined(REF_IS_MKL) || defined(REF_IS_OPENBLAS)) static double AOCL_NAN = std::numeric_limits::quiet_NaN(); static double AOCL_INF = std::numeric_limits::infinity(); diff --git a/gtestsuite/testsuite/extension/imatcopy/dimatcopy_generic.cpp b/gtestsuite/testsuite/extension/imatcopy/dimatcopy_generic.cpp index 35acce3f8..194bda90f 100644 --- a/gtestsuite/testsuite/extension/imatcopy/dimatcopy_generic.cpp +++ b/gtestsuite/testsuite/extension/imatcopy/dimatcopy_generic.cpp @@ -83,7 +83,7 @@ TEST_P( dimatcopyGeneric, API ) test_imatcopy( storage, trans, m, n, alpha, lda_in_inc, lda_out_inc, thresh, is_memory_test ); } -#if defined(TEST_BLAS) && (defined(REF_IS_MKL) || defined(REF_IS_OPENBLAS)) +#if defined(TEST_BLAS_LIKE) && (defined(REF_IS_MKL) || defined(REF_IS_OPENBLAS)) // Black box testing for generic and main use of dimatcopy. INSTANTIATE_TEST_SUITE_P( Blackbox, diff --git a/gtestsuite/testsuite/extension/imatcopy/imatcopy.h b/gtestsuite/testsuite/extension/imatcopy/imatcopy.h index 09195067a..b2d648d47 100644 --- a/gtestsuite/testsuite/extension/imatcopy/imatcopy.h +++ b/gtestsuite/testsuite/extension/imatcopy/imatcopy.h @@ -82,7 +82,7 @@ static void imatcopy( char trans, gtint_t m, gtint_t n, T alpha, T* A, gtint_t l gtint_t lda_out_cpy = lda_out; #endif -#ifdef TEST_BLAS +#ifdef TEST_BLAS_LIKE imatcopy_( trans, m, n, alpha, A, lda_in, lda_out ); #else throw std::runtime_error("Error in testsuite/level1/imatcopy.h: No interfaces are set to be tested."); diff --git a/gtestsuite/testsuite/extension/imatcopy/imatcopy_IIT_ERS.cpp b/gtestsuite/testsuite/extension/imatcopy/imatcopy_IIT_ERS.cpp index 6211d24d7..20af12326 100644 --- a/gtestsuite/testsuite/extension/imatcopy/imatcopy_IIT_ERS.cpp +++ b/gtestsuite/testsuite/extension/imatcopy/imatcopy_IIT_ERS.cpp @@ -45,7 +45,7 @@ TYPED_TEST_SUITE(imatcopy_IIT_ERS, TypeParam); using namespace testinghelpers::IIT; -#if defined(TEST_BLAS) +#if defined(TEST_BLAS_LIKE) /* Incorrect Input Testing(IIT) diff --git a/gtestsuite/testsuite/extension/imatcopy/simatcopy_evt.cpp b/gtestsuite/testsuite/extension/imatcopy/simatcopy_evt.cpp index 2a7c9cc08..255cf8914 100644 --- a/gtestsuite/testsuite/extension/imatcopy/simatcopy_evt.cpp +++ b/gtestsuite/testsuite/extension/imatcopy/simatcopy_evt.cpp @@ -87,7 +87,7 @@ TEST_P( simatcopyEVT, API ) test_imatcopy( storage, trans, m, n, alpha, lda_inc, ldb_inc, thresh, false, is_nan_inf_test, exval ); } -#if defined(TEST_BLAS) && (defined(REF_IS_MKL) || defined(REF_IS_OPENBLAS)) +#if defined(TEST_BLAS_LIKE) && (defined(REF_IS_MKL) || defined(REF_IS_OPENBLAS)) static float AOCL_NAN = std::numeric_limits::quiet_NaN(); static float AOCL_INF = std::numeric_limits::infinity(); diff --git a/gtestsuite/testsuite/extension/imatcopy/simatcopy_generic.cpp b/gtestsuite/testsuite/extension/imatcopy/simatcopy_generic.cpp index e071d0550..91d011071 100644 --- a/gtestsuite/testsuite/extension/imatcopy/simatcopy_generic.cpp +++ b/gtestsuite/testsuite/extension/imatcopy/simatcopy_generic.cpp @@ -83,7 +83,7 @@ TEST_P( simatcopyGeneric, API ) test_imatcopy( storage, trans, m, n, alpha, lda_in_inc, lda_out_inc, thresh, is_memory_test ); } -#if defined(TEST_BLAS) && (defined(REF_IS_MKL) || defined(REF_IS_OPENBLAS)) +#if defined(TEST_BLAS_LIKE) && (defined(REF_IS_MKL) || defined(REF_IS_OPENBLAS)) // Black box testing for generic and main use of simatcopy. INSTANTIATE_TEST_SUITE_P( Blackbox, diff --git a/gtestsuite/testsuite/extension/imatcopy/zimatcopy_evt.cpp b/gtestsuite/testsuite/extension/imatcopy/zimatcopy_evt.cpp index 60835f764..661f366ad 100644 --- a/gtestsuite/testsuite/extension/imatcopy/zimatcopy_evt.cpp +++ b/gtestsuite/testsuite/extension/imatcopy/zimatcopy_evt.cpp @@ -87,7 +87,7 @@ TEST_P( zimatcopyEVT, API ) test_imatcopy( storage, trans, m, n, alpha, lda_inc, ldb_inc, thresh, false, is_nan_inf_test, exval ); } -#if defined(TEST_BLAS) && (defined(REF_IS_MKL) || defined(REF_IS_OPENBLAS)) +#if defined(TEST_BLAS_LIKE) && (defined(REF_IS_MKL) || defined(REF_IS_OPENBLAS)) static double AOCL_NAN = std::numeric_limits::quiet_NaN(); static double AOCL_INF = std::numeric_limits::infinity(); diff --git a/gtestsuite/testsuite/extension/imatcopy/zimatcopy_generic.cpp b/gtestsuite/testsuite/extension/imatcopy/zimatcopy_generic.cpp index 28e58c87e..35a354c29 100644 --- a/gtestsuite/testsuite/extension/imatcopy/zimatcopy_generic.cpp +++ b/gtestsuite/testsuite/extension/imatcopy/zimatcopy_generic.cpp @@ -83,7 +83,7 @@ TEST_P( zimatcopyGeneric, API ) test_imatcopy( storage, trans, m, n, alpha, lda_in_inc, lda_out_inc, thresh, is_memory_test ); } -#if defined(TEST_BLAS) && (defined(REF_IS_MKL) || defined(REF_IS_OPENBLAS)) +#if defined(TEST_BLAS_LIKE) && (defined(REF_IS_MKL) || defined(REF_IS_OPENBLAS)) // Black box testing for generic and main use of zimatcopy. INSTANTIATE_TEST_SUITE_P( Blackbox, diff --git a/gtestsuite/testsuite/extension/omatcopy/comatcopy_evt.cpp b/gtestsuite/testsuite/extension/omatcopy/comatcopy_evt.cpp index dcba659ad..85c841aaa 100644 --- a/gtestsuite/testsuite/extension/omatcopy/comatcopy_evt.cpp +++ b/gtestsuite/testsuite/extension/omatcopy/comatcopy_evt.cpp @@ -87,7 +87,7 @@ TEST_P( comatcopyEVT, API ) test_omatcopy( storage, trans, m, n, alpha, lda_inc, ldb_inc, thresh, false, is_nan_inf_test, exval ); } -#if defined(TEST_BLAS) && (defined(REF_IS_MKL) || defined(REF_IS_OPENBLAS)) +#if defined(TEST_BLAS_LIKE) && (defined(REF_IS_MKL) || defined(REF_IS_OPENBLAS)) static float AOCL_NAN = std::numeric_limits::quiet_NaN(); static float AOCL_INF = std::numeric_limits::infinity(); diff --git a/gtestsuite/testsuite/extension/omatcopy/comatcopy_generic.cpp b/gtestsuite/testsuite/extension/omatcopy/comatcopy_generic.cpp index 155e93749..022446b67 100644 --- a/gtestsuite/testsuite/extension/omatcopy/comatcopy_generic.cpp +++ b/gtestsuite/testsuite/extension/omatcopy/comatcopy_generic.cpp @@ -83,7 +83,7 @@ TEST_P( comatcopyGeneric, API ) test_omatcopy( storage, trans, m, n, alpha, lda_inc, ldb_inc, thresh, is_memory_test ); } -#if defined(TEST_BLAS) && (defined(REF_IS_MKL) || defined(REF_IS_OPENBLAS)) +#if defined(TEST_BLAS_LIKE) && (defined(REF_IS_MKL) || defined(REF_IS_OPENBLAS)) // Black box testing for generic and main use of comatcopy. INSTANTIATE_TEST_SUITE_P( Blackbox, diff --git a/gtestsuite/testsuite/extension/omatcopy/domatcopy_evt.cpp b/gtestsuite/testsuite/extension/omatcopy/domatcopy_evt.cpp index 4c675894c..5556db781 100644 --- a/gtestsuite/testsuite/extension/omatcopy/domatcopy_evt.cpp +++ b/gtestsuite/testsuite/extension/omatcopy/domatcopy_evt.cpp @@ -87,7 +87,7 @@ TEST_P( domatcopyEVT, API ) test_omatcopy( storage, trans, m, n, alpha, lda_inc, ldb_inc, thresh, false, is_nan_inf_test, exval ); } -#if defined(TEST_BLAS) && (defined(REF_IS_MKL) || defined(REF_IS_OPENBLAS)) +#if defined(TEST_BLAS_LIKE) && (defined(REF_IS_MKL) || defined(REF_IS_OPENBLAS)) static double AOCL_NAN = std::numeric_limits::quiet_NaN(); static double AOCL_INF = std::numeric_limits::infinity(); diff --git a/gtestsuite/testsuite/extension/omatcopy/domatcopy_generic.cpp b/gtestsuite/testsuite/extension/omatcopy/domatcopy_generic.cpp index b19873930..6a3eb7a4f 100644 --- a/gtestsuite/testsuite/extension/omatcopy/domatcopy_generic.cpp +++ b/gtestsuite/testsuite/extension/omatcopy/domatcopy_generic.cpp @@ -83,7 +83,7 @@ TEST_P( domatcopyGeneric, API ) test_omatcopy( storage, trans, m, n, alpha, lda_inc, ldb_inc, thresh, is_memory_test ); } -#if defined(TEST_BLAS) && (defined(REF_IS_MKL) || defined(REF_IS_OPENBLAS)) +#if defined(TEST_BLAS_LIKE) && (defined(REF_IS_MKL) || defined(REF_IS_OPENBLAS)) // Black box testing for generic and main use of domatcopy. INSTANTIATE_TEST_SUITE_P( Blackbox, diff --git a/gtestsuite/testsuite/extension/omatcopy/omatcopy.h b/gtestsuite/testsuite/extension/omatcopy/omatcopy.h index d7f1168cd..56792b5e8 100644 --- a/gtestsuite/testsuite/extension/omatcopy/omatcopy.h +++ b/gtestsuite/testsuite/extension/omatcopy/omatcopy.h @@ -93,7 +93,7 @@ static void omatcopy( char trans, gtint_t m, gtint_t n, T alpha, T* A, gtint_t l } #endif -#ifdef TEST_BLAS +#ifdef TEST_BLAS_LIKE omatcopy_( trans, m, n, alpha, A, lda, B, ldb ); #else throw std::runtime_error("Error in testsuite/extension/omatcopy.h: No interfaces are set to be tested."); diff --git a/gtestsuite/testsuite/extension/omatcopy/omatcopy_IIT_ERS.cpp b/gtestsuite/testsuite/extension/omatcopy/omatcopy_IIT_ERS.cpp index 611a891b7..b0c47ef9c 100644 --- a/gtestsuite/testsuite/extension/omatcopy/omatcopy_IIT_ERS.cpp +++ b/gtestsuite/testsuite/extension/omatcopy/omatcopy_IIT_ERS.cpp @@ -45,7 +45,7 @@ TYPED_TEST_SUITE(omatcopy_IIT_ERS, TypeParam); using namespace testinghelpers::IIT; -#if defined(TEST_BLAS) +#if defined(TEST_BLAS_LIKE) /* Incorrect Input Testing(IIT) diff --git a/gtestsuite/testsuite/extension/omatcopy/somatcopy_evt.cpp b/gtestsuite/testsuite/extension/omatcopy/somatcopy_evt.cpp index 3fed6c04b..5ff4b59a0 100644 --- a/gtestsuite/testsuite/extension/omatcopy/somatcopy_evt.cpp +++ b/gtestsuite/testsuite/extension/omatcopy/somatcopy_evt.cpp @@ -87,7 +87,7 @@ TEST_P( somatcopyEVT, API ) test_omatcopy( storage, trans, m, n, alpha, lda_inc, ldb_inc, thresh, false, is_nan_inf_test, exval ); } -#if defined(TEST_BLAS) && (defined(REF_IS_MKL) || defined(REF_IS_OPENBLAS)) +#if defined(TEST_BLAS_LIKE) && (defined(REF_IS_MKL) || defined(REF_IS_OPENBLAS)) static float AOCL_NAN = std::numeric_limits::quiet_NaN(); static float AOCL_INF = std::numeric_limits::infinity(); diff --git a/gtestsuite/testsuite/extension/omatcopy/somatcopy_generic.cpp b/gtestsuite/testsuite/extension/omatcopy/somatcopy_generic.cpp index 8755180fa..b74fab5d1 100644 --- a/gtestsuite/testsuite/extension/omatcopy/somatcopy_generic.cpp +++ b/gtestsuite/testsuite/extension/omatcopy/somatcopy_generic.cpp @@ -83,7 +83,7 @@ TEST_P( somatcopyGeneric, API ) test_omatcopy( storage, trans, m, n, alpha, lda_inc, ldb_inc, thresh, is_memory_test ); } -#if defined(TEST_BLAS) && (defined(REF_IS_MKL) || defined(REF_IS_OPENBLAS)) +#if defined(TEST_BLAS_LIKE) && (defined(REF_IS_MKL) || defined(REF_IS_OPENBLAS)) // Black box testing for generic and main use of somatcopy. INSTANTIATE_TEST_SUITE_P( Blackbox, diff --git a/gtestsuite/testsuite/extension/omatcopy/zomatcopy_evt.cpp b/gtestsuite/testsuite/extension/omatcopy/zomatcopy_evt.cpp index 02ff17435..a4aa1f549 100644 --- a/gtestsuite/testsuite/extension/omatcopy/zomatcopy_evt.cpp +++ b/gtestsuite/testsuite/extension/omatcopy/zomatcopy_evt.cpp @@ -87,7 +87,7 @@ TEST_P( zomatcopyEVT, API ) test_omatcopy( storage, trans, m, n, alpha, lda_inc, ldb_inc, thresh, false, is_nan_inf_test, exval ); } -#if defined(TEST_BLAS) && (defined(REF_IS_MKL) || defined(REF_IS_OPENBLAS)) +#if defined(TEST_BLAS_LIKE) && (defined(REF_IS_MKL) || defined(REF_IS_OPENBLAS)) static double AOCL_NAN = std::numeric_limits::quiet_NaN(); static double AOCL_INF = std::numeric_limits::infinity(); diff --git a/gtestsuite/testsuite/extension/omatcopy/zomatcopy_generic.cpp b/gtestsuite/testsuite/extension/omatcopy/zomatcopy_generic.cpp index 434ccf99b..41409094a 100644 --- a/gtestsuite/testsuite/extension/omatcopy/zomatcopy_generic.cpp +++ b/gtestsuite/testsuite/extension/omatcopy/zomatcopy_generic.cpp @@ -83,7 +83,7 @@ TEST_P( zomatcopyGeneric, API ) test_omatcopy( storage, trans, m, n, alpha, lda_inc, ldb_inc, thresh, is_memory_test ); } -#if defined(TEST_BLAS) && (defined(REF_IS_MKL) || defined(REF_IS_OPENBLAS)) +#if defined(TEST_BLAS_LIKE) && (defined(REF_IS_MKL) || defined(REF_IS_OPENBLAS)) // Black box testing for generic and main use of zomatcopy. INSTANTIATE_TEST_SUITE_P( Blackbox, diff --git a/gtestsuite/testsuite/extension/omatcopy2/comatcopy2_evt.cpp b/gtestsuite/testsuite/extension/omatcopy2/comatcopy2_evt.cpp index 15c12ec03..e4862e431 100644 --- a/gtestsuite/testsuite/extension/omatcopy2/comatcopy2_evt.cpp +++ b/gtestsuite/testsuite/extension/omatcopy2/comatcopy2_evt.cpp @@ -93,7 +93,7 @@ TEST_P( comatcopy2EVT, API ) test_omatcopy2( storage, trans, m, n, alpha, lda_inc, stridea, ldb_inc, strideb, thresh, false, is_nan_inf_test, exval ); } -#if defined(TEST_BLAS) && defined(REF_IS_MKL) +#if defined(TEST_BLAS_LIKE) && defined(REF_IS_MKL) static float AOCL_NAN = std::numeric_limits::quiet_NaN(); static float AOCL_INF = std::numeric_limits::infinity(); diff --git a/gtestsuite/testsuite/extension/omatcopy2/comatcopy2_generic.cpp b/gtestsuite/testsuite/extension/omatcopy2/comatcopy2_generic.cpp index 9945f6c17..4e0b20806 100644 --- a/gtestsuite/testsuite/extension/omatcopy2/comatcopy2_generic.cpp +++ b/gtestsuite/testsuite/extension/omatcopy2/comatcopy2_generic.cpp @@ -89,7 +89,7 @@ TEST_P( comatcopy2Generic, API ) test_omatcopy2( storage, trans, m, n, alpha, lda_inc, stridea, ldb_inc, strideb, thresh, is_memory_test ); } -#if defined(TEST_BLAS) && defined(REF_IS_MKL) +#if defined(TEST_BLAS_LIKE) && defined(REF_IS_MKL) // Black box testing for generic and main use of comatcopy2. INSTANTIATE_TEST_SUITE_P( Blackbox, diff --git a/gtestsuite/testsuite/extension/omatcopy2/domatcopy2_evt.cpp b/gtestsuite/testsuite/extension/omatcopy2/domatcopy2_evt.cpp index c7c9344ff..cbff6377f 100644 --- a/gtestsuite/testsuite/extension/omatcopy2/domatcopy2_evt.cpp +++ b/gtestsuite/testsuite/extension/omatcopy2/domatcopy2_evt.cpp @@ -93,7 +93,7 @@ TEST_P( domatcopy2EVT, API ) test_omatcopy2( storage, trans, m, n, alpha, lda_inc, stridea, ldb_inc, strideb, thresh, false, is_nan_inf_test, exval ); } -#if defined(TEST_BLAS) && defined(REF_IS_MKL) +#if defined(TEST_BLAS_LIKE) && defined(REF_IS_MKL) static double AOCL_NAN = std::numeric_limits::quiet_NaN(); static double AOCL_INF = std::numeric_limits::infinity(); diff --git a/gtestsuite/testsuite/extension/omatcopy2/domatcopy2_generic.cpp b/gtestsuite/testsuite/extension/omatcopy2/domatcopy2_generic.cpp index 182dd1a8b..3869e6a83 100644 --- a/gtestsuite/testsuite/extension/omatcopy2/domatcopy2_generic.cpp +++ b/gtestsuite/testsuite/extension/omatcopy2/domatcopy2_generic.cpp @@ -89,7 +89,7 @@ TEST_P( domatcopy2Generic, API ) test_omatcopy2( storage, trans, m, n, alpha, lda_inc, stridea, ldb_inc, strideb, thresh, is_memory_test ); } -#if defined(TEST_BLAS) && defined(REF_IS_MKL) +#if defined(TEST_BLAS_LIKE) && defined(REF_IS_MKL) // Black box testing for generic and main use of domatcopy2. INSTANTIATE_TEST_SUITE_P( Blackbox, diff --git a/gtestsuite/testsuite/extension/omatcopy2/omatcopy2.h b/gtestsuite/testsuite/extension/omatcopy2/omatcopy2.h index 631488ef0..4ff6c226e 100644 --- a/gtestsuite/testsuite/extension/omatcopy2/omatcopy2.h +++ b/gtestsuite/testsuite/extension/omatcopy2/omatcopy2.h @@ -96,7 +96,7 @@ static void omatcopy2( char trans, gtint_t m, gtint_t n, T alpha, T* A, gtint_t } #endif -#ifdef TEST_BLAS +#ifdef TEST_BLAS_LIKE omatcopy2_( trans, m, n, alpha, A, lda, stridea, B, ldb, strideb ); #else throw std::runtime_error("Error in testsuite/extension/omatcopy2.h: No interfaces are set to be tested."); diff --git a/gtestsuite/testsuite/extension/omatcopy2/omatcopy2_IIT_ERS.cpp b/gtestsuite/testsuite/extension/omatcopy2/omatcopy2_IIT_ERS.cpp index a8a714c4d..0b7d9c108 100644 --- a/gtestsuite/testsuite/extension/omatcopy2/omatcopy2_IIT_ERS.cpp +++ b/gtestsuite/testsuite/extension/omatcopy2/omatcopy2_IIT_ERS.cpp @@ -45,7 +45,7 @@ TYPED_TEST_SUITE(omatcopy2_IIT_ERS, TypeParam); using namespace testinghelpers::IIT; -#if defined(TEST_BLAS) +#if defined(TEST_BLAS_LIKE) /* Incorrect Input Testing(IIT) diff --git a/gtestsuite/testsuite/extension/omatcopy2/somatcopy2_evt.cpp b/gtestsuite/testsuite/extension/omatcopy2/somatcopy2_evt.cpp index 19d60e989..680db3bc9 100644 --- a/gtestsuite/testsuite/extension/omatcopy2/somatcopy2_evt.cpp +++ b/gtestsuite/testsuite/extension/omatcopy2/somatcopy2_evt.cpp @@ -93,7 +93,7 @@ TEST_P( somatcopy2EVT, API ) test_omatcopy2( storage, trans, m, n, alpha, lda_inc, stridea, ldb_inc, strideb, thresh, false, is_nan_inf_test, exval ); } -#if defined(TEST_BLAS) && defined(REF_IS_MKL) +#if defined(TEST_BLAS_LIKE) && defined(REF_IS_MKL) static float AOCL_NAN = std::numeric_limits::quiet_NaN(); static float AOCL_INF = std::numeric_limits::infinity(); diff --git a/gtestsuite/testsuite/extension/omatcopy2/somatcopy2_generic.cpp b/gtestsuite/testsuite/extension/omatcopy2/somatcopy2_generic.cpp index 6a4c30470..38d425840 100644 --- a/gtestsuite/testsuite/extension/omatcopy2/somatcopy2_generic.cpp +++ b/gtestsuite/testsuite/extension/omatcopy2/somatcopy2_generic.cpp @@ -89,7 +89,7 @@ TEST_P( somatcopy2Generic, API ) test_omatcopy2( storage, trans, m, n, alpha, lda_inc, stridea, ldb_inc, strideb, thresh, is_memory_test ); } -#if defined(TEST_BLAS) && defined(REF_IS_MKL) +#if defined(TEST_BLAS_LIKE) && defined(REF_IS_MKL) // Black box testing for generic and main use of somatcopy2. INSTANTIATE_TEST_SUITE_P( Blackbox, diff --git a/gtestsuite/testsuite/extension/omatcopy2/zomatcopy2_evt.cpp b/gtestsuite/testsuite/extension/omatcopy2/zomatcopy2_evt.cpp index bb5b69c8f..47b38a078 100644 --- a/gtestsuite/testsuite/extension/omatcopy2/zomatcopy2_evt.cpp +++ b/gtestsuite/testsuite/extension/omatcopy2/zomatcopy2_evt.cpp @@ -93,7 +93,7 @@ TEST_P( zomatcopy2EVT, API ) test_omatcopy2( storage, trans, m, n, alpha, lda_inc, stridea, ldb_inc, strideb, thresh, false, is_nan_inf_test, exval ); } -#if defined(TEST_BLAS) && defined(REF_IS_MKL) +#if defined(TEST_BLAS_LIKE) && defined(REF_IS_MKL) static float AOCL_NAN = std::numeric_limits::quiet_NaN(); static float AOCL_INF = std::numeric_limits::infinity(); diff --git a/gtestsuite/testsuite/extension/omatcopy2/zomatcopy2_generic.cpp b/gtestsuite/testsuite/extension/omatcopy2/zomatcopy2_generic.cpp index 09b0fedb2..19fa29e49 100644 --- a/gtestsuite/testsuite/extension/omatcopy2/zomatcopy2_generic.cpp +++ b/gtestsuite/testsuite/extension/omatcopy2/zomatcopy2_generic.cpp @@ -89,7 +89,7 @@ TEST_P( zomatcopy2Generic, API ) test_omatcopy2( storage, trans, m, n, alpha, lda_inc, stridea, ldb_inc, strideb, thresh, is_memory_test ); } -#if defined(TEST_BLAS) && defined(REF_IS_MKL) +#if defined(TEST_BLAS_LIKE) && defined(REF_IS_MKL) // Black box testing for generic and main use of zomatcopy2. INSTANTIATE_TEST_SUITE_P( Blackbox, diff --git a/gtestsuite/testsuite/level1/addv/addv.h b/gtestsuite/testsuite/level1/addv/addv.h index 721cbe7b6..825ea014d 100644 --- a/gtestsuite/testsuite/level1/addv/addv.h +++ b/gtestsuite/testsuite/level1/addv/addv.h @@ -94,6 +94,8 @@ static void addv(char conjx, gtint_t n, T* x, gtint_t incx, T* y, gtint_t incy) #ifdef TEST_BLAS throw std::runtime_error("Error in testsuite/level1/addv.h: BLAS interface is not available."); +#elif TEST_BLAS_BLIS_IMPL + throw std::runtime_error("Error in testsuite/level1/addv.h: BLAS_BLIS_IMPL interface is not available."); #elif TEST_CBLAS throw std::runtime_error("Error in testsuite/level1/addv.h: CBLAS interface is not available."); #elif TEST_BLIS_TYPED diff --git a/gtestsuite/testsuite/level1/amaxv/amaxv.h b/gtestsuite/testsuite/level1/amaxv/amaxv.h index 2669c6f49..74e487c04 100644 --- a/gtestsuite/testsuite/level1/amaxv/amaxv.h +++ b/gtestsuite/testsuite/level1/amaxv/amaxv.h @@ -66,6 +66,24 @@ static gtint_t amaxv_(gtint_t n, T* x, gtint_t incx) { return idx; } +template +static gtint_t amaxv_blis_impl(gtint_t n, T* x, gtint_t incx) { + + gtint_t idx; + if constexpr (std::is_same::value) + idx = isamax_blis_impl( &n, x, &incx ); + else if constexpr (std::is_same::value) + idx = idamax_blis_impl( &n, x, &incx ); + else if constexpr (std::is_same::value) + idx = icamax_blis_impl( &n, x, &incx ); + else if constexpr (std::is_same::value) + idx = izamax_blis_impl( &n, x, &incx ); + else + throw std::runtime_error("Error in testsuite/level1/amaxv.h: Invalid typename in amaxv_blis_impl()."); + + return idx; +} + template static gtint_t cblas_amaxv(gtint_t n, T* x, gtint_t incx) { @@ -125,6 +143,10 @@ static gtint_t amaxv(gtint_t n, T* x, gtint_t incx) // Since we would be comparing against CBLAS which is 0-based and BLAS // which is 1-based, we need decrement the result of BLAS call by 1. return ( amaxv_(n, x, incx) - 1 ); +#elif TEST_BLAS_BLIS_IMPL + // Since we would be comparing against CBLAS which is 0-based and BLAS + // which is 1-based, we need decrement the result of BLAS call by 1. + return ( amaxv_blis_impl(n, x, incx) - 1 ); #elif TEST_CBLAS return cblas_amaxv(n, x, incx); #elif TEST_BLIS_TYPED diff --git a/gtestsuite/testsuite/level1/amaxv/amaxv_IIT_ERS.cpp b/gtestsuite/testsuite/level1/amaxv/amaxv_IIT_ERS.cpp index 378e989c7..0272ddd33 100644 --- a/gtestsuite/testsuite/level1/amaxv/amaxv_IIT_ERS.cpp +++ b/gtestsuite/testsuite/level1/amaxv/amaxv_IIT_ERS.cpp @@ -40,13 +40,13 @@ #include "inc/check_error.h" template -class amaxv_IIT_ERS : public ::testing::Test {}; +class amaxvIIT_ERS : public ::testing::Test {}; typedef ::testing::Types TypeParam; -TYPED_TEST_SUITE(amaxv_IIT_ERS, TypeParam); +TYPED_TEST_SUITE(amaxvIIT_ERS, TypeParam); using namespace testinghelpers::IIT; -#if defined(TEST_BLAS) || defined(TEST_CBLAS) +#if defined(TEST_BLAS_LIKE) || defined(TEST_CBLAS) /* Early Return Scenarios(ERS) for BLAS/CBLAS compliance : @@ -65,7 +65,7 @@ using namespace testinghelpers::IIT; */ // n < 1, with non-unit stride -TYPED_TEST(amaxv_IIT_ERS, n_lt_one_nonUnitStride) +TYPED_TEST(amaxvIIT_ERS, n_lt_one_nonUnitStride) { using T = TypeParam; gtint_t n = 0; @@ -73,11 +73,9 @@ TYPED_TEST(amaxv_IIT_ERS, n_lt_one_nonUnitStride) gtint_t idx = 42; // Test with nullptr for all suitable arguments that shouldn't be accessed. -#ifdef TEST_BLAS - idx = amaxv_( n, nullptr, inc ); -#else - idx = cblas_amaxv( n, nullptr, inc ); -#endif + idx = amaxv( n, nullptr, inc ); + + // Computing the difference. computediff( "idx", idx, gtint_t(0) ); // Test with all arguments correct except for the value we are choosing to test. @@ -85,29 +83,23 @@ TYPED_TEST(amaxv_IIT_ERS, n_lt_one_nonUnitStride) std::vector x = testinghelpers::get_random_vector( -10, 10, N, inc ); // Invoking AMAXV with an invalid value of n. -#ifdef TEST_BLAS - idx = amaxv_( n, x.data(), inc ); -#else - idx = cblas_amaxv( n, x.data(), inc ); -#endif + idx = amaxv( n, x.data(), inc ); // Computing the difference. computediff( "idx", idx, gtint_t(0) ); } // inc == 0, with non-unit stride -TYPED_TEST(amaxv_IIT_ERS, incx_eq_zero) +TYPED_TEST(amaxvIIT_ERS, incx_eq_zero) { using T = TypeParam; gtint_t inc = 0; gtint_t idx = 42; // Test with nullptr for all suitable arguments that shouldn't be accessed. -#ifdef TEST_BLAS - idx = amaxv_( N, nullptr, inc ); -#else - idx = cblas_amaxv( N, nullptr, inc ); -#endif + idx = amaxv( N, nullptr, inc ); + + // Computing the difference. computediff( "idx", idx, gtint_t(0) ); // Test with all arguments correct except for the value we are choosing to test. @@ -115,18 +107,14 @@ TYPED_TEST(amaxv_IIT_ERS, incx_eq_zero) std::vector x = testinghelpers::get_random_vector( -10, 10, N, 1 ); // Invoking AMAXV with an invalid value of incx. -#ifdef TEST_BLAS - idx = amaxv_( N, x.data(), inc ); -#else - idx = cblas_amaxv( N, x.data(), inc ); -#endif + idx = amaxv( N, x.data(), inc ); // Computing the difference. computediff( "idx", idx, gtint_t(0) ); } // n < 1, with unit stride -TYPED_TEST(amaxv_IIT_ERS, n_lt_one_unitStride) +TYPED_TEST(amaxvIIT_ERS, n_lt_one_unitStride) { using T = TypeParam; gtint_t n = 0; @@ -134,11 +122,9 @@ TYPED_TEST(amaxv_IIT_ERS, n_lt_one_unitStride) gtint_t idx = 42; // Test with nullptr for all suitable arguments that shouldn't be accessed. -#ifdef TEST_BLAS - idx = amaxv_( n, nullptr, unit_inc ); -#else - idx = cblas_amaxv( n, nullptr, unit_inc ); -#endif + idx = amaxv( n, nullptr, unit_inc ); + + // Computing the difference. computediff( "idx", idx, gtint_t(0) ); // Test with all arguments correct except for the value we are choosing to test. @@ -146,18 +132,14 @@ TYPED_TEST(amaxv_IIT_ERS, n_lt_one_unitStride) std::vector x = testinghelpers::get_random_vector( -10, 10, N, unit_inc ); // Invoking AMAXV with an invalid value of n. -#ifdef TEST_BLAS - idx = amaxv_( n, x.data(), unit_inc ); -#else - idx = cblas_amaxv( n, x.data(), unit_inc ); -#endif + idx = amaxv( n, x.data(), unit_inc ); // Computing the difference. computediff( "idx", idx, gtint_t(0) ); } // n == 1, with unit stride -TYPED_TEST(amaxv_IIT_ERS, n_eq_one_unitStride) +TYPED_TEST(amaxvIIT_ERS, n_eq_one_unitStride) { using T = TypeParam; gtint_t n = 1; @@ -165,11 +147,12 @@ TYPED_TEST(amaxv_IIT_ERS, n_eq_one_unitStride) gtint_t idx = 42; // Test with nullptr for all suitable arguments that shouldn't be accessed. -#ifdef TEST_BLAS - idx = amaxv_( n, nullptr, unit_inc ); + idx = amaxv( n, nullptr, unit_inc ); + + // Computing the difference. +#ifdef TEST_BLAS_LIKE computediff( "idx", idx, gtint_t(1) ); #else - idx = cblas_amaxv( n, nullptr, unit_inc ); computediff( "idx", idx, gtint_t(0) ); #endif @@ -178,17 +161,18 @@ TYPED_TEST(amaxv_IIT_ERS, n_eq_one_unitStride) std::vector x = testinghelpers::get_random_vector( -10, 10, N, unit_inc ); // Invoking AMAXV with an invalid value of n. -#ifdef TEST_BLAS - idx = amaxv_( n, x.data(), unit_inc ); + idx = amaxv( n, x.data(), unit_inc ); + + // Computing the difference. +#ifdef TEST_BLAS_LIKE computediff( "idx", idx, gtint_t(1) ); #else - idx = cblas_amaxv( n, x.data(), unit_inc ); computediff( "idx", idx, gtint_t(0) ); #endif } -TYPED_TEST(amaxv_IIT_ERS, n_eq_one_nonUnitStrides) +TYPED_TEST(amaxvIIT_ERS, n_eq_one_nonUnitStrides) { using T = TypeParam; gtint_t n = 1; @@ -196,11 +180,12 @@ TYPED_TEST(amaxv_IIT_ERS, n_eq_one_nonUnitStrides) gtint_t idx = 42; // Test with nullptr for all suitable arguments that shouldn't be accessed. -#ifdef TEST_BLAS - idx = amaxv_( n, nullptr, inc ); + idx = amaxv( n, nullptr, inc ); + + // Computing the difference. +#ifdef TEST_BLAS_LIKE computediff( "idx", idx, gtint_t(1) ); #else - idx = cblas_amaxv( n, nullptr, inc ); computediff( "idx", idx, gtint_t(0) ); #endif @@ -209,11 +194,12 @@ TYPED_TEST(amaxv_IIT_ERS, n_eq_one_nonUnitStrides) std::vector x = testinghelpers::get_random_vector( -10, 10, N, inc ); // Invoking AMAXV with an invalid value of n. -#ifdef TEST_BLAS - idx = amaxv_( n, x.data(), inc ); + idx = amaxv( n, x.data(), inc ); + + // Computing the difference. +#ifdef TEST_BLAS_LIKE computediff( "idx", idx, gtint_t(1) ); #else - idx = cblas_amaxv( n, x.data(), inc ); computediff( "idx", idx, gtint_t(0) ); #endif } diff --git a/gtestsuite/testsuite/level1/axpbyv/axpbyv.h b/gtestsuite/testsuite/level1/axpbyv/axpbyv.h index b6d85c5cf..16c14a6a4 100644 --- a/gtestsuite/testsuite/level1/axpbyv/axpbyv.h +++ b/gtestsuite/testsuite/level1/axpbyv/axpbyv.h @@ -67,6 +67,21 @@ static void axpbyv_(gtint_t n, T alpha, T* x, gtint_t incx, T beta, T* y, gtint_ throw std::runtime_error("Error in testsuite/level1/axpbyv.h: Invalid typename in axpbyv_()."); } +template +static void axpbyv_blis_impl(gtint_t n, T alpha, T* x, gtint_t incx, T beta, T* y, gtint_t incy) +{ + if constexpr (std::is_same::value) + saxpby_blis_impl( &n, &alpha, x, &incx, &beta, y, &incy ); + else if constexpr (std::is_same::value) + daxpby_blis_impl( &n, &alpha, x, &incx, &beta, y, &incy ); + else if constexpr (std::is_same::value) + caxpby_blis_impl( &n, &alpha, x, &incx, &beta, y, &incy ); + else if constexpr (std::is_same::value) + zaxpby_blis_impl( &n, &alpha, x, &incx, &beta, y, &incy ); + else + throw std::runtime_error("Error in testsuite/level1/axpbyv.h: Invalid typename in axpbyv_blis_impl()."); +} + template static void cblas_axpbyv(gtint_t n, T alpha, T* x, gtint_t incx, T beta, T* y, gtint_t incy) { @@ -129,6 +144,8 @@ static void axpbyv(char conj_x, gtint_t n, T alpha, T* x, gtint_t incx, T beta, #ifdef TEST_BLAS axpbyv_( n, alpha, x, incx, beta, y, incy ); +#elif TEST_BLAS_BLIS_IMPL + axpbyv_blis_impl( n, alpha, x, incx, beta, y, incy ); #elif TEST_CBLAS cblas_axpbyv( n, alpha, x, incx, beta, y, incy ); #elif TEST_BLIS_TYPED diff --git a/gtestsuite/testsuite/level1/axpbyv/axpbyv_IIT_ERS.cpp b/gtestsuite/testsuite/level1/axpbyv/axpbyv_IIT_ERS.cpp index 43b2e99f3..f847cb274 100644 --- a/gtestsuite/testsuite/level1/axpbyv/axpbyv_IIT_ERS.cpp +++ b/gtestsuite/testsuite/level1/axpbyv/axpbyv_IIT_ERS.cpp @@ -46,7 +46,7 @@ TYPED_TEST_SUITE(axpbyv_IIT_ERS, TypeParam); // Defining individual testsuites b // Adding namespace to get default parameters(valid case) from testinghelpers/common/wrong_input_helpers.h. using namespace testinghelpers::IIT; -#if defined(TEST_BLAS) || defined(TEST_CBLAS) +#if defined(TEST_BLAS_LIKE) || defined(TEST_CBLAS) /* Early Return Scenarios(ERS) : The early return cases for ?axpbyv are not defined under BLAS compliance. diff --git a/gtestsuite/testsuite/level1/axpyv/axpyv.h b/gtestsuite/testsuite/level1/axpyv/axpyv.h index 30682b63f..c4c135536 100644 --- a/gtestsuite/testsuite/level1/axpyv/axpyv.h +++ b/gtestsuite/testsuite/level1/axpyv/axpyv.h @@ -66,6 +66,21 @@ static void axpyv_(gtint_t n, T alpha, T* x, gtint_t incx, T* y, gtint_t incy) throw std::runtime_error("Error in testsuite/level1/axpyv.h: Invalid typename in axpyv_()."); } +template +static void axpyv_blis_impl(gtint_t n, T alpha, T* x, gtint_t incx, T* y, gtint_t incy) +{ + if constexpr (std::is_same::value) + saxpy_blis_impl( &n, &alpha, x, &incx, y, &incy ); + else if constexpr (std::is_same::value) + daxpy_blis_impl( &n, &alpha, x, &incx, y, &incy ); + else if constexpr (std::is_same::value) + caxpy_blis_impl( &n, &alpha, x, &incx, y, &incy ); + else if constexpr (std::is_same::value) + zaxpy_blis_impl( &n, &alpha, x, &incx, y, &incy ); + else + throw std::runtime_error("Error in testsuite/level1/axpyv.h: Invalid typename in axpyv_blis_impl()."); +} + template static void cblas_axpyv(gtint_t n, T alpha, T* x, gtint_t incx, T* y, gtint_t incy) { @@ -127,6 +142,8 @@ static void axpyv(char conj_x, gtint_t n, T alpha, T* x, gtint_t incx, T* y, gti #ifdef TEST_BLAS axpyv_( n, alpha, x, incx, y, incy ); +#elif TEST_BLAS_BLIS_IMPL + axpyv_blis_impl( n, alpha, x, incx, y, incy ); #elif TEST_CBLAS cblas_axpyv( n, alpha, x, incx, y, incy ); #elif TEST_BLIS_TYPED diff --git a/gtestsuite/testsuite/level1/axpyv/axpyv_IIT_ERS.cpp b/gtestsuite/testsuite/level1/axpyv/axpyv_IIT_ERS.cpp index b43b2bd05..0c8d73ee5 100644 --- a/gtestsuite/testsuite/level1/axpyv/axpyv_IIT_ERS.cpp +++ b/gtestsuite/testsuite/level1/axpyv/axpyv_IIT_ERS.cpp @@ -46,7 +46,7 @@ TYPED_TEST_SUITE(axpyv_IIT_ERS, TypeParam); // Defining individual testsuites ba // Adding namespace to get default parameters(valid case) from testinghelpers/common/wrong_input_helpers.h. using namespace testinghelpers::IIT; -#if defined(TEST_BLAS) || defined(TEST_CBLAS) +#if defined(TEST_BLAS_LIKE) || defined(TEST_CBLAS) /* Early Return Scenarios(ERS) for BLAS/CBLAS compliance : diff --git a/gtestsuite/testsuite/level1/copyv/copyv.h b/gtestsuite/testsuite/level1/copyv/copyv.h index 81ee3c9c9..f9947aea9 100644 --- a/gtestsuite/testsuite/level1/copyv/copyv.h +++ b/gtestsuite/testsuite/level1/copyv/copyv.h @@ -65,6 +65,21 @@ static void copyv_(gtint_t n, T* x, gtint_t incx, T* y, gtint_t incy) { throw std::runtime_error("Error in testsuite/level1/copyv.h: Invalid typename in copyv_()."); } +template +static void copyv_blis_impl(gtint_t n, T* x, gtint_t incx, T* y, gtint_t incy) { + + if constexpr (std::is_same::value) + scopy_blis_impl( &n, x, &incx, y, &incy ); + else if constexpr (std::is_same::value) + dcopy_blis_impl( &n, x, &incx, y, &incy ); + else if constexpr (std::is_same::value) + ccopy_blis_impl( &n, x, &incx, y, &incy ); + else if constexpr (std::is_same::value) + zcopy_blis_impl( &n, x, &incx, y, &incy ); + else + throw std::runtime_error("Error in testsuite/level1/copyv.h: Invalid typename in copyv_blis_impl()."); +} + template static void cblas_copyv(gtint_t n, T* x, gtint_t incx, T* y, gtint_t incy) { @@ -125,6 +140,8 @@ static void copyv(char conjx, gtint_t n, T* x, gtint_t incx, T* y, gtint_t incy) #ifdef TEST_BLAS copyv_(n, x, incx, y, incy); +#elif TEST_BLAS_BLIS_IMPL + copyv_blis_impl(n, x, incx, y, incy); #elif TEST_CBLAS cblas_copyv(n, x, incx, y, incy); #elif TEST_BLIS_TYPED diff --git a/gtestsuite/testsuite/level1/copyv/copyv_IIT_ERS.cpp b/gtestsuite/testsuite/level1/copyv/copyv_IIT_ERS.cpp index 562724566..24418cb31 100644 --- a/gtestsuite/testsuite/level1/copyv/copyv_IIT_ERS.cpp +++ b/gtestsuite/testsuite/level1/copyv/copyv_IIT_ERS.cpp @@ -46,7 +46,7 @@ TYPED_TEST_SUITE(copyv_IIT_ERS, TypeParam); // Defining individual testsuites ba // Adding namespace to get default parameters(valid case) from testinghelpers/common/wrong_input_helpers.h. using namespace testinghelpers::IIT; -#if defined(TEST_BLAS) || defined(TEST_CBLAS) +#if defined(TEST_BLAS_LIKE) || defined(TEST_CBLAS) /* Early Return Scenarios(ERS) for BLAS/CBLAS compliance: diff --git a/gtestsuite/testsuite/level1/dotv/dotv.h b/gtestsuite/testsuite/level1/dotv/dotv.h index 102827d2c..a2424dfec 100644 --- a/gtestsuite/testsuite/level1/dotv/dotv.h +++ b/gtestsuite/testsuite/level1/dotv/dotv.h @@ -110,6 +110,64 @@ static void dotc_(gtint_t n, T* x, gtint_t incx, T* y, gtint_t incy, T* rho) { throw std::runtime_error("Error in testsuite/level1/dotv.h: Invalid typename in dotc_()."); } +template +static void dotv_blis_impl(gtint_t n, T* x, gtint_t incx, T* y, gtint_t incy, T* rho) { + if constexpr (std::is_same::value) + *rho = sdot_blis_impl(&n, x, &incx, y, &incy); + else if constexpr (std::is_same::value) + *rho = ddot_blis_impl( &n, x, &incx, y, &incy ); + else if constexpr (std::is_same::value) + #ifdef BLIS_DISABLE_COMPLEX_RETURN_INTEL + *rho = cdotu_blis_impl(&n, x, &incx, y, &incy); + #else + cdotu_blis_impl(rho, &n, x, &incx, y, &incy); + #endif + else if constexpr (std::is_same::value) + #ifdef BLIS_DISABLE_COMPLEX_RETURN_INTEL + *rho = zdotu_blis_impl(&n, x, &incx, y, &incy); + #else + zdotu_blis_impl(rho, &n, x, &incx, y, &incy); + #endif + else + throw std::runtime_error("Error in testsuite/level1/dotv.h: Invalid typename in dotv_blis_impl()."); +} + +template +static void dotu_blis_impl(gtint_t n, T* x, gtint_t incx, T* y, gtint_t incy, T* rho) { + if constexpr (std::is_same::value) + #ifdef BLIS_DISABLE_COMPLEX_RETURN_INTEL + *rho = cdotu_blis_impl(&n, x, &incx, y, &incy); + #else + cdotu_blis_impl(rho, &n, x, &incx, y, &incy); + #endif + else if constexpr (std::is_same::value) + #ifdef BLIS_DISABLE_COMPLEX_RETURN_INTEL + *rho = zdotu_blis_impl(&n, x, &incx, y, &incy); + #else + zdotu_blis_impl(rho, &n, x, &incx, y, &incy); + #endif + else + throw std::runtime_error("Error in testsuite/level1/dotv.h: Invalid typename in dotu_blis_impl()."); +} + +template +static void dotc_blis_impl(gtint_t n, T* x, gtint_t incx, T* y, gtint_t incy, T* rho) { + if constexpr (std::is_same::value) + #ifdef BLIS_DISABLE_COMPLEX_RETURN_INTEL + *rho = cdotc_blis_impl(&n, x, &incx, y, &incy); + #else + cdotc_blis_impl(rho, &n, x, &incx, y, &incy); + #endif + else if constexpr (std::is_same::value) + #ifdef BLIS_DISABLE_COMPLEX_RETURN_INTEL + *rho = zdotc_blis_impl(&n, x, &incx, y, &incy); + #else + zdotc_blis_impl(rho, &n, x, &incx, y, &incy); + #endif + else + throw std::runtime_error("Error in testsuite/level1/dotv.h: Invalid typename in dotc_blis_impl()."); +} + template static void cblas_dotv(gtint_t n, T* x, gtint_t incx, T* y, gtint_t incy, T* rho) { if constexpr (std::is_same::value) @@ -205,6 +263,16 @@ static void dotv(char conjx, char conjy, gtint_t n, else dotu_(n, x, incx, y, incy, rho); } +#elif TEST_BLAS_BLIS_IMPL + if constexpr ( testinghelpers::type_info::is_real ) + dotv_blis_impl(n, x, incx, y, incy, rho); + else if constexpr ( testinghelpers::type_info::is_complex ) + { + if ( testinghelpers::chkconj(conjx) ) + dotc_blis_impl(n, x, incx, y, incy, rho); + else + dotu_blis_impl(n, x, incx, y, incy, rho); + } #elif TEST_CBLAS if constexpr ( testinghelpers::type_info::is_real ) cblas_dotv(n, x, incx, y, incy, rho); diff --git a/gtestsuite/testsuite/level1/dotv/dotv_IIT_ERS.cpp b/gtestsuite/testsuite/level1/dotv/dotv_IIT_ERS.cpp index d3845b58f..f8a3739d8 100644 --- a/gtestsuite/testsuite/level1/dotv/dotv_IIT_ERS.cpp +++ b/gtestsuite/testsuite/level1/dotv/dotv_IIT_ERS.cpp @@ -45,7 +45,7 @@ TYPED_TEST_SUITE(dotv_IIT_ERS, TypeParam); using namespace testinghelpers::IIT; -#if defined(TEST_BLAS) || defined(TEST_CBLAS) +#if defined(TEST_BLAS_LIKE) || defined(TEST_CBLAS) /* BLAS Early Return Scenarios(ERS): diff --git a/gtestsuite/testsuite/level1/dotxv/dotxv.h b/gtestsuite/testsuite/level1/dotxv/dotxv.h index 71968a2d4..f55057e21 100644 --- a/gtestsuite/testsuite/level1/dotxv/dotxv.h +++ b/gtestsuite/testsuite/level1/dotxv/dotxv.h @@ -105,6 +105,8 @@ static void dotxv( char conjx, char conjy, gtint_t n, T* alpha, #ifdef TEST_BLAS throw std::runtime_error("Error in testsuite/level1/dotxv.h: BLAS interface is not available."); +#elif TEST_BLAS_BLIS_IMPL + throw std::runtime_error("Error in testsuite/level1/dotxv.h: BLAS_BLIS_IMPL interface is not available."); #elif TEST_CBLAS throw std::runtime_error("Error in testsuite/level1/dotxv.h: CBLAS interface is not available."); #elif TEST_BLIS_TYPED diff --git a/gtestsuite/testsuite/level1/scal2v/scal2v.h b/gtestsuite/testsuite/level1/scal2v/scal2v.h index 6f199aa39..1afe6ac54 100644 --- a/gtestsuite/testsuite/level1/scal2v/scal2v.h +++ b/gtestsuite/testsuite/level1/scal2v/scal2v.h @@ -97,8 +97,10 @@ static void scal2v(char conjx, gtint_t n, T alpha, T* x, gtint_t incx, T* y, gti #ifdef TEST_BLAS throw std::runtime_error("Error in testsuite/level1/scal2v.h: BLAS interface is not available."); +#elif TEST_BLAS_BLIS_IMPL + throw std::runtime_error("Error in testsuite/level1/scal2v.h: BLAS_BLIS_IMPL interface is not available."); #elif TEST_CBLAS - throw std::runtime_error("Error in testsuite/level1/scal2v.h: BLAS interface is not available."); + throw std::runtime_error("Error in testsuite/level1/scal2v.h: CBLAS interface is not available."); #elif TEST_BLIS_TYPED typed_scal2v( conjx, n, alpha, x, incx, y, incy ); #else diff --git a/gtestsuite/testsuite/level1/scalv/scalv.h b/gtestsuite/testsuite/level1/scalv/scalv.h index 92dc0bbf4..ba7641f6c 100644 --- a/gtestsuite/testsuite/level1/scalv/scalv.h +++ b/gtestsuite/testsuite/level1/scalv/scalv.h @@ -73,6 +73,29 @@ static void scalv_(gtint_t n, U alpha, T* x, gtint_t incx) throw std::runtime_error("Error in testsuite/level1/scalv.h: Invalid typename in scalv_()."); } +template +static void scalv_blis_impl(gtint_t n, U alpha, T* x, gtint_t incx) +{ + if constexpr (std::is_same::value) + { + if constexpr (std::is_same::value) + sscal_blis_impl( &n, &alpha, x, &incx ); + else if constexpr (std::is_same::value) + dscal_blis_impl( &n, &alpha, x, &incx ); + else if constexpr (std::is_same::value) + cscal_blis_impl( &n, &alpha, x, &incx ); + else if constexpr (std::is_same::value) + zscal_blis_impl( &n, &alpha, x, &incx ); + else + throw std::runtime_error("Error in testsuite/level1/scalv.h: Invalid typename in scalv_blis_impl()."); + } + else if constexpr (std::is_same::value && std::is_same::value ) + csscal_blis_impl( &n, &alpha, x, &incx ); + else if constexpr (std::is_same::value && std::is_same::value ) + zdscal_blis_impl( &n, &alpha, x, &incx ); + else + throw std::runtime_error("Error in testsuite/level1/scalv.h: Invalid typename in scalv_blis_impl()."); +} template static void cblas_scalv(gtint_t n, U alpha, T* x, gtint_t incx) @@ -147,6 +170,8 @@ static void scalv(char conj_alpha, gtint_t n, U alpha, T* x, gtint_t incx) #ifdef TEST_BLAS scalv_( n, alpha, x, incx ); +#elif TEST_BLAS_BLIS_IMPL + scalv_blis_impl( n, alpha, x, incx ); #elif TEST_CBLAS cblas_scalv( n, alpha, x, incx ); #elif TEST_BLIS_TYPED diff --git a/gtestsuite/testsuite/level1/scalv/scalv_IIT_ERS.cpp b/gtestsuite/testsuite/level1/scalv/scalv_IIT_ERS.cpp index 03ce10ffa..0432ba770 100644 --- a/gtestsuite/testsuite/level1/scalv/scalv_IIT_ERS.cpp +++ b/gtestsuite/testsuite/level1/scalv/scalv_IIT_ERS.cpp @@ -53,7 +53,7 @@ TYPED_TEST_SUITE(scalv_IIT_ERS, TypeParam); using namespace testinghelpers::IIT; -#if defined(TEST_BLAS) || defined(TEST_CBLAS) +#if defined(TEST_BLAS_LIKE) || defined(TEST_CBLAS) /* BLAS Early Return Scenarios(ERS): diff --git a/gtestsuite/testsuite/level1/setv/setv.h b/gtestsuite/testsuite/level1/setv/setv.h index 16bd25afb..1350fbf2f 100644 --- a/gtestsuite/testsuite/level1/setv/setv.h +++ b/gtestsuite/testsuite/level1/setv/setv.h @@ -84,6 +84,8 @@ static void setv(char conjalpha, gtint_t n, T* alpha, T* x, gtint_t incx) #ifdef TEST_BLAS throw std::runtime_error("Error in testsuite/level1/setv.h: BLAS interface is not available."); +#elif TEST_BLAS_BLIS_IMPL + throw std::runtime_error("Error in testsuite/level1/setv.h: BLAS_BLIS_IMPL interface is not available."); #elif TEST_CBLAS throw std::runtime_error("Error in testsuite/level1/setv.h: CBLAS interface is not available."); #elif TEST_BLIS_TYPED diff --git a/gtestsuite/testsuite/level1/subv/subv.h b/gtestsuite/testsuite/level1/subv/subv.h index 7de57b5c9..ed6631e50 100644 --- a/gtestsuite/testsuite/level1/subv/subv.h +++ b/gtestsuite/testsuite/level1/subv/subv.h @@ -94,6 +94,8 @@ static void subv(char conjx, gtint_t n, T* x, gtint_t incx, T* y, gtint_t incy) #ifdef TEST_BLAS throw std::runtime_error("Error in testsuite/level1/subv.h: BLAS interface is not available."); +#elif TEST_BLAS_BLIS_IMPL + throw std::runtime_error("Error in testsuite/level1/subv.h: BLAS_BLIS_IMPL interface is not available."); #elif TEST_CBLAS throw std::runtime_error("Error in testsuite/level1/subv.h: CBLAS interface is not available."); #elif TEST_BLIS_TYPED diff --git a/gtestsuite/testsuite/level1/swapv/swapv.h b/gtestsuite/testsuite/level1/swapv/swapv.h index 2e18673d9..5e1740b22 100644 --- a/gtestsuite/testsuite/level1/swapv/swapv.h +++ b/gtestsuite/testsuite/level1/swapv/swapv.h @@ -64,6 +64,22 @@ static void swapv_(gtint_t n, T* x, gtint_t incx, T* y, gtint_t incy) throw std::runtime_error("Error in testsuite/level1/swapv.h: Invalid typename in swapv_()."); } +template +static void swapv_blis_impl(gtint_t n, T* x, gtint_t incx, T* y, gtint_t incy) +{ + + if constexpr (std::is_same::value) + sswap_blis_impl( &n, x, &incx, y, &incy ); + else if constexpr (std::is_same::value) + dswap_blis_impl( &n, x, &incx, y, &incy ); + else if constexpr (std::is_same::value) + cswap_blis_impl( &n, x, &incx, y, &incy ); + else if constexpr (std::is_same::value) + zswap_blis_impl( &n, x, &incx, y, &incy ); + else + throw std::runtime_error("Error in testsuite/level1/swapv.h: Invalid typename in swapv_blis_impl()."); +} + template static void cblas_swapv(gtint_t n, T* x, gtint_t incx, T* y, gtint_t incy) { @@ -109,6 +125,8 @@ static void swapv(gtint_t n, T* x, gtint_t incx, T* y, gtint_t incy) #ifdef TEST_BLAS swapv_( n, x, incx, y, incy ); +#elif TEST_BLAS_BLIS_IMPL + swapv_blis_impl( n, x, incx, y, incy ); #elif TEST_CBLAS cblas_swapv( n, x, incx, y, incy ); #elif TEST_BLIS_TYPED diff --git a/gtestsuite/testsuite/level1/swapv/swapv_IIT_ERS.cpp b/gtestsuite/testsuite/level1/swapv/swapv_IIT_ERS.cpp index 30beb4b4e..6b214b548 100644 --- a/gtestsuite/testsuite/level1/swapv/swapv_IIT_ERS.cpp +++ b/gtestsuite/testsuite/level1/swapv/swapv_IIT_ERS.cpp @@ -45,7 +45,7 @@ TYPED_TEST_SUITE(swapv_IIT_ERS, TypeParam); using namespace testinghelpers::IIT; -#if defined(TEST_BLAS) || defined(TEST_CBLAS) +#if defined(TEST_BLAS_LIKE) || defined(TEST_CBLAS) /* BLIS Early Return Scenarios(ERS): diff --git a/gtestsuite/testsuite/level1/xpbyv/xpbyv.h b/gtestsuite/testsuite/level1/xpbyv/xpbyv.h index 29fff24da..4e32e6652 100644 --- a/gtestsuite/testsuite/level1/xpbyv/xpbyv.h +++ b/gtestsuite/testsuite/level1/xpbyv/xpbyv.h @@ -96,6 +96,8 @@ static void xpbyv(char conj_x, gtint_t n, T* x, gtint_t incx, T beta, T* y, gtin #ifdef TEST_BLAS throw std::runtime_error("Error in testsuite/level1/xpbyv.h: BLAS interface is not available."); +#elif TEST_BLAS_BLIS_IMPL + throw std::runtime_error("Error in testsuite/level1/xpbyv.h: BLAS_BLIS_IMPL interface is not available."); #elif TEST_CBLAS throw std::runtime_error("Error in testsuite/level1/xpbyv.h: CBLAS interface is not available."); #elif TEST_BLIS_TYPED diff --git a/gtestsuite/testsuite/level2/gemv/IIT_ERS/gemv_IIT_ERS.cpp b/gtestsuite/testsuite/level2/gemv/IIT_ERS/gemv_IIT_ERS.cpp index 03af3152a..09a4591a5 100644 --- a/gtestsuite/testsuite/level2/gemv/IIT_ERS/gemv_IIT_ERS.cpp +++ b/gtestsuite/testsuite/level2/gemv/IIT_ERS/gemv_IIT_ERS.cpp @@ -100,7 +100,7 @@ TYPED_TEST(gemv_IIT_ERS, invalid_storage) #endif -#if defined(TEST_BLAS) || defined(TEST_CBLAS) +#if defined(TEST_BLAS_LIKE) || defined(TEST_CBLAS) /* Incorrect Input Testing(IIT) @@ -126,7 +126,7 @@ TYPED_TEST(gemv_IIT_ERS, invalid_trans) testinghelpers::initone( beta ); // Test with nullptr for all suitable arguments that shouldn't be accessed. -#if defined(TEST_BLAS) +#if defined(TEST_BLAS_LIKE) gemv( STORAGE, 'p', CONJ, M, N, nullptr, nullptr, LDA, nullptr, incx, nullptr, nullptr, incy ); #else @@ -178,7 +178,7 @@ TYPED_TEST(gemv_IIT_ERS, m_lt_zero) testinghelpers::initone( beta ); // Test with nullptr for all suitable arguments that shouldn't be accessed. -#if defined(TEST_BLAS) +#if defined(TEST_BLAS_LIKE) gemv( STORAGE, TRANS, CONJ, invalid_m, N, nullptr, nullptr, LDA, nullptr, incx, nullptr, nullptr, incy ); #else @@ -230,7 +230,7 @@ TYPED_TEST(gemv_IIT_ERS, n_lt_zero) testinghelpers::initone( beta ); // Test with nullptr for all suitable arguments that shouldn't be accessed. -#if defined(TEST_BLAS) +#if defined(TEST_BLAS_LIKE) gemv( STORAGE, TRANS, CONJ, M, invalid_n, nullptr, nullptr, LDA, nullptr, incx, nullptr, nullptr, incy ); #else @@ -282,7 +282,7 @@ TYPED_TEST(gemv_IIT_ERS, invalid_lda) testinghelpers::initone( beta ); // Test with nullptr for all suitable arguments that shouldn't be accessed. -#if defined(TEST_BLAS) +#if defined(TEST_BLAS_LIKE) gemv( STORAGE, TRANS, CONJ, M, N, nullptr, nullptr, LDA - 1, nullptr, incx, nullptr, nullptr, incy ); #else @@ -334,7 +334,7 @@ TYPED_TEST(gemv_IIT_ERS, incx_eq_zero) testinghelpers::initone( beta ); // Test with nullptr for all suitable arguments that shouldn't be accessed. -#if defined(TEST_BLAS) +#if defined(TEST_BLAS_LIKE) gemv( STORAGE, TRANS, CONJ, M, N, nullptr, nullptr, LDA, nullptr, 0, nullptr, nullptr, incy ); #else @@ -386,7 +386,7 @@ TYPED_TEST(gemv_IIT_ERS, incy_eq_zero) testinghelpers::initone( beta ); // Test with nullptr for all suitable arguments that shouldn't be accessed. -#if defined(TEST_BLAS) +#if defined(TEST_BLAS_LIKE) gemv( STORAGE, TRANS, CONJ, M, N, nullptr, nullptr, LDA, nullptr, incx, nullptr, nullptr, 0 ); #else @@ -447,7 +447,7 @@ TYPED_TEST(gemv_IIT_ERS, m_eq_zero) T beta = T{0.7}; // Test with nullptr for all suitable arguments that shouldn't be accessed. -#if defined(TEST_BLAS) +#if defined(TEST_BLAS_LIKE) gemv( STORAGE, TRANS, CONJ, invalid_m, N, nullptr, nullptr, LDA, nullptr, incx, nullptr, nullptr, incy ); #else @@ -499,7 +499,7 @@ TYPED_TEST(gemv_IIT_ERS, n_eq_zero) T beta = T{0.7}; // Test with nullptr for all suitable arguments that shouldn't be accessed. -#if defined(TEST_BLAS) +#if defined(TEST_BLAS_LIKE) gemv( STORAGE, TRANS, CONJ, M, invalid_n, nullptr, nullptr, LDA, nullptr, incx, nullptr, nullptr, incy ); #else @@ -552,7 +552,7 @@ TYPED_TEST(gemv_IIT_ERS, m_eq_zero_Unitbeta) testinghelpers::initone( beta ); // Test with nullptr for all suitable arguments that shouldn't be accessed. -#if defined(TEST_BLAS) +#if defined(TEST_BLAS_LIKE) gemv( STORAGE, TRANS, CONJ, invalid_m, N, &alpha, nullptr, LDA, nullptr, incx, nullptr, nullptr, incy ); #else diff --git a/gtestsuite/testsuite/level2/gemv/cgemv/cgemv_evt.cpp b/gtestsuite/testsuite/level2/gemv/cgemv/cgemv_evt.cpp index 65fe66a0d..293d53341 100644 --- a/gtestsuite/testsuite/level2/gemv/cgemv/cgemv_evt.cpp +++ b/gtestsuite/testsuite/level2/gemv/cgemv/cgemv_evt.cpp @@ -121,7 +121,7 @@ INSTANTIATE_TEST_SUITE_P( cgemvEVT, ::testing::Combine( ::testing::Values('c' -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE ,'r' #endif ), // storage format @@ -187,7 +187,7 @@ INSTANTIATE_TEST_SUITE_P( cgemvEVT, ::testing::Combine( ::testing::Values('c' -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE ,'r' #endif ), // storage format @@ -242,7 +242,7 @@ INSTANTIATE_TEST_SUITE_P( cgemvEVT, ::testing::Combine( ::testing::Values('c' -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE ,'r' #endif ), // storage format @@ -293,7 +293,7 @@ INSTANTIATE_TEST_SUITE_P( cgemvEVT, ::testing::Combine( ::testing::Values('c' -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE ,'r' #endif ), // storage format diff --git a/gtestsuite/testsuite/level2/gemv/cgemv/cgemv_generic.cpp b/gtestsuite/testsuite/level2/gemv/cgemv/cgemv_generic.cpp index af43603c2..10e80a9f3 100644 --- a/gtestsuite/testsuite/level2/gemv/cgemv/cgemv_generic.cpp +++ b/gtestsuite/testsuite/level2/gemv/cgemv/cgemv_generic.cpp @@ -110,7 +110,7 @@ INSTANTIATE_TEST_SUITE_P( cgemvGeneric, ::testing::Combine( ::testing::Values('c' -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE ,'r' #endif ), // storage format @@ -133,7 +133,7 @@ INSTANTIATE_TEST_SUITE_P( cgemvGeneric, ::testing::Combine( ::testing::Values('c' -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE ,'r' #endif ), // storage format @@ -156,7 +156,7 @@ INSTANTIATE_TEST_SUITE_P( cgemvGeneric, ::testing::Combine( ::testing::Values('c' -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE ,'r' #endif ), // storage format @@ -180,7 +180,7 @@ INSTANTIATE_TEST_SUITE_P( cgemvGeneric, ::testing::Combine( ::testing::Values('c' -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE ,'r' #endif ), // storage format @@ -204,7 +204,7 @@ INSTANTIATE_TEST_SUITE_P( cgemvGeneric, ::testing::Combine( ::testing::Values('c' -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE ,'r' #endif ), // storage format @@ -228,7 +228,7 @@ INSTANTIATE_TEST_SUITE_P( cgemvGeneric, ::testing::Combine( ::testing::Values('c' -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE ,'r' #endif ), // storage format @@ -251,7 +251,7 @@ INSTANTIATE_TEST_SUITE_P( cgemvGeneric, ::testing::Combine( ::testing::Values('c' -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE ,'r' #endif ), // storage format @@ -274,7 +274,7 @@ INSTANTIATE_TEST_SUITE_P( cgemvGeneric, ::testing::Combine( ::testing::Values('c' -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE ,'r' #endif ), // storage format diff --git a/gtestsuite/testsuite/level2/gemv/dgemv/dgemv_evt.cpp b/gtestsuite/testsuite/level2/gemv/dgemv/dgemv_evt.cpp index 5a94b0a58..b60877241 100644 --- a/gtestsuite/testsuite/level2/gemv/dgemv/dgemv_evt.cpp +++ b/gtestsuite/testsuite/level2/gemv/dgemv/dgemv_evt.cpp @@ -120,7 +120,7 @@ INSTANTIATE_TEST_SUITE_P( dgemvEVT, ::testing::Combine( ::testing::Values('c' -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE ,'r' #endif ), // storage format @@ -157,7 +157,7 @@ INSTANTIATE_TEST_SUITE_P( dgemvEVT, ::testing::Combine( ::testing::Values('c' -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE ,'r' #endif ), // storage format @@ -183,7 +183,7 @@ INSTANTIATE_TEST_SUITE_P( dgemvEVT, ::testing::Combine( ::testing::Values('c' -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE ,'r' #endif ), // storage format @@ -220,7 +220,7 @@ INSTANTIATE_TEST_SUITE_P( dgemvEVT, ::testing::Combine( ::testing::Values('c' -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE ,'r' #endif ), // storage format diff --git a/gtestsuite/testsuite/level2/gemv/dgemv/dgemv_generic.cpp b/gtestsuite/testsuite/level2/gemv/dgemv/dgemv_generic.cpp index c78f45c92..4ddb59b74 100644 --- a/gtestsuite/testsuite/level2/gemv/dgemv/dgemv_generic.cpp +++ b/gtestsuite/testsuite/level2/gemv/dgemv/dgemv_generic.cpp @@ -110,7 +110,7 @@ INSTANTIATE_TEST_SUITE_P( dgemvGeneric, ::testing::Combine( ::testing::Values('c' -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE ,'r' #endif ), // storage format @@ -133,7 +133,7 @@ INSTANTIATE_TEST_SUITE_P( dgemvGeneric, ::testing::Combine( ::testing::Values('c' -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE ,'r' #endif ), // storage format @@ -156,7 +156,7 @@ INSTANTIATE_TEST_SUITE_P( dgemvGeneric, ::testing::Combine( ::testing::Values('c' -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE ,'r' #endif ), // storage format @@ -179,7 +179,7 @@ INSTANTIATE_TEST_SUITE_P( dgemvGeneric, ::testing::Combine( ::testing::Values('c' -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE ,'r' #endif ), // storage format @@ -203,7 +203,7 @@ INSTANTIATE_TEST_SUITE_P( dgemvGeneric, ::testing::Combine( ::testing::Values('c' -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE ,'r' #endif ), // storage format diff --git a/gtestsuite/testsuite/level2/gemv/gemv.h b/gtestsuite/testsuite/level2/gemv/gemv.h index 2c52b2474..02c54d040 100644 --- a/gtestsuite/testsuite/level2/gemv/gemv.h +++ b/gtestsuite/testsuite/level2/gemv/gemv.h @@ -77,6 +77,22 @@ static void gemv_( char transa, gtint_t m, gtint_t n, T* alpha, T* ap, gtint_t l throw std::runtime_error("Error in testsuite/level2/gemv.h: Invalid typename in gemv_()."); } +template +static void gemv_blis_impl( char transa, gtint_t m, gtint_t n, T* alpha, T* ap, gtint_t lda, + T* xp, gtint_t incx, T* beta, T* yp, gtint_t incy ) +{ + if constexpr (std::is_same::value) + sgemv_blis_impl( &transa, &m, &n, alpha, ap, &lda, xp, &incx, beta, yp, &incy ); + else if constexpr (std::is_same::value) + dgemv_blis_impl( &transa, &m, &n, alpha, ap, &lda, xp, &incx, beta, yp, &incy ); + else if constexpr (std::is_same::value) + cgemv_blis_impl( &transa, &m, &n, alpha, ap, &lda, xp, &incx, beta, yp, &incy ); + else if constexpr (std::is_same::value) + zgemv_blis_impl( &transa, &m, &n, alpha, ap, &lda, xp, &incx, beta, yp, &incy ); + else + throw std::runtime_error("Error in testsuite/level2/gemv.h: Invalid typename in gemv_blis_impl()."); +} + template static void cblas_gemv( char storage, char trans, gtint_t m, gtint_t n, T* alpha, T* ap, gtint_t lda, T* xp, gtint_t incx, T* beta, T* yp, gtint_t incy ) @@ -182,6 +198,11 @@ static void gemv( char storage, char trans, char conj_x, gtint_t m, gtint_t n, gemv_( trans, m, n, alpha, ap, lda, xp, incx, beta, yp, incy ); else throw std::runtime_error("Error in testsuite/level2/gemv.h: BLAS interface cannot be tested for row-major order."); +#elif TEST_BLAS_BLIS_IMPL + if( storage == 'c' || storage == 'C' ) + gemv_blis_impl( trans, m, n, alpha, ap, lda, xp, incx, beta, yp, incy ); + else + throw std::runtime_error("Error in testsuite/level2/gemv.h: BLAS_BLIS_IMPL interface cannot be tested for row-major order."); #elif TEST_CBLAS cblas_gemv( storage, trans, m, n, alpha, ap, lda, xp, incx, beta, yp, incy ); #elif TEST_BLIS_TYPED diff --git a/gtestsuite/testsuite/level2/gemv/sgemv/sgemv_evt.cpp b/gtestsuite/testsuite/level2/gemv/sgemv/sgemv_evt.cpp index e6de86459..afaf23827 100644 --- a/gtestsuite/testsuite/level2/gemv/sgemv/sgemv_evt.cpp +++ b/gtestsuite/testsuite/level2/gemv/sgemv/sgemv_evt.cpp @@ -120,7 +120,7 @@ INSTANTIATE_TEST_SUITE_P( sgemvEVT, ::testing::Combine( ::testing::Values('c' -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE ,'r' #endif ), // storage format @@ -157,7 +157,7 @@ INSTANTIATE_TEST_SUITE_P( sgemvEVT, ::testing::Combine( ::testing::Values('c' -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE ,'r' #endif ), // storage format @@ -183,7 +183,7 @@ INSTANTIATE_TEST_SUITE_P( sgemvEVT, ::testing::Combine( ::testing::Values('c' -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE ,'r' #endif ), // storage format @@ -220,7 +220,7 @@ INSTANTIATE_TEST_SUITE_P( sgemvEVT, ::testing::Combine( ::testing::Values('c' -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE ,'r' #endif ), // storage format diff --git a/gtestsuite/testsuite/level2/gemv/sgemv/sgemv_generic.cpp b/gtestsuite/testsuite/level2/gemv/sgemv/sgemv_generic.cpp index f36f74e15..e4b467e83 100644 --- a/gtestsuite/testsuite/level2/gemv/sgemv/sgemv_generic.cpp +++ b/gtestsuite/testsuite/level2/gemv/sgemv/sgemv_generic.cpp @@ -110,7 +110,7 @@ INSTANTIATE_TEST_SUITE_P( sgemvGeneric, ::testing::Combine( ::testing::Values('c' -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE ,'r' #endif ), // storage format @@ -133,7 +133,7 @@ INSTANTIATE_TEST_SUITE_P( sgemvGeneric, ::testing::Combine( ::testing::Values('c' -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE ,'r' #endif ), // storage format @@ -156,7 +156,7 @@ INSTANTIATE_TEST_SUITE_P( sgemvGeneric, ::testing::Combine( ::testing::Values('c' -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE ,'r' #endif ), // storage format @@ -179,7 +179,7 @@ INSTANTIATE_TEST_SUITE_P( sgemvGeneric, ::testing::Combine( ::testing::Values('c' -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE ,'r' #endif ), // storage format @@ -202,7 +202,7 @@ INSTANTIATE_TEST_SUITE_P( sgemvGeneric, ::testing::Combine( ::testing::Values('c' -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE ,'r' #endif ), // storage format diff --git a/gtestsuite/testsuite/level2/gemv/zgemv/zgemv_evt.cpp b/gtestsuite/testsuite/level2/gemv/zgemv/zgemv_evt.cpp index 2ae44cc81..f34b7331e 100644 --- a/gtestsuite/testsuite/level2/gemv/zgemv/zgemv_evt.cpp +++ b/gtestsuite/testsuite/level2/gemv/zgemv/zgemv_evt.cpp @@ -121,7 +121,7 @@ INSTANTIATE_TEST_SUITE_P( zgemvEVT, ::testing::Combine( ::testing::Values('c' -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE ,'r' #endif ), // storage format @@ -187,7 +187,7 @@ INSTANTIATE_TEST_SUITE_P( zgemvEVT, ::testing::Combine( ::testing::Values('c' -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE ,'r' #endif ), // storage format @@ -242,7 +242,7 @@ INSTANTIATE_TEST_SUITE_P( zgemvEVT, ::testing::Combine( ::testing::Values('c' -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE ,'r' #endif ), // storage format @@ -293,7 +293,7 @@ INSTANTIATE_TEST_SUITE_P( zgemvEVT, ::testing::Combine( ::testing::Values('c' -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE ,'r' #endif ), // storage format diff --git a/gtestsuite/testsuite/level2/gemv/zgemv/zgemv_generic.cpp b/gtestsuite/testsuite/level2/gemv/zgemv/zgemv_generic.cpp index 66d4a19a2..77a2a7649 100644 --- a/gtestsuite/testsuite/level2/gemv/zgemv/zgemv_generic.cpp +++ b/gtestsuite/testsuite/level2/gemv/zgemv/zgemv_generic.cpp @@ -110,7 +110,7 @@ INSTANTIATE_TEST_SUITE_P( zgemvGeneric, ::testing::Combine( ::testing::Values('c' -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE ,'r' #endif ), // storage format @@ -133,7 +133,7 @@ INSTANTIATE_TEST_SUITE_P( zgemvGeneric, ::testing::Combine( ::testing::Values('c' -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE ,'r' #endif ), // storage format @@ -156,7 +156,7 @@ INSTANTIATE_TEST_SUITE_P( zgemvGeneric, ::testing::Combine( ::testing::Values('c' -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE ,'r' #endif ), // storage format @@ -179,7 +179,7 @@ INSTANTIATE_TEST_SUITE_P( zgemvGeneric, ::testing::Combine( ::testing::Values('c' -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE ,'r' #endif ), // storage format @@ -203,7 +203,7 @@ INSTANTIATE_TEST_SUITE_P( zgemvGeneric, ::testing::Combine( ::testing::Values('c' -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE ,'r' #endif ), // storage format diff --git a/gtestsuite/testsuite/level2/ger/cger_evt.cpp b/gtestsuite/testsuite/level2/ger/cger_evt.cpp index b2afefdc3..8b7aa5bdd 100644 --- a/gtestsuite/testsuite/level2/ger/cger_evt.cpp +++ b/gtestsuite/testsuite/level2/ger/cger_evt.cpp @@ -124,7 +124,7 @@ INSTANTIATE_TEST_SUITE_P( // storage scheme: row/col-stored matrix ::testing::Values( 'c' // row-stored tests are disabled for BLAS since BLAS only supports col-storage scheme. -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE , 'r' #endif ), @@ -169,7 +169,7 @@ INSTANTIATE_TEST_SUITE_P( // storage scheme: row/col-stored matrix ::testing::Values( 'c' // row-stored tests are disabled for BLAS since BLAS only supports col-storage scheme. -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE , 'r' #endif ), diff --git a/gtestsuite/testsuite/level2/ger/cger_generic.cpp b/gtestsuite/testsuite/level2/ger/cger_generic.cpp index 87d1ca03f..9cd8c3972 100644 --- a/gtestsuite/testsuite/level2/ger/cger_generic.cpp +++ b/gtestsuite/testsuite/level2/ger/cger_generic.cpp @@ -99,7 +99,7 @@ INSTANTIATE_TEST_SUITE_P( // storage scheme: row/col-stored matrix ::testing::Values( 'c' // row-stored tests are disabled for BLAS since BLAS only supports col-storage scheme. -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE , 'r' #endif ), @@ -134,7 +134,7 @@ INSTANTIATE_TEST_SUITE_P( // storage scheme: row/col-stored matrix ::testing::Values( 'c' // row-stored tests are disabled for BLAS since BLAS only supports col-storage scheme. -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE , 'r' #endif ), @@ -166,7 +166,7 @@ INSTANTIATE_TEST_SUITE_P( // storage scheme: row/col-stored matrix ::testing::Values( 'c' // row-stored tests are disabled for BLAS since BLAS only supports col-storage scheme. -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE , 'r' #endif ), @@ -200,7 +200,7 @@ INSTANTIATE_TEST_SUITE_P( // storage scheme: row/col-stored matrix ::testing::Values( 'c' // row-stored tests are disabled for BLAS since BLAS only supports col-storage scheme. -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE , 'r' #endif ), @@ -232,7 +232,7 @@ INSTANTIATE_TEST_SUITE_P( // storage scheme: row/col-stored matrix ::testing::Values( 'c' // row-stored tests are disabled for BLAS since BLAS only supports col-storage scheme. -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE , 'r' #endif ), @@ -263,7 +263,7 @@ INSTANTIATE_TEST_SUITE_P( // storage scheme: row/col-stored matrix ::testing::Values( 'c' // row-stored tests are disabled for BLAS since BLAS only supports col-storage scheme. -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE , 'r' #endif ), @@ -294,7 +294,7 @@ INSTANTIATE_TEST_SUITE_P( // storage scheme: row/col-stored matrix ::testing::Values( 'c' // row-stored tests are disabled for BLAS since BLAS only supports col-storage scheme. -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE , 'r' #endif ), diff --git a/gtestsuite/testsuite/level2/ger/dger_evt.cpp b/gtestsuite/testsuite/level2/ger/dger_evt.cpp index b50a6e386..181beeeb4 100644 --- a/gtestsuite/testsuite/level2/ger/dger_evt.cpp +++ b/gtestsuite/testsuite/level2/ger/dger_evt.cpp @@ -123,7 +123,7 @@ INSTANTIATE_TEST_SUITE_P( // storage scheme: row/col-stored matrix ::testing::Values( 'c' // row-stored tests are disabled for BLAS since BLAS only supports col-storage scheme. -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE , 'r' #endif ), @@ -168,7 +168,7 @@ INSTANTIATE_TEST_SUITE_P( // storage scheme: row/col-stored matrix ::testing::Values( 'c' // row-stored tests are disabled for BLAS since BLAS only supports col-storage scheme. -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE , 'r' #endif ), diff --git a/gtestsuite/testsuite/level2/ger/dger_generic.cpp b/gtestsuite/testsuite/level2/ger/dger_generic.cpp index 3afc5b95f..62985dcd3 100644 --- a/gtestsuite/testsuite/level2/ger/dger_generic.cpp +++ b/gtestsuite/testsuite/level2/ger/dger_generic.cpp @@ -97,7 +97,7 @@ INSTANTIATE_TEST_SUITE_P( // storage scheme: row/col-stored matrix ::testing::Values( 'c' // row-stored tests are disabled for BLAS since BLAS only supports col-storage scheme. -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE , 'r' #endif ), @@ -159,7 +159,7 @@ INSTANTIATE_TEST_SUITE_P( // storage scheme: row/col-stored matrix ::testing::Values( 'c' // row-stored tests are disabled for BLAS since BLAS only supports col-storage scheme. -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE , 'r' #endif ), @@ -193,7 +193,7 @@ INSTANTIATE_TEST_SUITE_P( // storage scheme: row/col-stored matrix ::testing::Values( 'c' // row-stored tests are disabled for BLAS since BLAS only supports col-storage scheme. -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE , 'r' #endif ), @@ -225,7 +225,7 @@ INSTANTIATE_TEST_SUITE_P( // storage scheme: row/col-stored matrix ::testing::Values( 'c' // row-stored tests are disabled for BLAS since BLAS only supports col-storage scheme. -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE , 'r' #endif ), @@ -256,7 +256,7 @@ INSTANTIATE_TEST_SUITE_P( // storage scheme: row/col-stored matrix ::testing::Values( 'c' // row-stored tests are disabled for BLAS since BLAS only supports col-storage scheme. -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE , 'r' #endif ), @@ -287,7 +287,7 @@ INSTANTIATE_TEST_SUITE_P( // storage scheme: row/col-stored matrix ::testing::Values( 'c' // row-stored tests are disabled for BLAS since BLAS only supports col-storage scheme. -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE , 'r' #endif ), diff --git a/gtestsuite/testsuite/level2/ger/ger.h b/gtestsuite/testsuite/level2/ger/ger.h index 5431416d5..294352705 100644 --- a/gtestsuite/testsuite/level2/ger/ger.h +++ b/gtestsuite/testsuite/level2/ger/ger.h @@ -81,6 +81,30 @@ static void ger_( char conjy, gtint_t m, gtint_t n, T* alpha, throw std::runtime_error("Error in testsuite/level2/ger.h: Invalid typename in ger_()."); } +template +static void ger_blis_impl( char conjy, gtint_t m, gtint_t n, T* alpha, + T* xp, gtint_t incx, T* yp, gtint_t incy, T* ap, gtint_t lda ) +{ + if constexpr (std::is_same::value) + sger_blis_impl( &m, &n, alpha, xp, &incx, yp, &incy, ap, &lda ); + else if constexpr (std::is_same::value) + dger_blis_impl( &m, &n, alpha, xp, &incx, yp, &incy, ap, &lda ); + else if constexpr (std::is_same::value) { + if( testinghelpers::chkconj( conjy ) ) + cgerc_blis_impl( &m, &n, alpha, xp, &incx, yp, &incy, ap, &lda ); + else + cgeru_blis_impl( &m, &n, alpha, xp, &incx, yp, &incy, ap, &lda ); + } + else if constexpr (std::is_same::value) { + if( testinghelpers::chkconj( conjy ) ) + zgerc_blis_impl( &m, &n, alpha, xp, &incx, yp, &incy, ap, &lda ); + else + zgeru_blis_impl( &m, &n, alpha, xp, &incx, yp, &incy, ap, &lda ); + } + else + throw std::runtime_error("Error in testsuite/level2/ger.h: Invalid typename in ger_blis_impl()."); +} + template static void cblas_ger( char storage, char conjy, gtint_t m, gtint_t n, T* alpha, T* xp, gtint_t incx,T* yp, gtint_t incy, T* ap, gtint_t lda ) @@ -185,6 +209,11 @@ static void ger( char storage, char conjx, char conjy, gtint_t m, gtint_t n, ger_( conjy, m, n, alpha, xp, incx, yp, incy, ap, lda ); else throw std::runtime_error("Error in testsuite/level2/ger.h: BLAS interface cannot be tested for row-major order."); +#elif TEST_BLAS_BLIS_IMPL + if( storage == 'c' || storage == 'C' ) + ger_blis_impl( conjy, m, n, alpha, xp, incx, yp, incy, ap, lda ); + else + throw std::runtime_error("Error in testsuite/level2/ger.h: BLAS_BLIS_IMPL interface cannot be tested for row-major order."); #elif TEST_CBLAS cblas_ger( storage, conjy, m, n, alpha, xp, incx, yp, incy, ap, lda ); #elif TEST_BLIS_TYPED diff --git a/gtestsuite/testsuite/level2/ger/ger_IIT_ERS.cpp b/gtestsuite/testsuite/level2/ger/ger_IIT_ERS.cpp index 89f790632..7961fb456 100644 --- a/gtestsuite/testsuite/level2/ger/ger_IIT_ERS.cpp +++ b/gtestsuite/testsuite/level2/ger/ger_IIT_ERS.cpp @@ -89,7 +89,7 @@ TYPED_TEST(ger_IIT_ERS, invalid_storage) #endif -#if defined(TEST_BLAS) || defined(TEST_CBLAS) +#if defined(TEST_BLAS_LIKE) || defined(TEST_CBLAS) /** * BLAS Invalid Input Tests(IIT): @@ -111,7 +111,7 @@ TYPED_TEST(ger_IIT_ERS, m_lt_zero_unitStride) T alpha = T{3}; // Test with nullptr for all suitable arguments that shouldn't be accessed. -#if defined(TEST_BLAS) +#if defined(TEST_BLAS_LIKE) ger( STORAGE, CONJ, CONJ, invalid_m, N, nullptr, nullptr, unit_inc, nullptr, unit_inc, nullptr, LDA ); #else @@ -154,7 +154,7 @@ TYPED_TEST(ger_IIT_ERS, m_lt_zero_nonUnitStride) T alpha = T{3}; // Test with nullptr for all suitable arguments that shouldn't be accessed. -#if defined(TEST_BLAS) +#if defined(TEST_BLAS_LIKE) ger( STORAGE, CONJ, CONJ, invalid_m, N, nullptr, nullptr, inc, nullptr, inc, nullptr, LDA ); #else @@ -197,7 +197,7 @@ TYPED_TEST(ger_IIT_ERS, n_lt_zero_unitStride) T alpha = T{3}; // Test with nullptr for all suitable arguments that shouldn't be accessed. -#if defined(TEST_BLAS) +#if defined(TEST_BLAS_LIKE) ger( STORAGE, CONJ, CONJ, M, invalid_n, nullptr, nullptr, unit_inc, nullptr, unit_inc, nullptr, LDA ); #else @@ -240,7 +240,7 @@ TYPED_TEST(ger_IIT_ERS, n_lt_zero_nonUnitStride) T alpha = T{3}; // Test with nullptr for all suitable arguments that shouldn't be accessed. -#if defined(TEST_BLAS) +#if defined(TEST_BLAS_LIKE) ger( STORAGE, CONJ, CONJ, M, invalid_n, nullptr, nullptr, inc, nullptr, inc, nullptr, LDA ); #else @@ -283,7 +283,7 @@ TYPED_TEST(ger_IIT_ERS, incx_eq_zero_unitStride) T alpha = T{3}; // Test with nullptr for all suitable arguments that shouldn't be accessed. -#if defined(TEST_BLAS) +#if defined(TEST_BLAS_LIKE) ger( STORAGE, CONJ, CONJ, M, N, nullptr, nullptr, invalid_incx, nullptr, unit_inc, nullptr, LDA ); #else @@ -326,7 +326,7 @@ TYPED_TEST(ger_IIT_ERS, incx_eq_zero_nonUnitStride) T alpha = T{3}; // Test with nullptr for all suitable arguments that shouldn't be accessed. -#if defined(TEST_BLAS) +#if defined(TEST_BLAS_LIKE) ger( STORAGE, CONJ, CONJ, M, N, nullptr, nullptr, invalid_incx, nullptr, inc, nullptr, LDA ); #else @@ -369,7 +369,7 @@ TYPED_TEST(ger_IIT_ERS, incy_eq_zero_unitStride) T alpha = T{3}; // Test with nullptr for all suitable arguments that shouldn't be accessed. -#if defined(TEST_BLAS) +#if defined(TEST_BLAS_LIKE) ger( STORAGE, CONJ, CONJ, M, N, nullptr, nullptr, unit_inc, nullptr, invalid_incy, nullptr, LDA ); #else @@ -412,7 +412,7 @@ TYPED_TEST(ger_IIT_ERS, incy_eq_zero_nonUnitStride) T alpha = T{3}; // Test with nullptr for all suitable arguments that shouldn't be accessed. -#if defined(TEST_BLAS) +#if defined(TEST_BLAS_LIKE) ger( STORAGE, CONJ, CONJ, M, N, nullptr, nullptr, inc, nullptr, invalid_incy, nullptr, LDA ); #else @@ -455,7 +455,7 @@ TYPED_TEST(ger_IIT_ERS, lda_lt_max_1_m_unitStride) T alpha = T{3}; // Test with nullptr for all suitable arguments that shouldn't be accessed. -#if defined(TEST_BLAS) +#if defined(TEST_BLAS_LIKE) ger( STORAGE, CONJ, CONJ, M, N, nullptr, nullptr, unit_inc, nullptr, unit_inc, nullptr, invalid_lda ); #else @@ -498,7 +498,7 @@ TYPED_TEST(ger_IIT_ERS, lda_lt_max_1_m_nonUnitStride) T alpha = T{3}; // Test with nullptr for all suitable arguments that shouldn't be accessed. -#if defined(TEST_BLAS) +#if defined(TEST_BLAS_LIKE) ger( STORAGE, CONJ, CONJ, M, N, nullptr, nullptr, inc, nullptr, inc, nullptr, invalid_lda ); #else @@ -549,7 +549,7 @@ TYPED_TEST(ger_IIT_ERS, m_eq_zero_unitStride) T alpha = T{3}; // Test with nullptr for all suitable arguments that shouldn't be accessed. -#if defined(TEST_BLAS) +#if defined(TEST_BLAS_LIKE) ger( STORAGE, CONJ, CONJ, invalid_m, N, nullptr, nullptr, unit_inc, nullptr, unit_inc, nullptr, LDA ); #else @@ -592,7 +592,7 @@ TYPED_TEST(ger_IIT_ERS, m_eq_zero_nonUnitStride) T alpha = T{3}; // Test with nullptr for all suitable arguments that shouldn't be accessed. -#if defined(TEST_BLAS) +#if defined(TEST_BLAS_LIKE) ger( STORAGE, CONJ, CONJ, invalid_m, N, nullptr, nullptr, inc, nullptr, inc, nullptr, LDA ); #else @@ -635,7 +635,7 @@ TYPED_TEST(ger_IIT_ERS, n_eq_zero_unitStride) T alpha = T{3}; // Test with nullptr for all suitable arguments that shouldn't be accessed. -#if defined(TEST_BLAS) +#if defined(TEST_BLAS_LIKE) ger( STORAGE, CONJ, CONJ, M, invalid_n, nullptr, nullptr, unit_inc, nullptr, unit_inc, nullptr, LDA ); #else @@ -678,7 +678,7 @@ TYPED_TEST(ger_IIT_ERS, n_eq_zero_nonUnitStride) T alpha = T{3}; // Test with nullptr for all suitable arguments that shouldn't be accessed. -#if defined(TEST_BLAS) +#if defined(TEST_BLAS_LIKE) ger( STORAGE, CONJ, CONJ, M, invalid_n, nullptr, nullptr, inc, nullptr, inc, nullptr, LDA ); #else diff --git a/gtestsuite/testsuite/level2/ger/sger_evt.cpp b/gtestsuite/testsuite/level2/ger/sger_evt.cpp index 9409cb59f..6eeaad6f3 100644 --- a/gtestsuite/testsuite/level2/ger/sger_evt.cpp +++ b/gtestsuite/testsuite/level2/ger/sger_evt.cpp @@ -123,7 +123,7 @@ INSTANTIATE_TEST_SUITE_P( // storage scheme: row/col-stored matrix ::testing::Values( 'c' // row-stored tests are disabled for BLAS since BLAS only supports col-storage scheme. -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE , 'r' #endif ), @@ -168,7 +168,7 @@ INSTANTIATE_TEST_SUITE_P( // storage scheme: row/col-stored matrix ::testing::Values( 'c' // row-stored tests are disabled for BLAS since BLAS only supports col-storage scheme. -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE , 'r' #endif ), diff --git a/gtestsuite/testsuite/level2/ger/sger_generic.cpp b/gtestsuite/testsuite/level2/ger/sger_generic.cpp index d8d7161e2..61b7dd863 100644 --- a/gtestsuite/testsuite/level2/ger/sger_generic.cpp +++ b/gtestsuite/testsuite/level2/ger/sger_generic.cpp @@ -97,7 +97,7 @@ INSTANTIATE_TEST_SUITE_P( // storage scheme: row/col-stored matrix ::testing::Values( 'c' // row-stored tests are disabled for BLAS since BLAS only supports col-storage scheme. -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE , 'r' #endif ), @@ -132,7 +132,7 @@ INSTANTIATE_TEST_SUITE_P( // storage scheme: row/col-stored matrix ::testing::Values( 'c' // row-stored tests are disabled for BLAS since BLAS only supports col-storage scheme. -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE , 'r' #endif ), @@ -164,7 +164,7 @@ INSTANTIATE_TEST_SUITE_P( // storage scheme: row/col-stored matrix ::testing::Values( 'c' // row-stored tests are disabled for BLAS since BLAS only supports col-storage scheme. -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE , 'r' #endif ), @@ -198,7 +198,7 @@ INSTANTIATE_TEST_SUITE_P( // storage scheme: row/col-stored matrix ::testing::Values( 'c' // row-stored tests are disabled for BLAS since BLAS only supports col-storage scheme. -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE , 'r' #endif ), @@ -230,7 +230,7 @@ INSTANTIATE_TEST_SUITE_P( // storage scheme: row/col-stored matrix ::testing::Values( 'c' // row-stored tests are disabled for BLAS since BLAS only supports col-storage scheme. -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE , 'r' #endif ), @@ -260,7 +260,7 @@ INSTANTIATE_TEST_SUITE_P( // storage scheme: row/col-stored matrix ::testing::Values( 'c' // row-stored tests are disabled for BLAS since BLAS only supports col-storage scheme. -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE , 'r' #endif ), @@ -290,7 +290,7 @@ INSTANTIATE_TEST_SUITE_P( // storage scheme: row/col-stored matrix ::testing::Values( 'c' // row-stored tests are disabled for BLAS since BLAS only supports col-storage scheme. -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE , 'r' #endif ), diff --git a/gtestsuite/testsuite/level2/ger/zger_evt.cpp b/gtestsuite/testsuite/level2/ger/zger_evt.cpp index 644092dd3..fe6694157 100644 --- a/gtestsuite/testsuite/level2/ger/zger_evt.cpp +++ b/gtestsuite/testsuite/level2/ger/zger_evt.cpp @@ -124,7 +124,7 @@ INSTANTIATE_TEST_SUITE_P( // storage scheme: row/col-stored matrix ::testing::Values( 'c' // row-stored tests are disabled for BLAS since BLAS only supports col-storage scheme. -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE , 'r' #endif ), @@ -169,7 +169,7 @@ INSTANTIATE_TEST_SUITE_P( // storage scheme: row/col-stored matrix ::testing::Values( 'c' // row-stored tests are disabled for BLAS since BLAS only supports col-storage scheme. -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE , 'r' #endif ), diff --git a/gtestsuite/testsuite/level2/ger/zger_generic.cpp b/gtestsuite/testsuite/level2/ger/zger_generic.cpp index aadd01399..18a53bd16 100644 --- a/gtestsuite/testsuite/level2/ger/zger_generic.cpp +++ b/gtestsuite/testsuite/level2/ger/zger_generic.cpp @@ -97,7 +97,7 @@ INSTANTIATE_TEST_SUITE_P( // storage scheme: row/col-stored matrix ::testing::Values( 'c' // row-stored tests are disabled for BLAS since BLAS only supports col-storage scheme. -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE , 'r' #endif ), @@ -132,7 +132,7 @@ INSTANTIATE_TEST_SUITE_P( // storage scheme: row/col-stored matrix ::testing::Values( 'c' // row-stored tests are disabled for BLAS since BLAS only supports col-storage scheme. -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE , 'r' #endif ), @@ -164,7 +164,7 @@ INSTANTIATE_TEST_SUITE_P( // storage scheme: row/col-stored matrix ::testing::Values( 'c' // row-stored tests are disabled for BLAS since BLAS only supports col-storage scheme. -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE , 'r' #endif ), @@ -198,7 +198,7 @@ INSTANTIATE_TEST_SUITE_P( // storage scheme: row/col-stored matrix ::testing::Values( 'c' // row-stored tests are disabled for BLAS since BLAS only supports col-storage scheme. -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE , 'r' #endif ), @@ -230,7 +230,7 @@ INSTANTIATE_TEST_SUITE_P( // storage scheme: row/col-stored matrix ::testing::Values( 'c' // row-stored tests are disabled for BLAS since BLAS only supports col-storage scheme. -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE , 'r' #endif ), @@ -260,7 +260,7 @@ INSTANTIATE_TEST_SUITE_P( // storage scheme: row/col-stored matrix ::testing::Values( 'c' // row-stored tests are disabled for BLAS since BLAS only supports col-storage scheme. -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE , 'r' #endif ), @@ -290,7 +290,7 @@ INSTANTIATE_TEST_SUITE_P( // storage scheme: row/col-stored matrix ::testing::Values( 'c' // row-stored tests are disabled for BLAS since BLAS only supports col-storage scheme. -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE , 'r' #endif ), diff --git a/gtestsuite/testsuite/level2/hemv/chemv_generic.cpp b/gtestsuite/testsuite/level2/hemv/chemv_generic.cpp index fcf632242..cbf780634 100644 --- a/gtestsuite/testsuite/level2/hemv/chemv_generic.cpp +++ b/gtestsuite/testsuite/level2/hemv/chemv_generic.cpp @@ -104,7 +104,7 @@ INSTANTIATE_TEST_SUITE_P( chemvGeneric, ::testing::Combine( ::testing::Values('c' -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE ,'r' #endif ), // storage format diff --git a/gtestsuite/testsuite/level2/hemv/hemv.h b/gtestsuite/testsuite/level2/hemv/hemv.h index bcdd35cc1..4adf5e68c 100644 --- a/gtestsuite/testsuite/level2/hemv/hemv.h +++ b/gtestsuite/testsuite/level2/hemv/hemv.h @@ -71,6 +71,18 @@ static void hemv_( char uploa, gtint_t n, T* alpha, T* ap, gtint_t lda, throw std::runtime_error("Error in testsuite/level2/hemv.h: Invalid typename in hemv_()."); } +template +static void hemv_blis_impl( char uploa, gtint_t n, T* alpha, T* ap, gtint_t lda, + T* xp, gtint_t incx, T* beta, T* yp, gtint_t incy ) +{ + if constexpr (std::is_same::value) + chemv_blis_impl( &uploa, &n, alpha, ap, &lda, xp, &incx, beta, yp, &incy ); + else if constexpr (std::is_same::value) + zhemv_blis_impl( &uploa, &n, alpha, ap, &lda, xp, &incx, beta, yp, &incy ); + else + throw std::runtime_error("Error in testsuite/level2/hemv.h: Invalid typename in hemv_blis_impl()."); +} + template static void cblas_hemv( char storage, char uploa, gtint_t n, T* alpha, T* ap, gtint_t lda, T* xp, gtint_t incx, T* beta, T* yp, gtint_t incy ) @@ -167,6 +179,11 @@ static void hemv( char storage, char uploa, char conja, char conjx, gtint_t n, hemv_( uploa, n, alpha, ap, lda, xp, incx, beta, yp, incy ); else throw std::runtime_error("Error in testsuite/level2/hemv.h: BLAS interface cannot be tested for row-major order."); +#elif TEST_BLAS_BLIS_IMPL + if( storage == 'c' || storage == 'C' ) + hemv_blis_impl( uploa, n, alpha, ap, lda, xp, incx, beta, yp, incy ); + else + throw std::runtime_error("Error in testsuite/level2/hemv.h: BLAS_BLIS_IMPL interface cannot be tested for row-major order."); #elif TEST_CBLAS cblas_hemv( storage, uploa, n, alpha, ap, lda, xp, incx, beta, yp, incy ); #elif TEST_BLIS_TYPED diff --git a/gtestsuite/testsuite/level2/hemv/zhemv_generic.cpp b/gtestsuite/testsuite/level2/hemv/zhemv_generic.cpp index ea8f43ca5..cb5f7f7c1 100644 --- a/gtestsuite/testsuite/level2/hemv/zhemv_generic.cpp +++ b/gtestsuite/testsuite/level2/hemv/zhemv_generic.cpp @@ -104,7 +104,7 @@ INSTANTIATE_TEST_SUITE_P( zhemvGeneric, ::testing::Combine( ::testing::Values('c' -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE ,'r' #endif ), // storage format diff --git a/gtestsuite/testsuite/level2/her/cher_generic.cpp b/gtestsuite/testsuite/level2/her/cher_generic.cpp index 396a55034..5451ebe20 100644 --- a/gtestsuite/testsuite/level2/her/cher_generic.cpp +++ b/gtestsuite/testsuite/level2/her/cher_generic.cpp @@ -91,7 +91,7 @@ INSTANTIATE_TEST_SUITE_P( cherGeneric, ::testing::Combine( ::testing::Values('c' -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE ,'r' #endif ), // storage format diff --git a/gtestsuite/testsuite/level2/her/her.h b/gtestsuite/testsuite/level2/her/her.h index 87285b3f3..6c5d1e1c9 100644 --- a/gtestsuite/testsuite/level2/her/her.h +++ b/gtestsuite/testsuite/level2/her/her.h @@ -62,6 +62,18 @@ static void her_( char uploa, gtint_t n, Tr* alpha, T* xp, gtint_t incx, throw std::runtime_error("Error in testsuite/level2/her.h: Invalid typename in her_()."); } +template +static void her_blis_impl( char uploa, gtint_t n, Tr* alpha, T* xp, gtint_t incx, + T* ap, gtint_t lda ) +{ + if constexpr (std::is_same::value) + cher_blis_impl( &uploa, &n, alpha, xp, &incx, ap, &lda ); + else if constexpr (std::is_same::value) + zher_blis_impl( &uploa, &n, alpha, xp, &incx, ap, &lda ); + else + throw std::runtime_error("Error in testsuite/level2/her.h: Invalid typename in her_blis_impl()."); +} + template static void cblas_her( char storage, char uploa, gtint_t n, Tr* alpha, T* xp, gtint_t incx, T* ap, gtint_t lda ) @@ -144,6 +156,11 @@ static void her( char storage, char uploa, char conj_x, gtint_t n, her_( uploa, n, alpha, xp, incx, ap, lda ); else throw std::runtime_error("Error in testsuite/level2/her.h: BLAS interface cannot be tested for row-major order."); +#elif TEST_BLAS_BLIS_IMPL + if( storage == 'c' || storage == 'C' ) + her_blis_impl( uploa, n, alpha, xp, incx, ap, lda ); + else + throw std::runtime_error("Error in testsuite/level2/her.h: BLAS_BLIS_IMPL interface cannot be tested for row-major order."); #elif TEST_CBLAS cblas_her( storage, uploa, n, alpha, xp, incx, ap, lda ); #elif TEST_BLIS_TYPED diff --git a/gtestsuite/testsuite/level2/her/zher_generic.cpp b/gtestsuite/testsuite/level2/her/zher_generic.cpp index 4cebe33bf..167998388 100644 --- a/gtestsuite/testsuite/level2/her/zher_generic.cpp +++ b/gtestsuite/testsuite/level2/her/zher_generic.cpp @@ -92,7 +92,7 @@ INSTANTIATE_TEST_SUITE_P( zherGeneric, ::testing::Combine( ::testing::Values('c' -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE ,'r' #endif ), // storage format diff --git a/gtestsuite/testsuite/level2/her2/cher2_generic.cpp b/gtestsuite/testsuite/level2/her2/cher2_generic.cpp index 9e13ed5c0..d0e02fbd6 100644 --- a/gtestsuite/testsuite/level2/her2/cher2_generic.cpp +++ b/gtestsuite/testsuite/level2/her2/cher2_generic.cpp @@ -98,7 +98,7 @@ INSTANTIATE_TEST_SUITE_P( cher2Generic, ::testing::Combine( ::testing::Values('c' -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE ,'r' #endif ), // storage format diff --git a/gtestsuite/testsuite/level2/her2/her2.h b/gtestsuite/testsuite/level2/her2/her2.h index 29b6992ba..8e7c8657f 100644 --- a/gtestsuite/testsuite/level2/her2/her2.h +++ b/gtestsuite/testsuite/level2/her2/her2.h @@ -65,6 +65,18 @@ static void her2_( char uploa, gtint_t n, T* alpha, T* xp, gtint_t incx, throw std::runtime_error("Error in testsuite/level2/her2.h: Invalid typename in her2_()."); } +template +static void her2_blis_impl( char uploa, gtint_t n, T* alpha, T* xp, gtint_t incx, + T* yp, gtint_t incy, T* ap, gtint_t lda ) +{ + if constexpr (std::is_same::value) + cher2_blis_impl( &uploa, &n, alpha, xp, &incx, yp, &incy, ap, &lda ); + else if constexpr (std::is_same::value) + zher2_blis_impl( &uploa, &n, alpha, xp, &incx, yp, &incy, ap, &lda ); + else + throw std::runtime_error("Error in testsuite/level2/her2.h: Invalid typename in her2_blis_impl()."); +} + template static void cblas_her2( char storage, char uploa, gtint_t n, T* alpha, T* xp, gtint_t incx, T* yp, gtint_t incy, T* ap, gtint_t lda ) @@ -159,6 +171,11 @@ static void her2( char storage, char uploa, char conj_x, char conj_y, gtint_t n, her2_( uploa, n, alpha, xp, incx, yp, incy, ap, lda ); else throw std::runtime_error("Error in testsuite/level2/her2.h: BLAS interface cannot be tested for row-major order."); +#elif TEST_BLAS_BLIS_IMPL + if( storage == 'c' || storage == 'C' ) + her2_blis_impl( uploa, n, alpha, xp, incx, yp, incy, ap, lda ); + else + throw std::runtime_error("Error in testsuite/level2/her2.h: BLAS_BLIS_IMPL interface cannot be tested for row-major order."); #elif TEST_CBLAS cblas_her2( storage, uploa, n, alpha, xp, incx, yp, incy, ap, lda ); #elif TEST_BLIS_TYPED diff --git a/gtestsuite/testsuite/level2/her2/zher2_generic.cpp b/gtestsuite/testsuite/level2/her2/zher2_generic.cpp index ad740a328..fe17cffd8 100644 --- a/gtestsuite/testsuite/level2/her2/zher2_generic.cpp +++ b/gtestsuite/testsuite/level2/her2/zher2_generic.cpp @@ -98,7 +98,7 @@ INSTANTIATE_TEST_SUITE_P( zher2Generic, ::testing::Combine( ::testing::Values('c' -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE ,'r' #endif ), // storage format diff --git a/gtestsuite/testsuite/level2/symv/dsymv_generic.cpp b/gtestsuite/testsuite/level2/symv/dsymv_generic.cpp index e74e20287..d701bc1ab 100644 --- a/gtestsuite/testsuite/level2/symv/dsymv_generic.cpp +++ b/gtestsuite/testsuite/level2/symv/dsymv_generic.cpp @@ -103,7 +103,7 @@ INSTANTIATE_TEST_SUITE_P( dsymvGeneric, ::testing::Combine( ::testing::Values('c' -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE ,'r' #endif ), // storage format diff --git a/gtestsuite/testsuite/level2/symv/ssymv_generic.cpp b/gtestsuite/testsuite/level2/symv/ssymv_generic.cpp index 9c6ca5517..578e95fcf 100644 --- a/gtestsuite/testsuite/level2/symv/ssymv_generic.cpp +++ b/gtestsuite/testsuite/level2/symv/ssymv_generic.cpp @@ -103,7 +103,7 @@ INSTANTIATE_TEST_SUITE_P( ssymvGeneric, ::testing::Combine( ::testing::Values('c' -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE ,'r' #endif ), // storage format diff --git a/gtestsuite/testsuite/level2/symv/symv.h b/gtestsuite/testsuite/level2/symv/symv.h index 29199c15c..0051857fb 100644 --- a/gtestsuite/testsuite/level2/symv/symv.h +++ b/gtestsuite/testsuite/level2/symv/symv.h @@ -66,6 +66,18 @@ static void symv_( char uploa, gtint_t n, T* alpha, T* ap, gtint_t lda, throw std::runtime_error("Error in testsuite/level2/symv.h: Invalid typename in symv_()."); } +template +static void symv_blis_impl( char uploa, gtint_t n, T* alpha, T* ap, gtint_t lda, + T* xp, gtint_t incx, T* beta, T* yp, gtint_t incy ) +{ + if constexpr (std::is_same::value) + ssymv_blis_impl( &uploa, &n, alpha, ap, &lda, xp, &incx, beta, yp, &incy ); + else if constexpr (std::is_same::value) + dsymv_blis_impl( &uploa, &n, alpha, ap, &lda, xp, &incx, beta, yp, &incy ); + else + throw std::runtime_error("Error in testsuite/level2/symv.h: Invalid typename in symv_blis_impl()."); +} + template static void cblas_symv( char storage, char uploa, gtint_t n, T* alpha, T* ap, gtint_t lda, T* xp, gtint_t incx, T* beta, T* yp, gtint_t incy ) @@ -162,6 +174,11 @@ static void symv( char storage, char uploa, char conja, char conjx, gtint_t n, symv_( uploa, n, alpha, ap, lda, xp, incx, beta, yp, incy ); else throw std::runtime_error("Error in testsuite/level2/symv.h: BLAS interface cannot be tested for row-major order."); +#elif TEST_BLAS_BLIS_IMPL + if( storage == 'c' || storage == 'C' ) + symv_blis_impl( uploa, n, alpha, ap, lda, xp, incx, beta, yp, incy ); + else + throw std::runtime_error("Error in testsuite/level2/symv.h: BLAS_BLIS_IMPL interface cannot be tested for row-major order."); #elif TEST_CBLAS cblas_symv( storage, uploa, n, alpha, ap, lda, xp, incx, beta, yp, incy ); #elif TEST_BLIS_TYPED diff --git a/gtestsuite/testsuite/level2/syr/dsyr_generic.cpp b/gtestsuite/testsuite/level2/syr/dsyr_generic.cpp index 200788555..a597f8262 100644 --- a/gtestsuite/testsuite/level2/syr/dsyr_generic.cpp +++ b/gtestsuite/testsuite/level2/syr/dsyr_generic.cpp @@ -90,7 +90,7 @@ INSTANTIATE_TEST_SUITE_P( dsyrGeneric, ::testing::Combine( ::testing::Values('c' -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE ,'r' #endif ), // storage format diff --git a/gtestsuite/testsuite/level2/syr/ssyr_generic.cpp b/gtestsuite/testsuite/level2/syr/ssyr_generic.cpp index 396ad082b..c07722751 100644 --- a/gtestsuite/testsuite/level2/syr/ssyr_generic.cpp +++ b/gtestsuite/testsuite/level2/syr/ssyr_generic.cpp @@ -90,7 +90,7 @@ INSTANTIATE_TEST_SUITE_P( ssyrGeneric, ::testing::Combine( ::testing::Values('c' -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE ,'r' #endif ), // storage format diff --git a/gtestsuite/testsuite/level2/syr/syr.h b/gtestsuite/testsuite/level2/syr/syr.h index ce6a3dad5..f53b8f227 100644 --- a/gtestsuite/testsuite/level2/syr/syr.h +++ b/gtestsuite/testsuite/level2/syr/syr.h @@ -64,6 +64,18 @@ static void syr_( char uploa, gtint_t n, T* alpha, T* xp, gtint_t incx, throw std::runtime_error("Error in testsuite/level2/syr.h: Invalid typename in syr_()."); } +template +static void syr_blis_impl( char uploa, gtint_t n, T* alpha, T* xp, gtint_t incx, + T* ap, gtint_t lda ) +{ + if constexpr (std::is_same::value) + ssyr_blis_impl( &uploa, &n, alpha, xp, &incx, ap, &lda ); + else if constexpr (std::is_same::value) + dsyr_blis_impl( &uploa, &n, alpha, xp, &incx, ap, &lda ); + else + throw std::runtime_error("Error in testsuite/level2/syr.h: Invalid typename in syr_blis_impl()."); +} + template static void cblas_syr( char storage, char uploa, gtint_t n, T* alpha, T* xp, gtint_t incx, T* ap, gtint_t lda ) @@ -146,6 +158,11 @@ static void syr( char storage, char uploa, char conj_x, gtint_t n, T* alpha, syr_( uploa, n, alpha, xp, incx, ap, lda ); else throw std::runtime_error("Error in testsuite/level2/syr.h: BLAS interface cannot be tested for row-major order."); +#elif TEST_BLAS_BLIS_IMPL + if( storage == 'c' || storage == 'C' ) + syr_blis_impl( uploa, n, alpha, xp, incx, ap, lda ); + else + throw std::runtime_error("Error in testsuite/level2/syr.h: BLAS_BLIS_IMPL interface cannot be tested for row-major order."); #elif TEST_CBLAS cblas_syr( storage, uploa, n, alpha, xp, incx, ap, lda ); #elif TEST_BLIS_TYPED diff --git a/gtestsuite/testsuite/level2/syr2/dsyr2_generic.cpp b/gtestsuite/testsuite/level2/syr2/dsyr2_generic.cpp index d4181d4bb..37260a2a0 100644 --- a/gtestsuite/testsuite/level2/syr2/dsyr2_generic.cpp +++ b/gtestsuite/testsuite/level2/syr2/dsyr2_generic.cpp @@ -96,7 +96,7 @@ INSTANTIATE_TEST_SUITE_P( dsyr2Generic, ::testing::Combine( ::testing::Values('c' -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE ,'r' #endif ), // storage format diff --git a/gtestsuite/testsuite/level2/syr2/ssyr2_generic.cpp b/gtestsuite/testsuite/level2/syr2/ssyr2_generic.cpp index 67e07f0ca..541672de3 100644 --- a/gtestsuite/testsuite/level2/syr2/ssyr2_generic.cpp +++ b/gtestsuite/testsuite/level2/syr2/ssyr2_generic.cpp @@ -96,7 +96,7 @@ INSTANTIATE_TEST_SUITE_P( ssyr2Generic, ::testing::Combine( ::testing::Values('c' -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE ,'r' #endif ), // storage format diff --git a/gtestsuite/testsuite/level2/syr2/syr2.h b/gtestsuite/testsuite/level2/syr2/syr2.h index 8a655f247..45c9fb9dc 100644 --- a/gtestsuite/testsuite/level2/syr2/syr2.h +++ b/gtestsuite/testsuite/level2/syr2/syr2.h @@ -65,6 +65,18 @@ static void syr2_( char uploa, gtint_t n, T* alpha, T* xp, gtint_t incx, throw std::runtime_error("Error in testsuite/level2/syr2.h: Invalid typename in syr2_()."); } +template +static void syr2_blis_impl( char uploa, gtint_t n, T* alpha, T* xp, gtint_t incx, + T* yp, gtint_t incy, T* ap, gtint_t lda ) +{ + if constexpr (std::is_same::value) + ssyr2_blis_impl( &uploa, &n, alpha, xp, &incx, yp, &incy, ap, &lda ); + else if constexpr (std::is_same::value) + dsyr2_blis_impl( &uploa, &n, alpha, xp, &incx, yp, &incy, ap, &lda ); + else + throw std::runtime_error("Error in testsuite/level2/syr2.h: Invalid typename in syr2_blis_impl()."); +} + template static void cblas_syr2( char storage, char uploa, gtint_t n, T* alpha, T* xp, gtint_t incx, T* yp, gtint_t incy, T* ap, gtint_t lda ) @@ -159,6 +171,11 @@ static void syr2( char storage, char uploa, char conj_x, char conj_y, gtint_t n, syr2_( uploa, n, alpha, xp, incx, yp, incy, ap, lda ); else throw std::runtime_error("Error in testsuite/level2/syr2.h: BLAS interface cannot be tested for row-major order."); +#elif TEST_BLAS_BLIS_IMPL + if( storage == 'c' || storage == 'C' ) + syr2_blis_impl( uploa, n, alpha, xp, incx, yp, incy, ap, lda ); + else + throw std::runtime_error("Error in testsuite/level2/syr2.h: BLAS_BLIS_IMPL interface cannot be tested for row-major order."); #elif TEST_CBLAS cblas_syr2( storage, uploa, n, alpha, xp, incx, yp, incy, ap, lda ); #elif TEST_BLIS_TYPED diff --git a/gtestsuite/testsuite/level2/trmv/ctrmv_generic.cpp b/gtestsuite/testsuite/level2/trmv/ctrmv_generic.cpp index a82923416..e9f4f4cfc 100644 --- a/gtestsuite/testsuite/level2/trmv/ctrmv_generic.cpp +++ b/gtestsuite/testsuite/level2/trmv/ctrmv_generic.cpp @@ -97,7 +97,7 @@ INSTANTIATE_TEST_SUITE_P( ctrmvGeneric, ::testing::Combine( ::testing::Values('c' -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE ,'r' #endif ), // storage format diff --git a/gtestsuite/testsuite/level2/trmv/dtrmv_generic.cpp b/gtestsuite/testsuite/level2/trmv/dtrmv_generic.cpp index 5ba5dab08..22744b7f8 100644 --- a/gtestsuite/testsuite/level2/trmv/dtrmv_generic.cpp +++ b/gtestsuite/testsuite/level2/trmv/dtrmv_generic.cpp @@ -98,7 +98,7 @@ INSTANTIATE_TEST_SUITE_P( dtrmvGeneric, ::testing::Combine( ::testing::Values('c' -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE ,'r' #endif ), // storage format diff --git a/gtestsuite/testsuite/level2/trmv/strmv_generic.cpp b/gtestsuite/testsuite/level2/trmv/strmv_generic.cpp index 3dbe39885..d0a316d9b 100644 --- a/gtestsuite/testsuite/level2/trmv/strmv_generic.cpp +++ b/gtestsuite/testsuite/level2/trmv/strmv_generic.cpp @@ -98,7 +98,7 @@ INSTANTIATE_TEST_SUITE_P( strmvGeneric, ::testing::Combine( ::testing::Values('c' -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE ,'r' #endif ), // storage format diff --git a/gtestsuite/testsuite/level2/trmv/trmv.h b/gtestsuite/testsuite/level2/trmv/trmv.h index 0417a30cd..e109bb6da 100644 --- a/gtestsuite/testsuite/level2/trmv/trmv.h +++ b/gtestsuite/testsuite/level2/trmv/trmv.h @@ -70,6 +70,22 @@ static void trmv_( char uploa, char transa, char diaga, gtint_t n, throw std::runtime_error("Error in testsuite/level2/trmv.h: Invalid typename in trmv_()."); } +template +static void trmv_blis_impl( char uploa, char transa, char diaga, gtint_t n, + T *ap, gtint_t lda, T *xp, gtint_t incx ) +{ + if constexpr (std::is_same::value) + strmv_blis_impl( &uploa, &transa, &diaga, &n, ap, &lda, xp, &incx ); + else if constexpr (std::is_same::value) + dtrmv_blis_impl( &uploa, &transa, &diaga, &n, ap, &lda, xp, &incx ); + else if constexpr (std::is_same::value) + ctrmv_blis_impl( &uploa, &transa, &diaga, &n, ap, &lda, xp, &incx ); + else if constexpr (std::is_same::value) + ztrmv_blis_impl( &uploa, &transa, &diaga, &n, ap, &lda, xp, &incx ); + else + throw std::runtime_error("Error in testsuite/level2/trmv.h: Invalid typename in trmv_blis_impl()."); +} + template static void cblas_trmv( char storage, char uploa, char transa, char diaga, gtint_t n, T *ap, gtint_t lda, T *xp, gtint_t incx ) @@ -135,7 +151,7 @@ template static void trmv( char storage, char uploa, char transa, char diaga, gtint_t n, T *alpha, T *ap, gtint_t lda, T *xp, gtint_t incx ) { -#if (defined TEST_BLAS || defined TEST_CBLAS) +#if (defined TEST_BLAS_LIKE || defined TEST_CBLAS) T one; testinghelpers::initone(one); #endif @@ -176,6 +192,14 @@ static void trmv( char storage, char uploa, char transa, char diaga, throw std::runtime_error("Error in testsuite/level2/trmv.h: BLAS interface cannot be tested for alpha != one."); else throw std::runtime_error("Error in testsuite/level2/trmv.h: BLAS interface cannot be tested for row-major order."); +#elif TEST_BLAS_BLIS_IMPL + if(( storage == 'c' || storage == 'C' )) + if( *alpha == one ) + trmv_blis_impl( uploa, transa, diaga, n, ap, lda, xp, incx ); + else + throw std::runtime_error("Error in testsuite/level2/trmv.h: BLAS_BLIS_IMPL interface cannot be tested for alpha != one."); + else + throw std::runtime_error("Error in testsuite/level2/trmv.h: BLAS_BLIS_IMPL interface cannot be tested for row-major order."); #elif TEST_CBLAS if( *alpha == one ) cblas_trmv( storage, uploa, transa, diaga, n, ap, lda, xp, incx ); diff --git a/gtestsuite/testsuite/level2/trmv/trmv_IIT_ERS_test.cpp b/gtestsuite/testsuite/level2/trmv/trmv_IIT_ERS_test.cpp index 0e9d4f4b9..59a648d78 100644 --- a/gtestsuite/testsuite/level2/trmv/trmv_IIT_ERS_test.cpp +++ b/gtestsuite/testsuite/level2/trmv/trmv_IIT_ERS_test.cpp @@ -89,7 +89,7 @@ TYPED_TEST(trmv_IIT_ERS, invalid_storage) #endif -#if defined(TEST_BLAS) || defined(TEST_CBLAS) +#if defined(TEST_BLAS_LIKE) || defined(TEST_CBLAS) /* Incorrect Input Testing(IIT) diff --git a/gtestsuite/testsuite/level2/trmv/ztrmv_generic.cpp b/gtestsuite/testsuite/level2/trmv/ztrmv_generic.cpp index b8aaf736b..b5c922aa9 100644 --- a/gtestsuite/testsuite/level2/trmv/ztrmv_generic.cpp +++ b/gtestsuite/testsuite/level2/trmv/ztrmv_generic.cpp @@ -97,7 +97,7 @@ INSTANTIATE_TEST_SUITE_P( ztrmvGeneric, ::testing::Combine( ::testing::Values('c' -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE ,'r' #endif ), // storage format diff --git a/gtestsuite/testsuite/level2/trsv/IIT_ERS/trsv_IIT_ERS_test.cpp b/gtestsuite/testsuite/level2/trsv/IIT_ERS/trsv_IIT_ERS_test.cpp index 47e9f5282..46f8ad8df 100644 --- a/gtestsuite/testsuite/level2/trsv/IIT_ERS/trsv_IIT_ERS_test.cpp +++ b/gtestsuite/testsuite/level2/trsv/IIT_ERS/trsv_IIT_ERS_test.cpp @@ -89,7 +89,7 @@ TYPED_TEST(trsv_IIT_ERS, invalid_storage) #endif -#if defined(TEST_BLAS) || defined(TEST_CBLAS) +#if defined(TEST_BLAS_LIKE) || defined(TEST_CBLAS) /* Incorrect Input Testing(IIT) diff --git a/gtestsuite/testsuite/level2/trsv/ctrsv/ctrsv_generic.cpp b/gtestsuite/testsuite/level2/trsv/ctrsv/ctrsv_generic.cpp index 8b4cdc59b..2829eb336 100644 --- a/gtestsuite/testsuite/level2/trsv/ctrsv/ctrsv_generic.cpp +++ b/gtestsuite/testsuite/level2/trsv/ctrsv/ctrsv_generic.cpp @@ -98,7 +98,7 @@ INSTANTIATE_TEST_SUITE_P( ctrsvGeneric, ::testing::Combine( ::testing::Values('c' -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE ,'r' #endif ), // storage format diff --git a/gtestsuite/testsuite/level2/trsv/dtrsv/dtrsv_evt.cpp b/gtestsuite/testsuite/level2/trsv/dtrsv/dtrsv_evt.cpp index 42e7f94be..43ba31811 100644 --- a/gtestsuite/testsuite/level2/trsv/dtrsv/dtrsv_evt.cpp +++ b/gtestsuite/testsuite/level2/trsv/dtrsv/dtrsv_evt.cpp @@ -104,7 +104,7 @@ INSTANTIATE_TEST_SUITE_P( dtrsvEVT, ::testing::Combine( ::testing::Values('c' -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE ,'r' #endif ), // storage format diff --git a/gtestsuite/testsuite/level2/trsv/dtrsv/dtrsv_generic.cpp b/gtestsuite/testsuite/level2/trsv/dtrsv/dtrsv_generic.cpp index 682c7f097..bae1397b9 100644 --- a/gtestsuite/testsuite/level2/trsv/dtrsv/dtrsv_generic.cpp +++ b/gtestsuite/testsuite/level2/trsv/dtrsv/dtrsv_generic.cpp @@ -99,7 +99,7 @@ INSTANTIATE_TEST_SUITE_P( dtrsvGeneric, ::testing::Combine( ::testing::Values('c' -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE ,'r' #endif ), // storage format diff --git a/gtestsuite/testsuite/level2/trsv/strsv/strsv_generic.cpp b/gtestsuite/testsuite/level2/trsv/strsv/strsv_generic.cpp index 812d46f02..cc7222a8c 100644 --- a/gtestsuite/testsuite/level2/trsv/strsv/strsv_generic.cpp +++ b/gtestsuite/testsuite/level2/trsv/strsv/strsv_generic.cpp @@ -96,7 +96,7 @@ INSTANTIATE_TEST_SUITE_P( strsvGeneric, ::testing::Combine( ::testing::Values('c' -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE ,'r' #endif ), // storage format diff --git a/gtestsuite/testsuite/level2/trsv/trsv.h b/gtestsuite/testsuite/level2/trsv/trsv.h index cf18c955d..55184f055 100644 --- a/gtestsuite/testsuite/level2/trsv/trsv.h +++ b/gtestsuite/testsuite/level2/trsv/trsv.h @@ -70,6 +70,22 @@ static void trsv_( char uploa, char transa, char diaga, gtint_t n, throw std::runtime_error("Error in testsuite/level2/trsv.h: Invalid typename in trsv_()."); } +template +static void trsv_blis_impl( char uploa, char transa, char diaga, gtint_t n, + T *ap, gtint_t lda, T *xp, gtint_t incx ) +{ + if constexpr (std::is_same::value) + strsv_blis_impl( &uploa, &transa, &diaga, &n, ap, &lda, xp, &incx ); + else if constexpr (std::is_same::value) + dtrsv_blis_impl( &uploa, &transa, &diaga, &n, ap, &lda, xp, &incx ); + else if constexpr (std::is_same::value) + ctrsv_blis_impl( &uploa, &transa, &diaga, &n, ap, &lda, xp, &incx ); + else if constexpr (std::is_same::value) + ztrsv_blis_impl( &uploa, &transa, &diaga, &n, ap, &lda, xp, &incx ); + else + throw std::runtime_error("Error in testsuite/level2/trsv.h: Invalid typename in trsv_blis_impl()."); +} + template static void cblas_trsv( char storage, char uploa, char transa, char diaga, gtint_t n, T *ap, gtint_t lda, T *xp, gtint_t incx ) @@ -135,7 +151,7 @@ template static void trsv( char storage, char uploa, char transa, char diaga, gtint_t n, T *alpha, T *ap, gtint_t lda, T *xp, gtint_t incx ) { -#if (defined TEST_BLAS || defined TEST_CBLAS) +#if (defined TEST_BLAS_LIKE || defined TEST_CBLAS) T one; testinghelpers::initone(one); #endif @@ -176,6 +192,14 @@ static void trsv( char storage, char uploa, char transa, char diaga, throw std::runtime_error("Error in testsuite/level2/trsv.h: BLAS interface cannot be tested for alpha != one."); else throw std::runtime_error("Error in testsuite/level2/trsv.h: BLAS interface cannot be tested for row-major order."); +#elif TEST_BLAS_BLIS_IMPL + if(( storage == 'c' || storage == 'C' )) + if( *alpha == one ) + trsv_blis_impl( uploa, transa, diaga, n, ap, lda, xp, incx ); + else + throw std::runtime_error("Error in testsuite/level2/trsv.h: BLAS_BLIS_IMPL interface cannot be tested for alpha != one."); + else + throw std::runtime_error("Error in testsuite/level2/trsv.h: BLAS_BLIS_IMPL interface cannot be tested for row-major order."); #elif TEST_CBLAS if( *alpha == one ) cblas_trsv( storage, uploa, transa, diaga, n, ap, lda, xp, incx ); diff --git a/gtestsuite/testsuite/level2/trsv/ztrsv/ztrsv_evt.cpp b/gtestsuite/testsuite/level2/trsv/ztrsv/ztrsv_evt.cpp index c2034b30c..b0a5356d1 100644 --- a/gtestsuite/testsuite/level2/trsv/ztrsv/ztrsv_evt.cpp +++ b/gtestsuite/testsuite/level2/trsv/ztrsv/ztrsv_evt.cpp @@ -104,7 +104,7 @@ INSTANTIATE_TEST_SUITE_P( ztrsvEVT, ::testing::Combine( ::testing::Values('c' -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE ,'r' #endif ), // storage format diff --git a/gtestsuite/testsuite/level2/trsv/ztrsv/ztrsv_generic.cpp b/gtestsuite/testsuite/level2/trsv/ztrsv/ztrsv_generic.cpp index dae0fc99d..9328d61a9 100644 --- a/gtestsuite/testsuite/level2/trsv/ztrsv/ztrsv_generic.cpp +++ b/gtestsuite/testsuite/level2/trsv/ztrsv/ztrsv_generic.cpp @@ -99,7 +99,7 @@ INSTANTIATE_TEST_SUITE_P( ztrsvGeneric, ::testing::Combine( ::testing::Values('c' -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE ,'r' #endif ), // storage format diff --git a/gtestsuite/testsuite/level3/gemm/IIT_ERS/gemm_IIT_ERS.cpp b/gtestsuite/testsuite/level3/gemm/IIT_ERS/gemm_IIT_ERS.cpp index 88b307ad8..88e471fda 100644 --- a/gtestsuite/testsuite/level3/gemm/IIT_ERS/gemm_IIT_ERS.cpp +++ b/gtestsuite/testsuite/level3/gemm/IIT_ERS/gemm_IIT_ERS.cpp @@ -90,7 +90,7 @@ TYPED_TEST(gemm_IIT_ERS, invalid_storage) #endif -#if defined(TEST_BLAS) || defined(TEST_CBLAS) +#if defined(TEST_BLAS_LIKE) || defined(TEST_CBLAS) /* Incorrect Input Testing(IIT) @@ -117,7 +117,7 @@ TYPED_TEST(gemm_IIT_ERS, invalid_transa) testinghelpers::initone( beta ); // Test with nullptr for all suitable arguments that shouldn't be accessed. -#if defined(TEST_BLAS) +#if defined(TEST_BLAS_LIKE) gemm( STORAGE, 'p', TRANS, M, N, K, nullptr, nullptr, LDA, nullptr, LDB, nullptr, nullptr, LDC ); #else gemm( STORAGE, 'p', TRANS, M, N, K, &alpha, nullptr, LDA, nullptr, LDB, &beta, nullptr, LDC ); @@ -155,7 +155,7 @@ TYPED_TEST(gemm_IIT_ERS, invalid_transb) testinghelpers::initone( beta ); // Test with nullptr for all suitable arguments that shouldn't be accessed. -#if defined(TEST_BLAS) +#if defined(TEST_BLAS_LIKE) gemm( STORAGE, TRANS, 'p', M, N, K, nullptr, nullptr, LDA, nullptr, LDB, nullptr, nullptr, LDC ); #else gemm( STORAGE, TRANS, 'p', M, N, K, &alpha, nullptr, LDA, nullptr, LDB, &beta, nullptr, LDC ); @@ -193,7 +193,7 @@ TYPED_TEST(gemm_IIT_ERS, m_lt_zero) testinghelpers::initone( beta ); // Test with nullptr for all suitable arguments that shouldn't be accessed. -#if defined(TEST_BLAS) +#if defined(TEST_BLAS_LIKE) gemm( STORAGE, TRANS, TRANS, -1, N, K, nullptr, nullptr, LDA, nullptr, LDB, nullptr, nullptr, LDC ); #else gemm( STORAGE, TRANS, TRANS, -1, N, K, &alpha, nullptr, LDA, nullptr, LDB, &beta, nullptr, LDC ); @@ -231,7 +231,7 @@ TYPED_TEST(gemm_IIT_ERS, n_lt_zero) testinghelpers::initone( beta ); // Test with nullptr for all suitable arguments that shouldn't be accessed. -#if defined(TEST_BLAS) +#if defined(TEST_BLAS_LIKE) gemm( STORAGE, TRANS, TRANS, M, -1, K, nullptr, nullptr, LDA, nullptr, LDB, nullptr, nullptr, LDC ); #else gemm( STORAGE, TRANS, TRANS, M, -1, K, &alpha, nullptr, LDA, nullptr, LDB, &beta, nullptr, LDC ); @@ -269,7 +269,7 @@ TYPED_TEST(gemm_IIT_ERS, k_lt_zero) testinghelpers::initone( beta ); // Test with nullptr for all suitable arguments that shouldn't be accessed. -#if defined(TEST_BLAS) +#if defined(TEST_BLAS_LIKE) gemm( STORAGE, TRANS, TRANS, M, N, -1, nullptr, nullptr, LDA, nullptr, LDB, nullptr, nullptr, LDC ); #else gemm( STORAGE, TRANS, TRANS, M, N, -1, &alpha, nullptr, LDA, nullptr, LDB, &beta, nullptr, LDC ); @@ -307,7 +307,7 @@ TYPED_TEST(gemm_IIT_ERS, invalid_lda) testinghelpers::initone( beta ); // Test with nullptr for all suitable arguments that shouldn't be accessed. -#if defined(TEST_BLAS) +#if defined(TEST_BLAS_LIKE) gemm( STORAGE, TRANS, TRANS, M, N, K, nullptr, nullptr, LDA - 1, nullptr, LDB, nullptr, nullptr, LDC ); #else gemm( STORAGE, TRANS, TRANS, M, N, K, &alpha, nullptr, LDA - 1, nullptr, LDB, &beta, nullptr, LDC ); @@ -345,7 +345,7 @@ TYPED_TEST(gemm_IIT_ERS, invalid_ldb) testinghelpers::initone( beta ); // Test with nullptr for all suitable arguments that shouldn't be accessed. -#if defined(TEST_BLAS) +#if defined(TEST_BLAS_LIKE) gemm( STORAGE, TRANS, TRANS, M, N, K, nullptr, nullptr, LDA, nullptr, LDB - 1, nullptr, nullptr, LDC ); #else gemm( STORAGE, TRANS, TRANS, M, N, K, &alpha, nullptr, LDA, nullptr, LDB - 1, &beta, nullptr, LDC ); @@ -383,7 +383,7 @@ TYPED_TEST(gemm_IIT_ERS, invalid_ldc) testinghelpers::initone( beta ); // Test with nullptr for all suitable arguments that shouldn't be accessed. -#if defined(TEST_BLAS) +#if defined(TEST_BLAS_LIKE) gemm( STORAGE, TRANS, TRANS, M, N, K, nullptr, nullptr, LDA, nullptr, LDB, nullptr, nullptr, LDC - 1 ); #else gemm( STORAGE, TRANS, TRANS, M, N, K, &alpha, nullptr, LDA, nullptr, LDB, &beta, nullptr, LDC - 1 ); @@ -434,7 +434,7 @@ TYPED_TEST(gemm_IIT_ERS, m_eq_zero) testinghelpers::initone( beta ); // Test with nullptr for all suitable arguments that shouldn't be accessed. -#if defined(TEST_BLAS) +#if defined(TEST_BLAS_LIKE) gemm( STORAGE, TRANS, TRANS, 0, N, K, nullptr, nullptr, LDA, nullptr, LDB, nullptr, nullptr, LDC ); #else gemm( STORAGE, TRANS, TRANS, 0, N, K, &alpha, nullptr, LDA, nullptr, LDB, &beta, nullptr, LDC ); @@ -471,7 +471,7 @@ TYPED_TEST(gemm_IIT_ERS, n_eq_zero) testinghelpers::initone( beta ); // Test with nullptr for all suitable arguments that shouldn't be accessed. -#if defined(TEST_BLAS) +#if defined(TEST_BLAS_LIKE) gemm( STORAGE, TRANS, TRANS, M, 0, K, nullptr, nullptr, LDA, nullptr, LDB, nullptr, nullptr, LDC ); #else gemm( STORAGE, TRANS, TRANS, M, 0, K, &alpha, nullptr, LDA, nullptr, LDB, &beta, nullptr, LDC ); @@ -508,7 +508,7 @@ TYPED_TEST(gemm_IIT_ERS, alpha_zero_beta_one) testinghelpers::initone( beta ); // Test with nullptr for all suitable arguments that shouldn't be accessed. -#if defined(TEST_BLAS) +#if defined(TEST_BLAS_LIKE) gemm( STORAGE, TRANS, TRANS, M, N, K, &alpha, nullptr, LDA, nullptr, LDB, &beta, nullptr, LDC ); #else gemm( STORAGE, TRANS, TRANS, M, N, K, &alpha, nullptr, LDA, nullptr, LDB, &beta, nullptr, LDC ); @@ -545,7 +545,7 @@ TYPED_TEST(gemm_IIT_ERS, k_zero_beta_one) testinghelpers::initone( beta ); // Test with nullptr for all suitable arguments that shouldn't be accessed. -#if defined(TEST_BLAS) +#if defined(TEST_BLAS_LIKE) gemm( STORAGE, TRANS, TRANS, M, N, 0, &alpha, nullptr, LDA, nullptr, LDB, &beta, nullptr, LDC ); #else gemm( STORAGE, TRANS, TRANS, M, N, 0, &alpha, nullptr, LDA, nullptr, LDB, &beta, nullptr, LDC ); diff --git a/gtestsuite/testsuite/level3/gemm/cgemm/cgemm_evt.cpp b/gtestsuite/testsuite/level3/gemm/cgemm/cgemm_evt.cpp index 1cea67b4a..8b2aca177 100644 --- a/gtestsuite/testsuite/level3/gemm/cgemm/cgemm_evt.cpp +++ b/gtestsuite/testsuite/level3/gemm/cgemm/cgemm_evt.cpp @@ -153,7 +153,7 @@ INSTANTIATE_TEST_SUITE_P( cgemmEVT, ::testing::Combine( ::testing::Values('c' -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE ,'r' #endif ), // storage format @@ -192,7 +192,7 @@ INSTANTIATE_TEST_SUITE_P( cgemmEVT, ::testing::Combine( ::testing::Values('c' -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE ,'r' #endif ), // storage format @@ -231,7 +231,7 @@ INSTANTIATE_TEST_SUITE_P( cgemmEVT, ::testing::Combine( ::testing::Values('c' -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE ,'r' #endif ), // storage format @@ -270,7 +270,7 @@ INSTANTIATE_TEST_SUITE_P( cgemmEVT, ::testing::Combine( ::testing::Values('c' -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE ,'r' #endif ), // storage format @@ -308,7 +308,7 @@ INSTANTIATE_TEST_SUITE_P( cgemmEVT, ::testing::Combine( ::testing::Values('c' -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE ,'r' #endif ), // storage format @@ -343,7 +343,7 @@ INSTANTIATE_TEST_SUITE_P( cgemmEVT, ::testing::Combine( ::testing::Values('c' -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE ,'r' #endif ), // storage format @@ -378,7 +378,7 @@ INSTANTIATE_TEST_SUITE_P( cgemmEVT, ::testing::Combine( ::testing::Values('c' -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE ,'r' #endif ), // storage format @@ -417,7 +417,7 @@ INSTANTIATE_TEST_SUITE_P( cgemmEVT, ::testing::Combine( ::testing::Values('c' -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE ,'r' #endif ), // storage format @@ -456,7 +456,7 @@ INSTANTIATE_TEST_SUITE_P( cgemmEVT, ::testing::Combine( ::testing::Values('c' -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE ,'r' #endif ), // storage format diff --git a/gtestsuite/testsuite/level3/gemm/cgemm/cgemm_generic.cpp b/gtestsuite/testsuite/level3/gemm/cgemm/cgemm_generic.cpp index 59e47bc5e..3aa50a850 100644 --- a/gtestsuite/testsuite/level3/gemm/cgemm/cgemm_generic.cpp +++ b/gtestsuite/testsuite/level3/gemm/cgemm/cgemm_generic.cpp @@ -132,7 +132,7 @@ INSTANTIATE_TEST_SUITE_P( cgemmGeneric, ::testing::Combine( ::testing::Values('c' -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE ,'r' #endif ), // storage format @@ -157,7 +157,7 @@ INSTANTIATE_TEST_SUITE_P( cgemmGeneric, ::testing::Combine( ::testing::Values('c' -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE ,'r' #endif ), // storage format @@ -182,7 +182,7 @@ INSTANTIATE_TEST_SUITE_P( cgemmGeneric, ::testing::Combine( ::testing::Values('c' -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE ,'r' #endif ), // storage format @@ -205,7 +205,7 @@ INSTANTIATE_TEST_SUITE_P( cgemmGeneric, ::testing::Combine( ::testing::Values('c' -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE ,'r' #endif ), // storage format @@ -232,7 +232,7 @@ INSTANTIATE_TEST_SUITE_P( cgemmGeneric, ::testing::Combine( ::testing::Values('c' -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE ,'r' #endif ), // storage format @@ -255,7 +255,7 @@ INSTANTIATE_TEST_SUITE_P( cgemmGeneric, ::testing::Combine( ::testing::Values('c' -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE ,'r' #endif ), // storage format diff --git a/gtestsuite/testsuite/level3/gemm/dgemm/dgemm_evt.cpp b/gtestsuite/testsuite/level3/gemm/dgemm/dgemm_evt.cpp index c506ca24b..dd368f2c0 100644 --- a/gtestsuite/testsuite/level3/gemm/dgemm/dgemm_evt.cpp +++ b/gtestsuite/testsuite/level3/gemm/dgemm/dgemm_evt.cpp @@ -154,7 +154,7 @@ INSTANTIATE_TEST_SUITE_P( dgemmEVT, ::testing::Combine( ::testing::Values('c' -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE ,'r' #endif ), // storage format @@ -188,7 +188,7 @@ INSTANTIATE_TEST_SUITE_P( dgemmEVT, ::testing::Combine( ::testing::Values('c' -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE ,'r' #endif ), // storage format @@ -222,7 +222,7 @@ INSTANTIATE_TEST_SUITE_P( dgemmEVT, ::testing::Combine( ::testing::Values('c' -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE ,'r' #endif ), // storage format @@ -259,7 +259,7 @@ INSTANTIATE_TEST_SUITE_P( dgemmEVT, ::testing::Combine( ::testing::Values('c' -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE ,'r' #endif ), // storage format @@ -296,7 +296,7 @@ INSTANTIATE_TEST_SUITE_P( dgemmEVT, ::testing::Combine( ::testing::Values('c' -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE ,'r' #endif ), // storage format @@ -333,7 +333,7 @@ INSTANTIATE_TEST_SUITE_P( dgemmEVT, ::testing::Combine( ::testing::Values('c' -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE ,'r' #endif ), // storage format @@ -372,7 +372,7 @@ INSTANTIATE_TEST_SUITE_P( dgemmEVT, ::testing::Combine( ::testing::Values('c' -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE ,'r' #endif ), // storage format @@ -410,7 +410,7 @@ INSTANTIATE_TEST_SUITE_P( dgemmEVT, ::testing::Combine( ::testing::Values('c' -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE ,'r' #endif ), // storage format diff --git a/gtestsuite/testsuite/level3/gemm/gemm.h b/gtestsuite/testsuite/level3/gemm/gemm.h index dd44dc04d..89650ffaf 100644 --- a/gtestsuite/testsuite/level3/gemm/gemm.h +++ b/gtestsuite/testsuite/level3/gemm/gemm.h @@ -82,6 +82,22 @@ static void gemm_(char transa, char transb, gtint_t m, gtint_t n, gtint_t k, T* throw std::runtime_error("Error in testsuite/level3/gemm.h: Invalid typename in gemm_()."); } +template +static void gemm_blis_impl(char transa, char transb, gtint_t m, gtint_t n, gtint_t k, T* alpha, + T* ap, gtint_t lda, T* bp, gtint_t ldb, T* beta, T* cp, gtint_t ldc ) +{ + if constexpr (std::is_same::value) + sgemm_blis_impl( &transa, &transb, &m, &n, &k, alpha, ap, &lda, bp, &ldb, beta, cp, &ldc ); + else if constexpr (std::is_same::value) + dgemm_blis_impl( &transa, &transb, &m, &n, &k, alpha, ap, &lda, bp, &ldb, beta, cp, &ldc ); + else if constexpr (std::is_same::value) + cgemm_blis_impl( &transa, &transb, &m, &n, &k, alpha, ap, &lda, bp, &ldb, beta, cp, &ldc ); + else if constexpr (std::is_same::value) + zgemm_blis_impl( &transa, &transb, &m, &n, &k, alpha, ap, &lda, bp, &ldb, beta, cp, &ldc ); + else + throw std::runtime_error("Error in testsuite/level3/gemm.h: Invalid typename in gemm_blis_impl()."); +} + template static void cblas_gemm(char storage, char transa, char transb, gtint_t m, gtint_t n, gtint_t k, T* alpha, T* ap, gtint_t lda, @@ -195,7 +211,11 @@ static void gemm( char storage, char transa, char transb, gtint_t m, gtint_t n, gemm_( transa, transb, m, n, k, alpha, ap, lda, bp, ldb, beta, cp, ldc ); else throw std::runtime_error("Error in testsuite/level3/gemm.h: BLAS interface cannot be tested for row-major order."); - +#elif TEST_BLAS_BLIS_IMPL + if( storage == 'c' || storage == 'C' ) + gemm_blis_impl( transa, transb, m, n, k, alpha, ap, lda, bp, ldb, beta, cp, ldc ); + else + throw std::runtime_error("Error in testsuite/level3/gemm.h: BLAS_BLIS_IMPL interface cannot be tested for row-major order."); #elif TEST_CBLAS cblas_gemm( storage, transa, transb, m, n, k, alpha, ap, lda, bp, ldb, beta, cp, ldc ); #elif TEST_BLIS_TYPED diff --git a/gtestsuite/testsuite/level3/gemm/sgemm/sgemm_evt.cpp b/gtestsuite/testsuite/level3/gemm/sgemm/sgemm_evt.cpp index 359383ca8..8b7b064a6 100644 --- a/gtestsuite/testsuite/level3/gemm/sgemm/sgemm_evt.cpp +++ b/gtestsuite/testsuite/level3/gemm/sgemm/sgemm_evt.cpp @@ -137,7 +137,7 @@ INSTANTIATE_TEST_SUITE_P( sgemmEVT, ::testing::Combine( ::testing::Values('c' -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE ,'r' #endif ), // storage format @@ -173,7 +173,7 @@ INSTANTIATE_TEST_SUITE_P( sgemmEVT, ::testing::Combine( ::testing::Values('c' -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE ,'r' #endif ), // storage format @@ -209,7 +209,7 @@ INSTANTIATE_TEST_SUITE_P( sgemmEVT, ::testing::Combine( ::testing::Values('c' -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE ,'r' #endif ), // storage format @@ -247,7 +247,7 @@ INSTANTIATE_TEST_SUITE_P( sgemmEVT, ::testing::Combine( ::testing::Values('c' -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE ,'r' #endif ), // storage format @@ -284,7 +284,7 @@ INSTANTIATE_TEST_SUITE_P( sgemmEVT, ::testing::Combine( ::testing::Values('c' -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE ,'r' #endif ), // storage format diff --git a/gtestsuite/testsuite/level3/gemm/sgemm/sgemm_generic.cpp b/gtestsuite/testsuite/level3/gemm/sgemm/sgemm_generic.cpp index d5fccefe0..9eb44f3e6 100644 --- a/gtestsuite/testsuite/level3/gemm/sgemm/sgemm_generic.cpp +++ b/gtestsuite/testsuite/level3/gemm/sgemm/sgemm_generic.cpp @@ -107,7 +107,7 @@ INSTANTIATE_TEST_SUITE_P( sgemmGeneric, ::testing::Combine( ::testing::Values('c' -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE ,'r' #endif ), // storage format diff --git a/gtestsuite/testsuite/level3/gemm/zgemm/zgemm_evt.cpp b/gtestsuite/testsuite/level3/gemm/zgemm/zgemm_evt.cpp index 07af47008..5030dd605 100644 --- a/gtestsuite/testsuite/level3/gemm/zgemm/zgemm_evt.cpp +++ b/gtestsuite/testsuite/level3/gemm/zgemm/zgemm_evt.cpp @@ -157,7 +157,7 @@ INSTANTIATE_TEST_SUITE_P( zgemmEVT, ::testing::Combine( ::testing::Values('c' -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE ,'r' #endif ), // storage format @@ -201,7 +201,7 @@ INSTANTIATE_TEST_SUITE_P( zgemmEVT, ::testing::Combine( ::testing::Values('c' -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE ,'r' #endif ), // storage format @@ -242,7 +242,7 @@ INSTANTIATE_TEST_SUITE_P( zgemmEVT, ::testing::Combine( ::testing::Values('c' -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE ,'r' #endif ), // storage format @@ -281,7 +281,7 @@ INSTANTIATE_TEST_SUITE_P( zgemmEVT, ::testing::Combine( ::testing::Values('c' -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE ,'r' #endif ), // storage format @@ -325,7 +325,7 @@ INSTANTIATE_TEST_SUITE_P( zgemmEVT, ::testing::Combine( ::testing::Values('c' -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE ,'r' #endif ), // storage format @@ -369,7 +369,7 @@ INSTANTIATE_TEST_SUITE_P( zgemmEVT, ::testing::Combine( ::testing::Values('c' -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE ,'r' #endif ), // storage format @@ -414,7 +414,7 @@ INSTANTIATE_TEST_SUITE_P( zgemmEVT, ::testing::Combine( ::testing::Values('c' -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE ,'r' #endif ), // storage format diff --git a/gtestsuite/testsuite/level3/gemm/zgemm/zgemm_generic.cpp b/gtestsuite/testsuite/level3/gemm/zgemm/zgemm_generic.cpp index f22a7e975..68eb94d0b 100644 --- a/gtestsuite/testsuite/level3/gemm/zgemm/zgemm_generic.cpp +++ b/gtestsuite/testsuite/level3/gemm/zgemm/zgemm_generic.cpp @@ -119,7 +119,7 @@ INSTANTIATE_TEST_SUITE_P( zgemmGeneric, ::testing::Combine( ::testing::Values('c' -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE ,'r' #endif ), // storage format @@ -144,7 +144,7 @@ INSTANTIATE_TEST_SUITE_P( zgemmGeneric, ::testing::Combine( ::testing::Values('c' -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE ,'r' #endif ), // storage format @@ -171,7 +171,7 @@ INSTANTIATE_TEST_SUITE_P( zgemmGeneric, ::testing::Combine( ::testing::Values('c' -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE ,'r' #endif ), // storage format @@ -198,7 +198,7 @@ INSTANTIATE_TEST_SUITE_P( zgemmGeneric, ::testing::Combine( ::testing::Values('c' -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE ,'r' #endif ), // storage format @@ -229,7 +229,7 @@ INSTANTIATE_TEST_SUITE_P( zgemmGeneric, ::testing::Combine( ::testing::Values('c' -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE ,'r' #endif ), // storage format @@ -256,7 +256,7 @@ INSTANTIATE_TEST_SUITE_P( zgemmGeneric, ::testing::Combine( ::testing::Values('c' -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE ,'r' #endif ), // storage format @@ -279,7 +279,7 @@ INSTANTIATE_TEST_SUITE_P( zgemmGeneric, ::testing::Combine( ::testing::Values('c' -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE ,'r' #endif ), // storage format @@ -306,7 +306,7 @@ INSTANTIATE_TEST_SUITE_P( zgemmGeneric, ::testing::Combine( ::testing::Values('c' -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE ,'r' #endif ), // storage format @@ -333,7 +333,7 @@ INSTANTIATE_TEST_SUITE_P( zgemmGeneric, ::testing::Combine( ::testing::Values('c' -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE ,'r' #endif ), // storage format diff --git a/gtestsuite/testsuite/level3/gemm_compute/dgemm_compute_generic.cpp b/gtestsuite/testsuite/level3/gemm_compute/dgemm_compute_generic.cpp index 3b51d5594..7232fa4eb 100644 --- a/gtestsuite/testsuite/level3/gemm_compute/dgemm_compute_generic.cpp +++ b/gtestsuite/testsuite/level3/gemm_compute/dgemm_compute_generic.cpp @@ -110,7 +110,7 @@ INSTANTIATE_TEST_SUITE_P( dgemmComputeGeneric, ::testing::Combine( ::testing::Values('c' -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE ,'r' #endif ), // storage format @@ -135,7 +135,7 @@ INSTANTIATE_TEST_SUITE_P( dgemmComputeGeneric, ::testing::Combine( ::testing::Values('c' -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE ,'r' #endif ), // storage format @@ -160,7 +160,7 @@ INSTANTIATE_TEST_SUITE_P( dgemmComputeGeneric, ::testing::Combine( ::testing::Values('c' -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE ,'r' #endif ), // storage format diff --git a/gtestsuite/testsuite/level3/gemm_compute/gemm_compute.h b/gtestsuite/testsuite/level3/gemm_compute/gemm_compute.h index 86b0dd48a..7086bd2d6 100644 --- a/gtestsuite/testsuite/level3/gemm_compute/gemm_compute.h +++ b/gtestsuite/testsuite/level3/gemm_compute/gemm_compute.h @@ -68,6 +68,7 @@ * @param[in] ldc specifies the leading dimension of cp. */ +#ifdef TEST_BLAS template static void gemm_compute_(char transa, char transb, char packa, char packb, gtint_t m, gtint_t n, gtint_t k, T* alpha, T* ap, gtint_t lda, T* bp, gtint_t ldb, T* beta, T* cp, gtint_t ldc ) @@ -211,6 +212,7 @@ static void gemm_compute_(char transa, char transb, char packa, char packb, gtin bBuffer ); dgemm_compute_( &packa, &packb, &m, &n, &k, aBuffer, &lda, bBuffer, &ldb, beta, cp, &ldc ); + bli_free_user( aBuffer ); bli_free_user( bBuffer ); } @@ -268,6 +270,209 @@ static void gemm_compute_(char transa, char transb, char packa, char packb, gtin else throw std::runtime_error("Error in testsuite/level3/gemm.h: Invalid typename in gemm_compute_()."); } +#endif + +template +static void gemm_compute_blis_impl(char transa, char transb, char packa, char packb, gtint_t m, gtint_t n, gtint_t k, T* alpha, + T* ap, gtint_t lda, T* bp, gtint_t ldb, T* beta, T* cp, gtint_t ldc ) +{ + T unit_alpha = 1.0; + err_t err = BLIS_SUCCESS; + if constexpr (std::is_same::value) + { + if ( ( packa == 'P' || packa == 'p' ) && ( packb == 'P' || packb == 'p' ) ) + { + // Reorder A + char identifierA = 'A'; + gtint_t bufSizeA = sgemm_pack_get_size_blis_impl( &identifierA, + &m, + &n, + &k ); + + float* aBuffer = (float*) bli_malloc_user( bufSizeA, &err ); + sgemm_pack_blis_impl( &identifierA, + &transa, + &m, + &n, + &k, + &unit_alpha, + ap, + &lda, + aBuffer ); + + // Reorder B + char identifierB = 'B'; + gtint_t bufSizeB = sgemm_pack_get_size_blis_impl( &identifierB, + &m, + &n, + &k ); + + float* bBuffer = (float*) bli_malloc_user( bufSizeB, &err ); + sgemm_pack_blis_impl( &identifierB, + &transb, + &m, + &n, + &k, + alpha, + bp, + &ldb, + bBuffer ); + + sgemm_compute_blis_impl( &packa, &packb, &m, &n, &k, aBuffer, &lda, bBuffer, &ldb, beta, cp, &ldc ); + + bli_free_user( aBuffer ); + bli_free_user( bBuffer ); + } + else if ( ( packa == 'P' || packa == 'p' ) ) + { + // Reorder A + char identifierA = 'A'; + gtint_t bufSizeA = sgemm_pack_get_size_blis_impl( &identifierA, + &m, + &n, + &k ); + + float* aBuffer = (float*) bli_malloc_user( bufSizeA, &err ); + sgemm_pack_blis_impl( &identifierA, + &transa, + &m, + &n, + &k, + alpha, + ap, + &lda, + aBuffer ); + + sgemm_compute_blis_impl( &packa, &transb, &m, &n, &k, aBuffer, &lda, bp, &ldb, beta, cp, &ldc ); + bli_free_user( aBuffer ); + } + else if ( ( packb == 'P' || packb == 'p' ) ) + { + // Reorder B + char identifierB = 'B'; + gtint_t bufSizeB = sgemm_pack_get_size_blis_impl( &identifierB, + &m, + &n, + &k ); + + float* bBuffer = (float*) bli_malloc_user( bufSizeB, &err ); + sgemm_pack_blis_impl( &identifierB, + &transb, + &m, + &n, + &k, + alpha, + bp, + &ldb, + bBuffer ); + + sgemm_compute_blis_impl( &transa, &packb, &m, &n, &k, ap, &lda, bBuffer, &ldb, beta, cp, &ldc ); + bli_free_user( bBuffer ); + } + else + { + sgemm_compute_blis_impl( &transa, &transb, &m, &n, &k, ap, &lda, bp, &ldb, beta, cp, &ldc ); + } + } + else if constexpr (std::is_same::value) + { + if ( ( packa == 'P' || packa == 'p' ) && ( packb == 'P' || packb == 'p' ) ) + { + // Reorder A + char identifierA = 'A'; + gtint_t bufSizeA = dgemm_pack_get_size_blis_impl( &identifierA, + &m, + &n, + &k ); + + double* aBuffer = (double*) bli_malloc_user( bufSizeA, &err ); + dgemm_pack_blis_impl( &identifierA, + &transa, + &m, + &n, + &k, + &unit_alpha, + ap, + &lda, + aBuffer ); + + // Reorder B + char identifierB = 'B'; + gtint_t bufSizeB = dgemm_pack_get_size_blis_impl( &identifierB, + &m, + &n, + &k ); + + double* bBuffer = (double*) bli_malloc_user( bufSizeB, &err ); + dgemm_pack_blis_impl( &identifierB, + &transb, + &m, + &n, + &k, + alpha, + bp, + &ldb, + bBuffer ); + + dgemm_compute_blis_impl( &packa, &packb, &m, &n, &k, aBuffer, &lda, bBuffer, &ldb, beta, cp, &ldc ); + + bli_free_user( aBuffer ); + bli_free_user( bBuffer ); + } + else if ( ( packa == 'P' || packa == 'p' ) ) + { + // Reorder A + char identifierA = 'A'; + gtint_t bufSizeA = dgemm_pack_get_size_blis_impl( &identifierA, + &m, + &n, + &k ); + + double* aBuffer = (double*) bli_malloc_user( bufSizeA, &err ); + dgemm_pack_blis_impl( &identifierA, + &transa, + &m, + &n, + &k, + alpha, + ap, + &lda, + aBuffer ); + + dgemm_compute_blis_impl( &packa, &transb, &m, &n, &k, aBuffer, &lda, bp, &ldb, beta, cp, &ldc ); + bli_free_user( aBuffer ); + } + else if ( ( packb == 'P' || packb == 'p' ) ) + { + // Reorder B + char identifierB = 'B'; + gtint_t bufSizeB = dgemm_pack_get_size_blis_impl( &identifierB, + &m, + &n, + &k ); + + double* bBuffer = (double*) bli_malloc_user( bufSizeB, &err ); + dgemm_pack_blis_impl( &identifierB, + &transb, + &m, + &n, + &k, + alpha, + bp, + &ldb, + bBuffer ); + + dgemm_compute_blis_impl( &transa, &packb, &m, &n, &k, ap, &lda, bBuffer, &ldb, beta, cp, &ldc ); + bli_free_user( bBuffer ); + } + else + { + dgemm_compute_blis_impl( &transa, &transb, &m, &n, &k, ap, &lda, bp, &ldb, beta, cp, &ldc ); + } + } + else + throw std::runtime_error("Error in testsuite/level3/gemm.h: Invalid typename in gemm_compute_blis_impl()."); +} template static void cblas_gemm_compute(char storage, char transa, char transb, char pcka, char pckb, @@ -488,7 +693,11 @@ static void gemm_compute( char storage, char transa, char transb, char packa, ch gemm_compute_( transa, transb, packa, packb, m, n, k, alpha, ap, lda, bp, ldb, beta, cp, ldc ); else throw std::runtime_error("Error in testsuite/level3/gemm_compute.h: BLAS interface cannot be tested for row-major order."); - +#elif TEST_BLAS_BLIS_IMPL + if( storage == 'c' || storage == 'C' ) + gemm_compute_blis_impl( transa, transb, packa, packb, m, n, k, alpha, ap, lda, bp, ldb, beta, cp, ldc ); + else + throw std::runtime_error("Error in testsuite/level3/gemm_compute.h: BLAS_BLIS_IMPL interface cannot be tested for row-major order."); #elif TEST_CBLAS cblas_gemm_compute( storage, transa, transb, packa, packb, m, n, k, alpha, ap, lda, bp, ldb, beta, cp, ldc ); #elif TEST_BLIS_TYPED diff --git a/gtestsuite/testsuite/level3/gemm_compute/gemm_compute_IIT_ERS.cpp b/gtestsuite/testsuite/level3/gemm_compute/gemm_compute_IIT_ERS.cpp index 73f143422..cd05b1fc8 100644 --- a/gtestsuite/testsuite/level3/gemm_compute/gemm_compute_IIT_ERS.cpp +++ b/gtestsuite/testsuite/level3/gemm_compute/gemm_compute_IIT_ERS.cpp @@ -62,7 +62,7 @@ TYPED_TEST(gemm_compute_IIT_ERS, invalid_storage) testinghelpers::initone( beta ); // Test with nullptr for all suitable arguments that shouldn't be accessed. -#if defined(TEST_BLAS) +#if defined(TEST_BLAS_LIKE) gemm_compute( 'x', TRANS, TRANS, 'U', 'U', M, N, K, nullptr, nullptr, LDA, nullptr, LDB, nullptr, nullptr, LDC ); #else gemm_compute( 'x', TRANS, TRANS, 'U', 'U', M, N, K, &alpha, nullptr, LDA, nullptr, LDB, &beta, nullptr, LDC ); @@ -93,7 +93,7 @@ TYPED_TEST(gemm_compute_IIT_ERS, invalid_storage) #endif -#if defined(TEST_BLAS) || defined(TEST_CBLAS) +#if defined(TEST_BLAS_LIKE) || defined(TEST_CBLAS) /* Incorrect Input Testing(IIT) @@ -118,7 +118,7 @@ TYPED_TEST(gemm_compute_IIT_ERS, invalid_transa) testinghelpers::initone( beta ); // Test with nullptr for all suitable arguments that shouldn't be accessed. -#if defined(TEST_BLAS) +#if defined(TEST_BLAS_LIKE) gemm_compute( STORAGE, 'x', TRANS, 'U', 'U', M, N, K, nullptr, nullptr, LDA, nullptr, LDB, nullptr, nullptr, LDC ); #else gemm_compute( STORAGE, 'x', TRANS, 'U', 'U', M, N, K, &alpha, nullptr, LDA, nullptr, LDB, &beta, nullptr, LDC ); @@ -155,7 +155,7 @@ TYPED_TEST(gemm_compute_IIT_ERS, invalid_transb) testinghelpers::initone( beta ); // Test with nullptr for all suitable arguments that shouldn't be accessed. -#if defined(TEST_BLAS) +#if defined(TEST_BLAS_LIKE) gemm_compute( STORAGE, TRANS, 'x', 'U', 'U', M, N, K, nullptr, nullptr, LDA, nullptr, LDB, nullptr, nullptr, LDC ); #else gemm_compute( STORAGE, TRANS, 'x', 'U', 'U', M, N, K, &alpha, nullptr, LDA, nullptr, LDB, &beta, nullptr, LDC ); @@ -192,7 +192,7 @@ TYPED_TEST(gemm_compute_IIT_ERS, m_lt_zero) testinghelpers::initone( beta ); // Test with nullptr for all suitable arguments that shouldn't be accessed. -#if defined(TEST_BLAS) +#if defined(TEST_BLAS_LIKE) gemm_compute( STORAGE, TRANS, TRANS, 'U', 'U', -1, N, K, nullptr, nullptr, LDA, nullptr, LDB, nullptr, nullptr, LDC ); #else gemm_compute( STORAGE, TRANS, TRANS, 'U', 'U', -1, N, K, &alpha, nullptr, LDA, nullptr, LDB, &beta, nullptr, LDC ); @@ -230,7 +230,7 @@ TYPED_TEST(gemm_compute_IIT_ERS, n_lt_zero) testinghelpers::initone( beta ); // Test with nullptr for all suitable arguments that shouldn't be accessed. -#if defined(TEST_BLAS) +#if defined(TEST_BLAS_LIKE) gemm_compute( STORAGE, TRANS, TRANS, 'U', 'U', M, -1, K, nullptr, nullptr, LDA, nullptr, LDB, nullptr, nullptr, LDC ); #else gemm_compute( STORAGE, TRANS, TRANS, 'U', 'U', M, -1, K, &alpha, nullptr, LDA, nullptr, LDB, &beta, nullptr, LDC ); @@ -268,7 +268,7 @@ TYPED_TEST(gemm_compute_IIT_ERS, k_lt_zero) testinghelpers::initone( beta ); // Test with nullptr for all suitable arguments that shouldn't be accessed. -#if defined(TEST_BLAS) +#if defined(TEST_BLAS_LIKE) gemm_compute( STORAGE, TRANS, TRANS, 'U', 'U', M, N, -1, nullptr, nullptr, LDA, nullptr, LDB, nullptr, nullptr, LDC ); #else gemm_compute( STORAGE, TRANS, TRANS, 'U', 'U', M, N, -1, &alpha, nullptr, LDA, nullptr, LDB, &beta, nullptr, LDC ); @@ -306,7 +306,7 @@ TYPED_TEST(gemm_compute_IIT_ERS, invalid_lda) testinghelpers::initone( beta ); // Test with nullptr for all suitable arguments that shouldn't be accessed. -#if defined(TEST_BLAS) +#if defined(TEST_BLAS_LIKE) gemm_compute( STORAGE, TRANS, TRANS, 'U', 'U', M, N, K, nullptr, nullptr, LDA - 1, nullptr, LDB, nullptr, nullptr, LDC ); #else gemm_compute( STORAGE, TRANS, TRANS, 'U', 'U', M, N, K, &alpha, nullptr, LDA - 1, nullptr, LDB, &beta, nullptr, LDC ); @@ -344,7 +344,7 @@ TYPED_TEST(gemm_compute_IIT_ERS, invalid_ldb) testinghelpers::initone( beta ); // Test with nullptr for all suitable arguments that shouldn't be accessed. -#if defined(TEST_BLAS) +#if defined(TEST_BLAS_LIKE) gemm_compute( STORAGE, TRANS, TRANS, 'U', 'U', M, N, K, nullptr, nullptr, LDA, nullptr, LDB - 1, nullptr, nullptr, LDC ); #else gemm_compute( STORAGE, TRANS, TRANS, 'U', 'U', M, N, K, &alpha, nullptr, LDA, nullptr, LDB - 1, &beta, nullptr, LDC ); @@ -382,7 +382,7 @@ TYPED_TEST(gemm_compute_IIT_ERS, invalid_ldc_lt_zero) testinghelpers::initone( beta ); // Test with nullptr for all suitable arguments that shouldn't be accessed. -#if defined(TEST_BLAS) +#if defined(TEST_BLAS_LIKE) gemm_compute( STORAGE, TRANS, TRANS, 'U', 'U', M, N, K, nullptr, nullptr, LDA, nullptr, LDB, nullptr, nullptr, -1 ); #else gemm_compute( STORAGE, TRANS, TRANS, 'U', 'U', M, N, K, &alpha, nullptr, LDA, nullptr, LDB, &beta, nullptr, -1); @@ -420,7 +420,7 @@ TYPED_TEST(gemm_compute_IIT_ERS, invalid_ldc) testinghelpers::initone( beta ); // Test with nullptr for all suitable arguments that shouldn't be accessed. -#if defined(TEST_BLAS) +#if defined(TEST_BLAS_LIKE) gemm_compute( STORAGE, TRANS, TRANS, 'U', 'U', M, N, K, nullptr, nullptr, LDA, nullptr, LDB, nullptr, nullptr, LDC - 1); #else gemm_compute( STORAGE, TRANS, TRANS, 'U', 'U', M, N, K, &alpha, nullptr, LDA, nullptr, LDB, &beta, nullptr, LDC - 1); @@ -467,7 +467,7 @@ TYPED_TEST(gemm_compute_IIT_ERS, m_eq_zero) testinghelpers::initone( beta ); // Test with nullptr for all suitable arguments that shouldn't be accessed. -#if defined(TEST_BLAS) +#if defined(TEST_BLAS_LIKE) gemm_compute( STORAGE, TRANS, TRANS, 'U', 'U', 0, N, K, nullptr, nullptr, LDA, nullptr, LDB, nullptr, nullptr, LDC ); #else gemm_compute( STORAGE, TRANS, TRANS, 'U', 'U', 0, N, K, &alpha, nullptr, LDA, nullptr, LDB, &beta, nullptr, LDC ); @@ -505,7 +505,7 @@ TYPED_TEST(gemm_compute_IIT_ERS, n_eq_zero) testinghelpers::initone( beta ); // Test with nullptr for all suitable arguments that shouldn't be accessed. -#if defined(TEST_BLAS) +#if defined(TEST_BLAS_LIKE) gemm_compute( STORAGE, TRANS, TRANS, 'U', 'U', M, 0, K, nullptr, nullptr, LDA, nullptr, LDB, nullptr, nullptr, LDC ); #else gemm_compute( STORAGE, TRANS, TRANS, 'U', 'U', M, 0, K, &alpha, nullptr, LDA, nullptr, LDB, &beta, nullptr, LDC ); diff --git a/gtestsuite/testsuite/level3/gemm_compute/sgemm_compute_generic.cpp b/gtestsuite/testsuite/level3/gemm_compute/sgemm_compute_generic.cpp index 10149cfa0..fb6ff1dc8 100644 --- a/gtestsuite/testsuite/level3/gemm_compute/sgemm_compute_generic.cpp +++ b/gtestsuite/testsuite/level3/gemm_compute/sgemm_compute_generic.cpp @@ -111,7 +111,7 @@ INSTANTIATE_TEST_SUITE_P( sgemmComputeGeneric, ::testing::Combine( ::testing::Values('c' -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE ,'r' #endif ), // storage format @@ -136,7 +136,7 @@ INSTANTIATE_TEST_SUITE_P( sgemmComputeGeneric, ::testing::Combine( ::testing::Values('c' -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE ,'r' #endif ), // storage format @@ -161,7 +161,7 @@ INSTANTIATE_TEST_SUITE_P( sgemmComputeGeneric, ::testing::Combine( ::testing::Values('c' -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE ,'r' #endif ), // storage format diff --git a/gtestsuite/testsuite/level3/gemmt/cgemmt_generic.cpp b/gtestsuite/testsuite/level3/gemmt/cgemmt_generic.cpp index 2aa068d2e..47eaf09e4 100644 --- a/gtestsuite/testsuite/level3/gemmt/cgemmt_generic.cpp +++ b/gtestsuite/testsuite/level3/gemmt/cgemmt_generic.cpp @@ -108,7 +108,7 @@ INSTANTIATE_TEST_SUITE_P( cgemmtGeneric, ::testing::Combine( ::testing::Values('c' -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE ,'r' #endif ), // storage format diff --git a/gtestsuite/testsuite/level3/gemmt/dgemmt_evt.cpp b/gtestsuite/testsuite/level3/gemmt/dgemmt_evt.cpp index 3720edcf6..0fc2f1d94 100644 --- a/gtestsuite/testsuite/level3/gemmt/dgemmt_evt.cpp +++ b/gtestsuite/testsuite/level3/gemmt/dgemmt_evt.cpp @@ -113,7 +113,7 @@ INSTANTIATE_TEST_SUITE_P( dgemmtEVT, ::testing::Combine( ::testing::Values('c' -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE ,'r' #endif ), // storage format diff --git a/gtestsuite/testsuite/level3/gemmt/dgemmt_generic.cpp b/gtestsuite/testsuite/level3/gemmt/dgemmt_generic.cpp index 34c7b8ba2..9d5c627ea 100644 --- a/gtestsuite/testsuite/level3/gemmt/dgemmt_generic.cpp +++ b/gtestsuite/testsuite/level3/gemmt/dgemmt_generic.cpp @@ -107,7 +107,7 @@ INSTANTIATE_TEST_SUITE_P( dgemmtGeneric, ::testing::Combine( ::testing::Values('c' -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE ,'r' #endif ), // storage format @@ -131,7 +131,7 @@ INSTANTIATE_TEST_SUITE_P( dgemmtGeneric, ::testing::Combine( ::testing::Values('c' -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE ,'r' #endif ), // storage format @@ -155,7 +155,7 @@ INSTANTIATE_TEST_SUITE_P( dgemmtGeneric, ::testing::Combine( ::testing::Values('c' -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE ,'r' #endif ), // storage format diff --git a/gtestsuite/testsuite/level3/gemmt/gemmt.h b/gtestsuite/testsuite/level3/gemmt/gemmt.h index d80a8a2df..477cd56fb 100644 --- a/gtestsuite/testsuite/level3/gemmt/gemmt.h +++ b/gtestsuite/testsuite/level3/gemmt/gemmt.h @@ -84,6 +84,22 @@ static void gemmt_(char uplo, char transa, char transb, gtint_t n, gtint_t k, T* throw std::runtime_error("Error in testsuite/level3/gemmt.h: Invalid typename in gemmt_()."); } +template +static void gemmt_blis_impl(char uplo, char transa, char transb, gtint_t n, gtint_t k, T* alpha, + T* ap, gtint_t lda, T* bp, gtint_t ldb, T* beta, T* cp, gtint_t ldc ) +{ + if constexpr (std::is_same::value) + sgemmt_blis_impl( &uplo, &transa, &transb, &n, &k, alpha, ap, &lda, bp, &ldb, beta, cp, &ldc ); + else if constexpr (std::is_same::value) + dgemmt_blis_impl( &uplo, &transa, &transb, &n, &k, alpha, ap, &lda, bp, &ldb, beta, cp, &ldc ); + else if constexpr (std::is_same::value) + cgemmt_blis_impl( &uplo, &transa, &transb, &n, &k, alpha, ap, &lda, bp, &ldb, beta, cp, &ldc ); + else if constexpr (std::is_same::value) + zgemmt_blis_impl( &uplo, &transa, &transb, &n, &k, alpha, ap, &lda, bp, &ldb, beta, cp, &ldc ); + else + throw std::runtime_error("Error in testsuite/level3/gemmt.h: Invalid typename in gemmt_blis_impl()."); +} + template static void cblas_gemmt(char storage, char uplo, char transa, char transb, gtint_t n, gtint_t k, T* alpha, T* ap, gtint_t lda, @@ -204,7 +220,11 @@ static void gemmt( char storage, char uplo, char transa, char transb, gtint_t n, gemmt_( uplo, transa, transb, n, k, alpha, ap, lda, bp, ldb, beta, cp, ldc ); else throw std::runtime_error("Error in testsuite/level3/gemmt.h: BLAS interface cannot be tested for row-major order."); - +#elif TEST_BLAS_BLIS_IMPL + if( storage == 'c' || storage == 'C' ) + gemmt_blis_impl( uplo, transa, transb, n, k, alpha, ap, lda, bp, ldb, beta, cp, ldc ); + else + throw std::runtime_error("Error in testsuite/level3/gemmt.h: BLAS_BLIS_IMPL interface cannot be tested for row-major order."); #elif TEST_CBLAS cblas_gemmt( storage, uplo, transa, transb, n, k, alpha, ap, lda, bp, ldb, beta, cp, ldc ); #elif TEST_BLIS_TYPED diff --git a/gtestsuite/testsuite/level3/gemmt/gemmt_IIT_ERS.cpp b/gtestsuite/testsuite/level3/gemmt/gemmt_IIT_ERS.cpp index e3cff9f1e..93d41927e 100644 --- a/gtestsuite/testsuite/level3/gemmt/gemmt_IIT_ERS.cpp +++ b/gtestsuite/testsuite/level3/gemmt/gemmt_IIT_ERS.cpp @@ -88,7 +88,7 @@ TYPED_TEST(gemmt_IIT_ERS, invalid_storage) #endif -#if defined(TEST_BLAS) || defined(TEST_CBLAS) +#if defined(TEST_BLAS_LIKE) || defined(TEST_CBLAS) /* Incorrect Input Testing(IIT) @@ -114,7 +114,7 @@ TYPED_TEST(gemmt_IIT_ERS, invalid_uploa) testinghelpers::initone( beta ); // Test with nullptr for all suitable arguments that shouldn't be accessed. -#if defined(TEST_BLAS) +#if defined(TEST_BLAS_LIKE) gemmt( STORAGE, 'A', TRANS, TRANS, N, K, nullptr, nullptr, LDA, nullptr, LDB, nullptr, nullptr, LDC ); #else gemmt( STORAGE, 'A', TRANS, TRANS, N, K, &alpha, nullptr, LDA, nullptr, LDB, &beta, nullptr, LDC ); @@ -150,7 +150,7 @@ TYPED_TEST(gemmt_IIT_ERS, invalid_transa) testinghelpers::initone( beta ); // Test with nullptr for all suitable arguments that shouldn't be accessed. -#if defined(TEST_BLAS) +#if defined(TEST_BLAS_LIKE) gemmt( STORAGE, UPLO, 'A', TRANS, N, K, nullptr, nullptr, LDA, nullptr, LDB, nullptr, nullptr, LDC ); #else gemmt( STORAGE, UPLO, 'A', TRANS, N, K, &alpha, nullptr, LDA, nullptr, LDB, &beta, nullptr, LDC ); @@ -186,7 +186,7 @@ TYPED_TEST(gemmt_IIT_ERS, invalid_transb) testinghelpers::initone( beta ); // Test with nullptr for all suitable arguments that shouldn't be accessed. -#if defined(TEST_BLAS) +#if defined(TEST_BLAS_LIKE) gemmt( STORAGE, UPLO, TRANS, 'A', N, K, nullptr, nullptr, LDA, nullptr, LDB, nullptr, nullptr, LDC ); #else gemmt( STORAGE, UPLO, TRANS, 'A', N, K, &alpha, nullptr, LDA, nullptr, LDB, &beta, nullptr, LDC ); @@ -222,7 +222,7 @@ TYPED_TEST(gemmt_IIT_ERS, n_lt_zero) testinghelpers::initone( beta ); // Test with nullptr for all suitable arguments that shouldn't be accessed. -#if defined(TEST_BLAS) +#if defined(TEST_BLAS_LIKE) gemmt( STORAGE, UPLO, TRANS, TRANS, -1, K, nullptr, nullptr, LDA, nullptr, LDB, nullptr, nullptr, LDC ); #else gemmt( STORAGE, UPLO, TRANS, TRANS, -1, K, &alpha, nullptr, LDA, nullptr, LDB, &beta, nullptr, LDC ); @@ -258,7 +258,7 @@ TYPED_TEST(gemmt_IIT_ERS, k_lt_zero) testinghelpers::initone( beta ); // Test with nullptr for all suitable arguments that shouldn't be accessed. -#if defined(TEST_BLAS) +#if defined(TEST_BLAS_LIKE) gemmt( STORAGE, UPLO, TRANS, TRANS, N, -1, nullptr, nullptr, LDA, nullptr, LDB, nullptr, nullptr, LDC ); #else gemmt( STORAGE, UPLO, TRANS, TRANS, N, -1, &alpha, nullptr, LDA, nullptr, LDB, &beta, nullptr, LDC ); @@ -294,7 +294,7 @@ TYPED_TEST(gemmt_IIT_ERS, invalid_lda) testinghelpers::initone( beta ); // Test with nullptr for all suitable arguments that shouldn't be accessed. -#if defined(TEST_BLAS) +#if defined(TEST_BLAS_LIKE) gemmt( STORAGE, UPLO, TRANS, TRANS, N, K, nullptr, nullptr, LDA - 1, nullptr, LDB, nullptr, nullptr, LDC ); #else gemmt( STORAGE, UPLO, TRANS, TRANS, N, K, &alpha, nullptr, LDA - 1, nullptr, LDB, &beta, nullptr, LDC ); @@ -330,7 +330,7 @@ TYPED_TEST(gemmt_IIT_ERS, invalid_ldb) testinghelpers::initone( beta ); // Test with nullptr for all suitable arguments that shouldn't be accessed. -#if defined(TEST_BLAS) +#if defined(TEST_BLAS_LIKE) gemmt( STORAGE, UPLO, TRANS, TRANS, N, K, nullptr, nullptr, LDA, nullptr, LDB - 1, nullptr, nullptr, LDC ); #else gemmt( STORAGE, UPLO, TRANS, TRANS, N, K, &alpha, nullptr, LDA, nullptr, LDB - 1, &beta, nullptr, LDC ); @@ -366,7 +366,7 @@ TYPED_TEST(gemmt_IIT_ERS, invalid_ldc) testinghelpers::initone( beta ); // Test with nullptr for all suitable arguments that shouldn't be accessed. -#if defined(TEST_BLAS) +#if defined(TEST_BLAS_LIKE) gemmt( STORAGE, UPLO, TRANS, TRANS, N, K, nullptr, nullptr, LDA, nullptr, LDB, nullptr, nullptr, LDC - 1 ); #else gemmt( STORAGE, UPLO, TRANS, TRANS, N, K, &alpha, nullptr, LDA, nullptr, LDB, &beta, nullptr, LDC - 1 ); @@ -412,7 +412,7 @@ TYPED_TEST(gemmt_IIT_ERS, n_eq_zero) testinghelpers::initone( beta ); // Test with nullptr for all suitable arguments that shouldn't be accessed. -#if defined(TEST_BLAS) +#if defined(TEST_BLAS_LIKE) gemmt( STORAGE, UPLO, TRANS, TRANS, 0, K, nullptr, nullptr, LDA, nullptr, LDB, nullptr, nullptr, LDC ); #else gemmt( STORAGE, UPLO, TRANS, TRANS, 0, K, &alpha, nullptr, LDA, nullptr, LDB, &beta, nullptr, LDC ); diff --git a/gtestsuite/testsuite/level3/gemmt/sgemmt_generic.cpp b/gtestsuite/testsuite/level3/gemmt/sgemmt_generic.cpp index cba6363eb..cbe54ef32 100644 --- a/gtestsuite/testsuite/level3/gemmt/sgemmt_generic.cpp +++ b/gtestsuite/testsuite/level3/gemmt/sgemmt_generic.cpp @@ -107,7 +107,7 @@ INSTANTIATE_TEST_SUITE_P( sgemmtGeneric, ::testing::Combine( ::testing::Values('c' -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE ,'r' #endif ), // storage format diff --git a/gtestsuite/testsuite/level3/gemmt/zgemmt_generic.cpp b/gtestsuite/testsuite/level3/gemmt/zgemmt_generic.cpp index e48533151..6dd4bd782 100644 --- a/gtestsuite/testsuite/level3/gemmt/zgemmt_generic.cpp +++ b/gtestsuite/testsuite/level3/gemmt/zgemmt_generic.cpp @@ -108,7 +108,7 @@ INSTANTIATE_TEST_SUITE_P( zgemmtGeneric, ::testing::Combine( ::testing::Values('c' -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE ,'r' #endif ), // storage format diff --git a/gtestsuite/testsuite/level3/hemm/chemm_generic.cpp b/gtestsuite/testsuite/level3/hemm/chemm_generic.cpp index e82081e8d..c4bcfbdb6 100644 --- a/gtestsuite/testsuite/level3/hemm/chemm_generic.cpp +++ b/gtestsuite/testsuite/level3/hemm/chemm_generic.cpp @@ -112,7 +112,7 @@ INSTANTIATE_TEST_SUITE_P( chemmGeneric, ::testing::Combine( ::testing::Values('c' -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE ,'r' #endif ), // storage format diff --git a/gtestsuite/testsuite/level3/hemm/hemm.h b/gtestsuite/testsuite/level3/hemm/hemm.h index 4db5b3e6c..0fd1fdbd6 100644 --- a/gtestsuite/testsuite/level3/hemm/hemm.h +++ b/gtestsuite/testsuite/level3/hemm/hemm.h @@ -83,6 +83,18 @@ static void hemm_(char side, char uplo, gtint_t m, gtint_t n, T* alpha, throw std::runtime_error("Error in testsuite/level3/hemm.h: Invalid typename in hemm_()."); } +template +static void hemm_blis_impl(char side, char uplo, gtint_t m, gtint_t n, T* alpha, + T* ap, gtint_t lda, T* bp, gtint_t ldb, T* beta, T* cp, gtint_t ldc ) +{ + if constexpr (std::is_same::value) + chemm_blis_impl( &side, &uplo, &m, &n, alpha, ap, &lda, bp, &ldb, beta, cp, &ldc ); + else if constexpr (std::is_same::value) + zhemm_blis_impl( &side, &uplo, &m, &n, alpha, ap, &lda, bp, &ldb, beta, cp, &ldc ); + else + throw std::runtime_error("Error in testsuite/level3/hemm.h: Invalid typename in hemm_blis_impl()."); +} + template static void cblas_hemm(char storage, char side, char uplo, gtint_t m, gtint_t n, T* alpha, T* ap, gtint_t lda, @@ -200,7 +212,11 @@ static void hemm( char storage, char side, char uplo, char conja, char transb, g hemm_( side, uplo, m, n, alpha, ap, lda, bp, ldb, beta, cp, ldc ); else throw std::runtime_error("Error in testsuite/level3/hemm.h: BLAS interface cannot be tested for row-major order."); - +#elif TEST_BLAS_BLIS_IMPL + if( storage == 'c' || storage == 'C' ) + hemm_blis_impl( side, uplo, m, n, alpha, ap, lda, bp, ldb, beta, cp, ldc ); + else + throw std::runtime_error("Error in testsuite/level3/hemm.h: BLAS_BLIS_IMPL interface cannot be tested for row-major order."); #elif TEST_CBLAS cblas_hemm( storage, side, uplo, m, n, alpha, ap, lda, bp, ldb, beta, cp, ldc ); #elif TEST_BLIS_TYPED diff --git a/gtestsuite/testsuite/level3/hemm/zhemm_generic.cpp b/gtestsuite/testsuite/level3/hemm/zhemm_generic.cpp index d6d32205b..217a90d0c 100644 --- a/gtestsuite/testsuite/level3/hemm/zhemm_generic.cpp +++ b/gtestsuite/testsuite/level3/hemm/zhemm_generic.cpp @@ -111,7 +111,7 @@ INSTANTIATE_TEST_SUITE_P( zhemmGeneric, ::testing::Combine( ::testing::Values('c' -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE ,'r' #endif ), // storage format diff --git a/gtestsuite/testsuite/level3/her2k/cher2k_generic.cpp b/gtestsuite/testsuite/level3/her2k/cher2k_generic.cpp index 3b794a7f7..137bb70d9 100644 --- a/gtestsuite/testsuite/level3/her2k/cher2k_generic.cpp +++ b/gtestsuite/testsuite/level3/her2k/cher2k_generic.cpp @@ -105,7 +105,7 @@ INSTANTIATE_TEST_SUITE_P( cher2kGeneric, ::testing::Combine( ::testing::Values('c' -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE ,'r' #endif ), // storage format diff --git a/gtestsuite/testsuite/level3/her2k/her2k.h b/gtestsuite/testsuite/level3/her2k/her2k.h index 8670540e5..5f98dbcd8 100644 --- a/gtestsuite/testsuite/level3/her2k/her2k.h +++ b/gtestsuite/testsuite/level3/her2k/her2k.h @@ -77,6 +77,18 @@ static void her2k_(char uplo, char transa, gtint_t n, gtint_t k, T* alpha, throw std::runtime_error("Error in testsuite/level3/her2k.h: Invalid typename in her2k_()."); } +template::real_type> +static void her2k_blis_impl(char uplo, char transa, gtint_t n, gtint_t k, T* alpha, + T* ap, gtint_t lda, T* bp, gtint_t ldb, RT* beta, T* cp, gtint_t ldc ) +{ + if constexpr (std::is_same::value) + cher2k_blis_impl( &uplo, &transa, &n, &k, alpha, ap, &lda, bp, &ldb, beta, cp, &ldc ); + else if constexpr (std::is_same::value) + zher2k_blis_impl( &uplo, &transa, &n, &k, alpha, ap, &lda, bp, &ldb, beta, cp, &ldc ); + else + throw std::runtime_error("Error in testsuite/level3/her2k.h: Invalid typename in her2k_blis_impl()."); +} + template::real_type> static void cblas_her2k(char storage, char uplo, char transa, gtint_t n, gtint_t k, T* alpha, T* ap, gtint_t lda, @@ -186,7 +198,11 @@ static void her2k( char storage, char uplo, char transa, char transb, gtint_t n, her2k_( uplo, transa, n, k, alpha, ap, lda, bp, ldb, beta, cp, ldc ); else throw std::runtime_error("Error in testsuite/level3/her2k.h: BLAS interface cannot be tested for row-major order."); - +#elif TEST_BLAS_BLIS_IMPL + if( storage == 'c' || storage == 'C' ) + her2k_blis_impl( uplo, transa, n, k, alpha, ap, lda, bp, ldb, beta, cp, ldc ); + else + throw std::runtime_error("Error in testsuite/level3/her2k.h: BLAS_BLIS_IMPL interface cannot be tested for row-major order."); #elif TEST_CBLAS cblas_her2k( storage, uplo, transa, n, k, alpha, ap, lda, bp, ldb, beta, cp, ldc ); #elif TEST_BLIS_TYPED diff --git a/gtestsuite/testsuite/level3/her2k/zher2k_generic.cpp b/gtestsuite/testsuite/level3/her2k/zher2k_generic.cpp index eb714f281..fb0109e43 100644 --- a/gtestsuite/testsuite/level3/her2k/zher2k_generic.cpp +++ b/gtestsuite/testsuite/level3/her2k/zher2k_generic.cpp @@ -105,7 +105,7 @@ INSTANTIATE_TEST_SUITE_P( zher2kGeneric, ::testing::Combine( ::testing::Values('c' -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE ,'r' #endif ), // storage format diff --git a/gtestsuite/testsuite/level3/herk/cherk_generic.cpp b/gtestsuite/testsuite/level3/herk/cherk_generic.cpp index 3f5d741f4..c60459877 100644 --- a/gtestsuite/testsuite/level3/herk/cherk_generic.cpp +++ b/gtestsuite/testsuite/level3/herk/cherk_generic.cpp @@ -99,7 +99,7 @@ INSTANTIATE_TEST_SUITE_P( cherkGeneric, ::testing::Combine( ::testing::Values('c' -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE ,'r' #endif ), // storage format diff --git a/gtestsuite/testsuite/level3/herk/herk.h b/gtestsuite/testsuite/level3/herk/herk.h index cac376637..bde0ba6db 100644 --- a/gtestsuite/testsuite/level3/herk/herk.h +++ b/gtestsuite/testsuite/level3/herk/herk.h @@ -71,6 +71,18 @@ static void herk_(char uplo, char transa, gtint_t n, gtint_t k, RT* alpha, throw std::runtime_error("Error in testsuite/level3/herk.h: Invalid typename in herk_()."); } +template::real_type> +static void herk_blis_impl(char uplo, char transa, gtint_t n, gtint_t k, RT* alpha, + T* ap, gtint_t lda, RT* beta, T* cp, gtint_t ldc ) +{ + if constexpr (std::is_same::value) + cherk_blis_impl( &uplo, &transa, &n, &k, alpha, ap, &lda, beta, cp, &ldc ); + else if constexpr (std::is_same::value) + zherk_blis_impl( &uplo, &transa, &n, &k, alpha, ap, &lda, beta, cp, &ldc ); + else + throw std::runtime_error("Error in testsuite/level3/herk.h: Invalid typename in herk_blis_impl()."); +} + template::real_type> static void cblas_herk(char storage, char uplo, char trnsa, gtint_t n, gtint_t k, RT* alpha, T* ap, gtint_t lda, @@ -167,6 +179,11 @@ static void herk( char storage, char uplo, char transa, gtint_t n, gtint_t k, herk_( uplo, transa, n, k, alpha, ap, lda, beta, cp, ldc ); else throw std::runtime_error("Error in testsuite/level3/herk.h: BLAS interface cannot be tested for row-major order."); +#elif TEST_BLAS_BLIS_IMPL + if( storage == 'c' || storage == 'C' ) + herk_blis_impl( uplo, transa, n, k, alpha, ap, lda, beta, cp, ldc ); + else + throw std::runtime_error("Error in testsuite/level3/herk.h: BLAS_BLIS_IMPL interface cannot be tested for row-major order."); #elif TEST_CBLAS cblas_herk( storage, uplo, transa, n, k, alpha, ap, lda, beta, cp, ldc ); #elif TEST_BLIS_TYPED diff --git a/gtestsuite/testsuite/level3/herk/zherk_generic.cpp b/gtestsuite/testsuite/level3/herk/zherk_generic.cpp index d8e33849c..672a6a519 100644 --- a/gtestsuite/testsuite/level3/herk/zherk_generic.cpp +++ b/gtestsuite/testsuite/level3/herk/zherk_generic.cpp @@ -99,7 +99,7 @@ INSTANTIATE_TEST_SUITE_P( zherkGeneric, ::testing::Combine( ::testing::Values('c' -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE ,'r' #endif ), // storage format diff --git a/gtestsuite/testsuite/level3/symm/csymm_generic.cpp b/gtestsuite/testsuite/level3/symm/csymm_generic.cpp index 7e5c64445..e1e5137c6 100644 --- a/gtestsuite/testsuite/level3/symm/csymm_generic.cpp +++ b/gtestsuite/testsuite/level3/symm/csymm_generic.cpp @@ -114,7 +114,7 @@ INSTANTIATE_TEST_SUITE_P( csymmGeneric, ::testing::Combine( ::testing::Values('c' -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE ,'r' #endif ), // storage format diff --git a/gtestsuite/testsuite/level3/symm/dsymm_generic.cpp b/gtestsuite/testsuite/level3/symm/dsymm_generic.cpp index cdc348e6f..10b90ce0d 100644 --- a/gtestsuite/testsuite/level3/symm/dsymm_generic.cpp +++ b/gtestsuite/testsuite/level3/symm/dsymm_generic.cpp @@ -112,7 +112,7 @@ INSTANTIATE_TEST_SUITE_P( dsymmGeneric, ::testing::Combine( ::testing::Values('c' -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE ,'r' #endif ), // storage format diff --git a/gtestsuite/testsuite/level3/symm/ssymm_generic.cpp b/gtestsuite/testsuite/level3/symm/ssymm_generic.cpp index 1616b29f6..86db0240e 100644 --- a/gtestsuite/testsuite/level3/symm/ssymm_generic.cpp +++ b/gtestsuite/testsuite/level3/symm/ssymm_generic.cpp @@ -112,7 +112,7 @@ INSTANTIATE_TEST_SUITE_P( ssymmGeneric, ::testing::Combine( ::testing::Values('c' -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE ,'r' #endif ), // storage format diff --git a/gtestsuite/testsuite/level3/symm/symm.h b/gtestsuite/testsuite/level3/symm/symm.h index 972c47498..3d690e4e4 100644 --- a/gtestsuite/testsuite/level3/symm/symm.h +++ b/gtestsuite/testsuite/level3/symm/symm.h @@ -87,6 +87,22 @@ static void symm_(char side, char uplo, gtint_t m, gtint_t n, T* alpha, throw std::runtime_error("Error in testsuite/level3/symm.h: Invalid typename in symm_()."); } +template +static void symm_blis_impl(char side, char uplo, gtint_t m, gtint_t n, T* alpha, + T* ap, gtint_t lda, T* bp, gtint_t ldb, T* beta, T* cp, gtint_t ldc ) +{ + if constexpr (std::is_same::value) + ssymm_blis_impl( &side, &uplo, &m, &n, alpha, ap, &lda, bp, &ldb, beta, cp, &ldc ); + else if constexpr (std::is_same::value) + dsymm_blis_impl( &side, &uplo, &m, &n, alpha, ap, &lda, bp, &ldb, beta, cp, &ldc ); + else if constexpr (std::is_same::value) + csymm_blis_impl( &side, &uplo, &m, &n, alpha, ap, &lda, bp, &ldb, beta, cp, &ldc ); + else if constexpr (std::is_same::value) + zsymm_blis_impl( &side, &uplo, &m, &n, alpha, ap, &lda, bp, &ldb, beta, cp, &ldc ); + else + throw std::runtime_error("Error in testsuite/level3/symm.h: Invalid typename in symm_blis_impl()."); +} + template static void cblas_symm(char storage, char side, char uplo, gtint_t m, gtint_t n, T* alpha, T* ap, gtint_t lda, @@ -208,7 +224,11 @@ static void symm( char storage, char side, char uplo, char conja, char transb, g symm_( side, uplo, m, n, alpha, ap, lda, bp, ldb, beta, cp, ldc ); else throw std::runtime_error("Error in testsuite/level3/symm.h: BLAS interface cannot be tested for row-major order."); - +#elif TEST_BLAS_BLIS_IMPL + if( storage == 'c' || storage == 'C' ) + symm_blis_impl( side, uplo, m, n, alpha, ap, lda, bp, ldb, beta, cp, ldc ); + else + throw std::runtime_error("Error in testsuite/level3/symm.h: BLAS_BLIS_IMPL interface cannot be tested for row-major order."); #elif TEST_CBLAS cblas_symm( storage, side, uplo, m, n, alpha, ap, lda, bp, ldb, beta, cp, ldc ); #elif TEST_BLIS_TYPED diff --git a/gtestsuite/testsuite/level3/symm/zsymm_generic.cpp b/gtestsuite/testsuite/level3/symm/zsymm_generic.cpp index 6a41b8b52..a09e205a5 100644 --- a/gtestsuite/testsuite/level3/symm/zsymm_generic.cpp +++ b/gtestsuite/testsuite/level3/symm/zsymm_generic.cpp @@ -113,7 +113,7 @@ INSTANTIATE_TEST_SUITE_P( zsymmGeneric, ::testing::Combine( ::testing::Values('c' -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE ,'r' #endif ), // storage format diff --git a/gtestsuite/testsuite/level3/syr2k/csyr2k_generic.cpp b/gtestsuite/testsuite/level3/syr2k/csyr2k_generic.cpp index 4f76f40cf..af8786bee 100644 --- a/gtestsuite/testsuite/level3/syr2k/csyr2k_generic.cpp +++ b/gtestsuite/testsuite/level3/syr2k/csyr2k_generic.cpp @@ -106,7 +106,7 @@ INSTANTIATE_TEST_SUITE_P( csyr2kGeneric, ::testing::Combine( ::testing::Values('c' -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE ,'r' #endif ), // storage format diff --git a/gtestsuite/testsuite/level3/syr2k/dsyr2k_generic.cpp b/gtestsuite/testsuite/level3/syr2k/dsyr2k_generic.cpp index 7bec1b80f..c38a317da 100644 --- a/gtestsuite/testsuite/level3/syr2k/dsyr2k_generic.cpp +++ b/gtestsuite/testsuite/level3/syr2k/dsyr2k_generic.cpp @@ -105,7 +105,7 @@ INSTANTIATE_TEST_SUITE_P( dsyr2kGeneric, ::testing::Combine( ::testing::Values('c' -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE ,'r' #endif ), // storage format diff --git a/gtestsuite/testsuite/level3/syr2k/ssyr2k_generic.cpp b/gtestsuite/testsuite/level3/syr2k/ssyr2k_generic.cpp index 4e3ad4e9b..2273dfc91 100644 --- a/gtestsuite/testsuite/level3/syr2k/ssyr2k_generic.cpp +++ b/gtestsuite/testsuite/level3/syr2k/ssyr2k_generic.cpp @@ -105,7 +105,7 @@ INSTANTIATE_TEST_SUITE_P( ssyr2kGeneric, ::testing::Combine( ::testing::Values('c' -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE ,'r' #endif ), // storage format diff --git a/gtestsuite/testsuite/level3/syr2k/syr2k.h b/gtestsuite/testsuite/level3/syr2k/syr2k.h index b147a9b85..96e89b267 100644 --- a/gtestsuite/testsuite/level3/syr2k/syr2k.h +++ b/gtestsuite/testsuite/level3/syr2k/syr2k.h @@ -81,6 +81,22 @@ static void syr2k_(char uplo, char transa, gtint_t n, gtint_t k, T* alpha, throw std::runtime_error("Error in testsuite/level3/syr2k.h: Invalid typename in syr2k_()."); } +template +static void syr2k_blis_impl(char uplo, char transa, gtint_t n, gtint_t k, T* alpha, + T* ap, gtint_t lda, T* bp, gtint_t ldb, T* beta, T* cp, gtint_t ldc ) +{ + if constexpr (std::is_same::value) + ssyr2k_blis_impl( &uplo, &transa, &n, &k, alpha, ap, &lda, bp, &ldb, beta, cp, &ldc ); + else if constexpr (std::is_same::value) + dsyr2k_blis_impl( &uplo, &transa, &n, &k, alpha, ap, &lda, bp, &ldb, beta, cp, &ldc ); + else if constexpr (std::is_same::value) + csyr2k_blis_impl( &uplo, &transa, &n, &k, alpha, ap, &lda, bp, &ldb, beta, cp, &ldc ); + else if constexpr (std::is_same::value) + zsyr2k_blis_impl( &uplo, &transa, &n, &k, alpha, ap, &lda, bp, &ldb, beta, cp, &ldc ); + else + throw std::runtime_error("Error in testsuite/level3/syr2k.h: Invalid typename in syr2k_blis_impl()."); +} + template static void cblas_syr2k(char storage, char uplo, char transa, gtint_t n, gtint_t k, T* alpha, T* ap, gtint_t lda, @@ -194,7 +210,11 @@ static void syr2k( char storage, char uplo, char transa, char transb, gtint_t n, syr2k_( uplo, transa, n, k, alpha, ap, lda, bp, ldb, beta, cp, ldc ); else throw std::runtime_error("Error in testsuite/level3/syr2k.h: BLAS interface cannot be tested for row-major order."); - +#elif TEST_BLAS_BLIS_IMPL + if( storage == 'c' || storage == 'C' ) + syr2k_blis_impl( uplo, transa, n, k, alpha, ap, lda, bp, ldb, beta, cp, ldc ); + else + throw std::runtime_error("Error in testsuite/level3/syr2k.h: BLAS_BLIS_IMPL interface cannot be tested for row-major order."); #elif TEST_CBLAS cblas_syr2k( storage, uplo, transa, n, k, alpha, ap, lda, bp, ldb, beta, cp, ldc ); #elif TEST_BLIS_TYPED diff --git a/gtestsuite/testsuite/level3/syr2k/zsyr2k_generic.cpp b/gtestsuite/testsuite/level3/syr2k/zsyr2k_generic.cpp index a50039df0..0066895e5 100644 --- a/gtestsuite/testsuite/level3/syr2k/zsyr2k_generic.cpp +++ b/gtestsuite/testsuite/level3/syr2k/zsyr2k_generic.cpp @@ -106,7 +106,7 @@ INSTANTIATE_TEST_SUITE_P( zsyr2kGeneric, ::testing::Combine( ::testing::Values('c' -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE ,'r' #endif ), // storage format diff --git a/gtestsuite/testsuite/level3/syrk/csyrk_generic.cpp b/gtestsuite/testsuite/level3/syrk/csyrk_generic.cpp index 91df47176..479fad0f1 100644 --- a/gtestsuite/testsuite/level3/syrk/csyrk_generic.cpp +++ b/gtestsuite/testsuite/level3/syrk/csyrk_generic.cpp @@ -101,7 +101,7 @@ INSTANTIATE_TEST_SUITE_P( csyrkGeneric, ::testing::Combine( ::testing::Values('c' -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE ,'r' #endif ), // storage format diff --git a/gtestsuite/testsuite/level3/syrk/dsyrk_generic.cpp b/gtestsuite/testsuite/level3/syrk/dsyrk_generic.cpp index e4dcf34b7..5e62c7f2b 100644 --- a/gtestsuite/testsuite/level3/syrk/dsyrk_generic.cpp +++ b/gtestsuite/testsuite/level3/syrk/dsyrk_generic.cpp @@ -100,7 +100,7 @@ INSTANTIATE_TEST_SUITE_P( dsyrkGeneric, ::testing::Combine( ::testing::Values('c' -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE ,'r' #endif ), // storage format diff --git a/gtestsuite/testsuite/level3/syrk/ssyrk_generic.cpp b/gtestsuite/testsuite/level3/syrk/ssyrk_generic.cpp index 72b6f7288..5e202521e 100644 --- a/gtestsuite/testsuite/level3/syrk/ssyrk_generic.cpp +++ b/gtestsuite/testsuite/level3/syrk/ssyrk_generic.cpp @@ -100,7 +100,7 @@ INSTANTIATE_TEST_SUITE_P( ssyrkGeneric, ::testing::Combine( ::testing::Values('c' -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE ,'r' #endif ), // storage format diff --git a/gtestsuite/testsuite/level3/syrk/syrk.h b/gtestsuite/testsuite/level3/syrk/syrk.h index 0197e7c43..d81be844f 100644 --- a/gtestsuite/testsuite/level3/syrk/syrk.h +++ b/gtestsuite/testsuite/level3/syrk/syrk.h @@ -76,6 +76,22 @@ static void syrk_(char uplo, char transa, gtint_t n, gtint_t k, T* alpha, throw std::runtime_error("Error in testsuite/level3/syrk.h: Invalid typename in syrk_()."); } +template +static void syrk_blis_impl(char uplo, char transa, gtint_t n, gtint_t k, T* alpha, + T* ap, gtint_t lda, T* beta, T* cp, gtint_t ldc ) +{ + if constexpr (std::is_same::value) + ssyrk_blis_impl( &uplo, &transa, &n, &k, alpha, ap, &lda, beta, cp, &ldc ); + else if constexpr (std::is_same::value) + dsyrk_blis_impl( &uplo, &transa, &n, &k, alpha, ap, &lda, beta, cp, &ldc ); + else if constexpr (std::is_same::value) + csyrk_blis_impl( &uplo, &transa, &n, &k, alpha, ap, &lda, beta, cp, &ldc ); + else if constexpr (std::is_same::value) + zsyrk_blis_impl( &uplo, &transa, &n, &k, alpha, ap, &lda, beta, cp, &ldc ); + else + throw std::runtime_error("Error in testsuite/level3/syrk.h: Invalid typename in syrk_blis_impl()."); +} + template static void cblas_syrk(char storage, char uplo, char trnsa, gtint_t n, gtint_t k, T* alpha, T* ap, gtint_t lda, @@ -176,6 +192,11 @@ static void syrk( char storage, char uplo, char transa, gtint_t n, gtint_t k, syrk_( uplo, transa, n, k, alpha, ap, lda, beta, cp, ldc ); else throw std::runtime_error("Error in testsuite/level3/syrk.h: BLAS interface cannot be tested for row-major order."); +#elif TEST_BLAS_BLIS_IMPL + if( storage == 'c' || storage == 'C' ) + syrk_blis_impl( uplo, transa, n, k, alpha, ap, lda, beta, cp, ldc ); + else + throw std::runtime_error("Error in testsuite/level3/syrk.h: BLAS_BLIS_IMPL interface cannot be tested for row-major order."); #elif TEST_CBLAS cblas_syrk( storage, uplo, transa, n, k, alpha, ap, lda, beta, cp, ldc ); #elif TEST_BLIS_TYPED diff --git a/gtestsuite/testsuite/level3/syrk/zsyrk_generic.cpp b/gtestsuite/testsuite/level3/syrk/zsyrk_generic.cpp index f97a13432..febeb3e45 100644 --- a/gtestsuite/testsuite/level3/syrk/zsyrk_generic.cpp +++ b/gtestsuite/testsuite/level3/syrk/zsyrk_generic.cpp @@ -101,7 +101,7 @@ INSTANTIATE_TEST_SUITE_P( zsyrkGeneric, ::testing::Combine( ::testing::Values('c' -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE ,'r' #endif ), // storage format diff --git a/gtestsuite/testsuite/level3/trmm/ctrmm_generic.cpp b/gtestsuite/testsuite/level3/trmm/ctrmm_generic.cpp index fc6cca673..3e71a8dd7 100644 --- a/gtestsuite/testsuite/level3/trmm/ctrmm_generic.cpp +++ b/gtestsuite/testsuite/level3/trmm/ctrmm_generic.cpp @@ -103,7 +103,7 @@ INSTANTIATE_TEST_SUITE_P( ctrmmGeneric, ::testing::Combine( ::testing::Values('c' -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE ,'r' #endif ), // storage format diff --git a/gtestsuite/testsuite/level3/trmm/dtrmm_generic.cpp b/gtestsuite/testsuite/level3/trmm/dtrmm_generic.cpp index 827cf574b..062fed57a 100644 --- a/gtestsuite/testsuite/level3/trmm/dtrmm_generic.cpp +++ b/gtestsuite/testsuite/level3/trmm/dtrmm_generic.cpp @@ -102,7 +102,7 @@ INSTANTIATE_TEST_SUITE_P( dtrmmGeneric, ::testing::Combine( ::testing::Values('c' -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE ,'r' #endif ), // storage format diff --git a/gtestsuite/testsuite/level3/trmm/strmm_generic.cpp b/gtestsuite/testsuite/level3/trmm/strmm_generic.cpp index 1943f6748..4815898ca 100644 --- a/gtestsuite/testsuite/level3/trmm/strmm_generic.cpp +++ b/gtestsuite/testsuite/level3/trmm/strmm_generic.cpp @@ -102,7 +102,7 @@ INSTANTIATE_TEST_SUITE_P( strmmGeneric, ::testing::Combine( ::testing::Values('c' -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE ,'r' #endif ), // storage format diff --git a/gtestsuite/testsuite/level3/trmm/trmm.h b/gtestsuite/testsuite/level3/trmm/trmm.h index 70e415b87..67bab9b54 100644 --- a/gtestsuite/testsuite/level3/trmm/trmm.h +++ b/gtestsuite/testsuite/level3/trmm/trmm.h @@ -79,6 +79,22 @@ static void trmm_( char side, char uploa, char transa, char diaga, gtint_t m, throw std::runtime_error("Error in testsuite/level3/trmm.h: Invalid typename in trmm_()."); } +template +static void trmm_blis_impl( char side, char uploa, char transa, char diaga, gtint_t m, + gtint_t n, T* alpha, T* ap, gtint_t lda, T* bp, gtint_t ldb ) +{ + if constexpr (std::is_same::value) + strmm_blis_impl( &side, &uploa, &transa, &diaga, &m, &n, alpha, ap, &lda, bp, &ldb ); + else if constexpr (std::is_same::value) + dtrmm_blis_impl( &side, &uploa, &transa, &diaga, &m, &n, alpha, ap, &lda, bp, &ldb ); + else if constexpr (std::is_same::value) + ctrmm_blis_impl( &side, &uploa, &transa, &diaga, &m, &n, alpha, ap, &lda, bp, &ldb ); + else if constexpr (std::is_same::value) + ztrmm_blis_impl( &side, &uploa, &transa, &diaga, &m, &n, alpha, ap, &lda, bp, &ldb ); + else + throw std::runtime_error("Error in testsuite/level3/trmm.h: Invalid typename in trmm_blis_impl()."); +} + template static void cblas_trmm( char storage, char side, char uploa, char transa, char diaga, gtint_t m, gtint_t n, T* alpha, T* ap, gtint_t lda, @@ -194,7 +210,11 @@ static void trmm( char storage, char side, char uploa, char transa, char diaga, trmm_( side, uploa, transa, diaga, m, n, alpha, ap, lda, bp, ldb ); else throw std::runtime_error("Error in testsuite/level3/trmm.h: BLAS interface cannot be tested for row-major order."); - +#elif TEST_BLAS_BLIS_IMPL + if( storage == 'c' || storage == 'C' ) + trmm_blis_impl( side, uploa, transa, diaga, m, n, alpha, ap, lda, bp, ldb ); + else + throw std::runtime_error("Error in testsuite/level3/trmm.h: BLAS_BLIS_IMPL interface cannot be tested for row-major order."); #elif TEST_CBLAS cblas_trmm( storage, side, uploa, transa, diaga, m, n, alpha, ap, lda, bp, ldb ); #elif TEST_BLIS_TYPED diff --git a/gtestsuite/testsuite/level3/trmm/ztrmm_generic.cpp b/gtestsuite/testsuite/level3/trmm/ztrmm_generic.cpp index 1d482d18c..138e2a018 100644 --- a/gtestsuite/testsuite/level3/trmm/ztrmm_generic.cpp +++ b/gtestsuite/testsuite/level3/trmm/ztrmm_generic.cpp @@ -103,7 +103,7 @@ INSTANTIATE_TEST_SUITE_P( ztrmmGeneric, ::testing::Combine( ::testing::Values('c' -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE ,'r' #endif ), // storage format diff --git a/gtestsuite/testsuite/level3/trmm3/trmm3.h b/gtestsuite/testsuite/level3/trmm3/trmm3.h index 0f47b4cf5..3ba576c11 100644 --- a/gtestsuite/testsuite/level3/trmm3/trmm3.h +++ b/gtestsuite/testsuite/level3/trmm3/trmm3.h @@ -174,8 +174,10 @@ static void trmm3( char storage, char side, char uploa, char transa, char diaga, #ifdef TEST_BLAS throw std::runtime_error("Error in testsuite/level3/trmm3.h: BLAS interface is not available."); +#elif TEST_BLAS_BLIS_IMPL + throw std::runtime_error("Error in testsuite/level3/trmm3.h: BLAS_BLIS_IMPL interface is not available."); #elif TEST_CBLAS - throw std::runtime_error("Error in testsuite/level3/trmm3.h: BLAS interface is not available."); + throw std::runtime_error("Error in testsuite/level3/trmm3.h: CBLAS interface is not available."); #elif TEST_BLIS_TYPED typed_trmm3( storage, side, uploa, transa, diaga, transb, m, n, alpha, ap, lda, bp, ldb, beta, c, ldc ); diff --git a/gtestsuite/testsuite/level3/trsm/IIT_ERS/trsm_IIT_ERS.cpp b/gtestsuite/testsuite/level3/trsm/IIT_ERS/trsm_IIT_ERS.cpp index 926bc0eba..ed1f14c8b 100644 --- a/gtestsuite/testsuite/level3/trsm/IIT_ERS/trsm_IIT_ERS.cpp +++ b/gtestsuite/testsuite/level3/trsm/IIT_ERS/trsm_IIT_ERS.cpp @@ -90,7 +90,7 @@ TYPED_TEST(trsm_IIT_ERS, invalid_storage) #endif -#if defined(TEST_BLAS) || defined(TEST_CBLAS) +#if defined(TEST_BLAS_LIKE) || defined(TEST_CBLAS) /** * @brief Test TRSM when side argument is incorrect @@ -102,7 +102,7 @@ TYPED_TEST(trsm_IIT_ERS, invalid_side) T ALPHA = T{2.3}; // Test with nullptr for all suitable arguments that shouldn't be accessed. -#if defined(TEST_BLAS) +#if defined(TEST_BLAS_LIKE) trsm( STORAGE, 'a', UPLO, TRANS, DIAG, M, N, nullptr, nullptr, LDA, nullptr, LDB); #else trsm( STORAGE, 'a', UPLO, TRANS, DIAG, M, N, &ALPHA, nullptr, LDA, nullptr, LDB); @@ -137,7 +137,7 @@ TYPED_TEST(trsm_IIT_ERS, invalid_UPLO) T ALPHA = T{2.3}; // Test with nullptr for all suitable arguments that shouldn't be accessed. -#if defined(TEST_BLAS) +#if defined(TEST_BLAS_LIKE) trsm( STORAGE, SIDE, 'a', TRANS, DIAG, M, N, nullptr, nullptr, LDA, nullptr, LDB); #else trsm( STORAGE, SIDE, 'a', TRANS, DIAG, M, N, &ALPHA, nullptr, LDA, nullptr, LDB); @@ -172,7 +172,7 @@ TYPED_TEST(trsm_IIT_ERS, invalid_TRANS) T ALPHA = T{2.3}; // Test with nullptr for all suitable arguments that shouldn't be accessed. -#if defined(TEST_BLAS) +#if defined(TEST_BLAS_LIKE) trsm( STORAGE, SIDE, UPLO, 'a', DIAG, M, N, nullptr, nullptr, LDA, nullptr, LDB); #else trsm( STORAGE, SIDE, UPLO, 'a', DIAG, M, N, &ALPHA, nullptr, LDA, nullptr, LDB); @@ -206,7 +206,7 @@ TYPED_TEST(trsm_IIT_ERS, invalid_DIAG) T ALPHA = T{2.3}; // Test with nullptr for all suitable arguments that shouldn't be accessed. -#if defined(TEST_BLAS) +#if defined(TEST_BLAS_LIKE) trsm( STORAGE, SIDE, UPLO, TRANS, 'a', M, N, nullptr, nullptr, LDA, nullptr, LDB); #else trsm( STORAGE, SIDE, UPLO, TRANS, 'a', M, N, &ALPHA, nullptr, LDA, nullptr, LDB); @@ -240,7 +240,7 @@ TYPED_TEST(trsm_IIT_ERS, invalid_m) T ALPHA = T{2.3}; // Test with nullptr for all suitable arguments that shouldn't be accessed. -#if defined(TEST_BLAS) +#if defined(TEST_BLAS_LIKE) trsm( STORAGE, SIDE, UPLO, TRANS, DIAG, -1, N, nullptr, nullptr, LDA, nullptr, LDB); #else trsm( STORAGE, SIDE, UPLO, TRANS, DIAG, -1, N, &ALPHA, nullptr, LDA, nullptr, LDB); @@ -274,7 +274,7 @@ TYPED_TEST(trsm_IIT_ERS, invalid_n) T ALPHA = T{2.3}; // Test with nullptr for all suitable arguments that shouldn't be accessed. -#if defined(TEST_BLAS) +#if defined(TEST_BLAS_LIKE) trsm( STORAGE, SIDE, UPLO, TRANS, DIAG, M, -1, nullptr, nullptr, LDA, nullptr, LDB); #else trsm( STORAGE, SIDE, UPLO, TRANS, DIAG, M, -1, &ALPHA, nullptr, LDA, nullptr, LDB); @@ -308,7 +308,7 @@ TYPED_TEST(trsm_IIT_ERS, invalid_lda) T ALPHA = T{2.3}; // Test with nullptr for all suitable arguments that shouldn't be accessed. -#if defined(TEST_BLAS) +#if defined(TEST_BLAS_LIKE) trsm( STORAGE, SIDE, UPLO, TRANS, DIAG, M, N, nullptr, nullptr, LDA - 1, nullptr, LDB); #else trsm( STORAGE, SIDE, UPLO, TRANS, DIAG, M, N, &ALPHA, nullptr, LDA - 1, nullptr, LDB); @@ -342,7 +342,7 @@ TYPED_TEST(trsm_IIT_ERS, invalid_ldb) T ALPHA = T{2.3}; // Test with nullptr for all suitable arguments that shouldn't be accessed. -#if defined(TEST_BLAS) +#if defined(TEST_BLAS_LIKE) trsm( STORAGE, SIDE, UPLO, TRANS, DIAG, M, N, nullptr, nullptr, LDA, nullptr, LDB - 1); #else trsm( STORAGE, SIDE, UPLO, TRANS, DIAG, M, N, &ALPHA, nullptr, LDA, nullptr, LDB - 1); @@ -387,7 +387,7 @@ TYPED_TEST(trsm_IIT_ERS, m_eq_zero) T ALPHA = T{2.3}; // Test with nullptr for all suitable arguments that shouldn't be accessed. -#if defined(TEST_BLAS) +#if defined(TEST_BLAS_LIKE) trsm( STORAGE, SIDE, UPLO, TRANS, DIAG, 0, N, nullptr, nullptr, LDA, nullptr, LDB); #else trsm( STORAGE, SIDE, UPLO, TRANS, DIAG, 0, N, &ALPHA, nullptr, LDA, nullptr, LDB); @@ -420,7 +420,7 @@ TYPED_TEST(trsm_IIT_ERS, n_eq_zero) T ALPHA = T{2.3}; // Test with nullptr for all suitable arguments that shouldn't be accessed. -#if defined(TEST_BLAS) +#if defined(TEST_BLAS_LIKE) trsm( STORAGE, SIDE, UPLO, TRANS, DIAG, M, 0, nullptr, nullptr, LDA, nullptr, LDB); #else trsm( STORAGE, SIDE, UPLO, TRANS, DIAG, M, 0, &ALPHA, nullptr, LDA, nullptr, LDB); diff --git a/gtestsuite/testsuite/level3/trsm/ctrsm/ctrsm_evt.cpp b/gtestsuite/testsuite/level3/trsm/ctrsm/ctrsm_evt.cpp index c6a8bbe33..c452044a6 100644 --- a/gtestsuite/testsuite/level3/trsm/ctrsm/ctrsm_evt.cpp +++ b/gtestsuite/testsuite/level3/trsm/ctrsm/ctrsm_evt.cpp @@ -115,7 +115,7 @@ INSTANTIATE_TEST_SUITE_P( ctrsmEVT, ::testing::Combine( ::testing::Values('c' -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE ,'r' #endif ), // storage format diff --git a/gtestsuite/testsuite/level3/trsm/ctrsm/ctrsm_generic.cpp b/gtestsuite/testsuite/level3/trsm/ctrsm/ctrsm_generic.cpp index c64bad6fb..1ec39b767 100644 --- a/gtestsuite/testsuite/level3/trsm/ctrsm/ctrsm_generic.cpp +++ b/gtestsuite/testsuite/level3/trsm/ctrsm/ctrsm_generic.cpp @@ -106,7 +106,7 @@ INSTANTIATE_TEST_SUITE_P( ctrsmGeneric, ::testing::Combine( ::testing::Values('c' -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE ,'r' #endif ), // storage format diff --git a/gtestsuite/testsuite/level3/trsm/dtrsm/dtrsm_evt.cpp b/gtestsuite/testsuite/level3/trsm/dtrsm/dtrsm_evt.cpp index 5c98da0cf..0bc0c2a0f 100644 --- a/gtestsuite/testsuite/level3/trsm/dtrsm/dtrsm_evt.cpp +++ b/gtestsuite/testsuite/level3/trsm/dtrsm/dtrsm_evt.cpp @@ -115,7 +115,7 @@ INSTANTIATE_TEST_SUITE_P( dtrsmEVT, ::testing::Combine( ::testing::Values('c' -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE ,'r' #endif ), // storage format diff --git a/gtestsuite/testsuite/level3/trsm/dtrsm/dtrsm_generic.cpp b/gtestsuite/testsuite/level3/trsm/dtrsm/dtrsm_generic.cpp index e13da41c9..05fa45c42 100644 --- a/gtestsuite/testsuite/level3/trsm/dtrsm/dtrsm_generic.cpp +++ b/gtestsuite/testsuite/level3/trsm/dtrsm/dtrsm_generic.cpp @@ -105,7 +105,7 @@ INSTANTIATE_TEST_SUITE_P( dtrsmGeneric, ::testing::Combine( ::testing::Values('c' -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE ,'r' #endif ), // storage format diff --git a/gtestsuite/testsuite/level3/trsm/strsm/strsm_evt.cpp b/gtestsuite/testsuite/level3/trsm/strsm/strsm_evt.cpp index 9c7b4e7b0..4c41ce708 100644 --- a/gtestsuite/testsuite/level3/trsm/strsm/strsm_evt.cpp +++ b/gtestsuite/testsuite/level3/trsm/strsm/strsm_evt.cpp @@ -114,7 +114,7 @@ INSTANTIATE_TEST_SUITE_P( strsmEVT, ::testing::Combine( ::testing::Values('c' -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE ,'r' #endif ), // storage format @@ -139,7 +139,7 @@ INSTANTIATE_TEST_SUITE_P( strsmEVT, ::testing::Combine( ::testing::Values('c' -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE ,'r' #endif ), // storage format diff --git a/gtestsuite/testsuite/level3/trsm/strsm/strsm_generic.cpp b/gtestsuite/testsuite/level3/trsm/strsm/strsm_generic.cpp index 47f312aee..4234277bd 100644 --- a/gtestsuite/testsuite/level3/trsm/strsm/strsm_generic.cpp +++ b/gtestsuite/testsuite/level3/trsm/strsm/strsm_generic.cpp @@ -105,7 +105,7 @@ INSTANTIATE_TEST_SUITE_P( strsmGeneric, ::testing::Combine( ::testing::Values('c' -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE ,'r' #endif ), // storage format diff --git a/gtestsuite/testsuite/level3/trsm/trsm.h b/gtestsuite/testsuite/level3/trsm/trsm.h index 37f8f3755..6eb60fcb5 100644 --- a/gtestsuite/testsuite/level3/trsm/trsm.h +++ b/gtestsuite/testsuite/level3/trsm/trsm.h @@ -80,6 +80,22 @@ static void trsm_( char side, char uploa, char transa, char diaga, gtint_t m, throw std::runtime_error("Error in testsuite/level3/trsm.h: Invalid typename in trsm_()."); } +template +static void trsm_blis_impl( char side, char uploa, char transa, char diaga, gtint_t m, + gtint_t n, T* alpha, T* ap, gtint_t lda, T* bp, gtint_t ldb ) +{ + if constexpr (std::is_same::value) + strsm_blis_impl( &side, &uploa, &transa, &diaga, &m, &n, alpha, ap, &lda, bp, &ldb ); + else if constexpr (std::is_same::value) + dtrsm_blis_impl( &side, &uploa, &transa, &diaga, &m, &n, alpha, ap, &lda, bp, &ldb ); + else if constexpr (std::is_same::value) + ctrsm_blis_impl( &side, &uploa, &transa, &diaga, &m, &n, alpha, ap, &lda, bp, &ldb ); + else if constexpr (std::is_same::value) + ztrsm_blis_impl( &side, &uploa, &transa, &diaga, &m, &n, alpha, ap, &lda, bp, &ldb ); + else + throw std::runtime_error("Error in testsuite/level3/trsm.h: Invalid typename in trsm_blis_impl()."); +} + template static void cblas_trsm( char storage, char side, char uploa, char transa, char diaga, gtint_t m, gtint_t n, T* alpha, T* ap, gtint_t lda, @@ -195,7 +211,11 @@ static void trsm( char storage, char side, char uploa, char transa, char diaga, trsm_( side, uploa, transa, diaga, m, n, alpha, ap, lda, bp, ldb ); else throw std::runtime_error("Error in testsuite/level3/trsm.h: BLAS interface cannot be tested for row-major order."); - +#elif TEST_BLAS_BLIS_IMPL + if( storage == 'c' || storage == 'C' ) + trsm_blis_impl( side, uploa, transa, diaga, m, n, alpha, ap, lda, bp, ldb ); + else + throw std::runtime_error("Error in testsuite/level3/trsm.h: BLAS_BLIS_IMPL interface cannot be tested for row-major order."); #elif TEST_CBLAS cblas_trsm( storage, side, uploa, transa, diaga, m, n, alpha, ap, lda, bp, ldb ); #elif TEST_BLIS_TYPED diff --git a/gtestsuite/testsuite/level3/trsm/ztrsm/ztrsm_evt.cpp b/gtestsuite/testsuite/level3/trsm/ztrsm/ztrsm_evt.cpp index 9feee4fd9..257928ac5 100644 --- a/gtestsuite/testsuite/level3/trsm/ztrsm/ztrsm_evt.cpp +++ b/gtestsuite/testsuite/level3/trsm/ztrsm/ztrsm_evt.cpp @@ -115,7 +115,7 @@ INSTANTIATE_TEST_SUITE_P( ztrsmEVT, ::testing::Combine( ::testing::Values('c' -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE ,'r' #endif ), // storage format diff --git a/gtestsuite/testsuite/level3/trsm/ztrsm/ztrsm_generic.cpp b/gtestsuite/testsuite/level3/trsm/ztrsm/ztrsm_generic.cpp index d3a584f4a..2b4fe6aac 100644 --- a/gtestsuite/testsuite/level3/trsm/ztrsm/ztrsm_generic.cpp +++ b/gtestsuite/testsuite/level3/trsm/ztrsm/ztrsm_generic.cpp @@ -106,7 +106,7 @@ INSTANTIATE_TEST_SUITE_P( ztrsmGeneric, ::testing::Combine( ::testing::Values('c' -#ifndef TEST_BLAS +#ifndef TEST_BLAS_LIKE ,'r' #endif ), // storage format diff --git a/gtestsuite/testsuite/util/asumv/asumv.h b/gtestsuite/testsuite/util/asumv/asumv.h index 15ac08a8c..2025b1709 100644 --- a/gtestsuite/testsuite/util/asumv/asumv.h +++ b/gtestsuite/testsuite/util/asumv/asumv.h @@ -61,7 +61,21 @@ static RT asumv_(gtint_t n, T* x, gtint_t incx){ else if constexpr (std::is_same::value) return dzasum_( &n, x, &incx ); else - throw std::runtime_error("Error in testsuite/util/asumv.h: Invalid typename in asumv()."); + throw std::runtime_error("Error in testsuite/util/asumv.h: Invalid typename in asumv_()."); +} + +template::real_type> +static RT asumv_blis_impl(gtint_t n, T* x, gtint_t incx){ + if constexpr (std::is_same::value) + return sasum_blis_impl( &n, x, &incx ); + else if constexpr (std::is_same::value) + return dasum_blis_impl( &n, x, &incx ); + else if constexpr (std::is_same::value) + return scasum_blis_impl( &n, x, &incx ); + else if constexpr (std::is_same::value) + return dzasum_blis_impl( &n, x, &incx ); + else + throw std::runtime_error("Error in testsuite/util/asumv.h: Invalid typename in asumv_blis_impl()."); } template::real_type> @@ -115,6 +129,8 @@ static RT asumv(gtint_t n, T* x, gtint_t incx) #ifdef TEST_BLAS return asumv_(n, x, incx); +#elif TEST_BLAS_BLIS_IMPL + return asumv_blis_impl(n, x, incx); #elif TEST_CBLAS return cblas_asumv(n, x, incx); #elif TEST_BLIS_TYPED diff --git a/gtestsuite/testsuite/util/asumv/asumv_IIT_ERS.cpp b/gtestsuite/testsuite/util/asumv/asumv_IIT_ERS.cpp index 60a224914..16d153c19 100644 --- a/gtestsuite/testsuite/util/asumv/asumv_IIT_ERS.cpp +++ b/gtestsuite/testsuite/util/asumv/asumv_IIT_ERS.cpp @@ -45,7 +45,7 @@ TYPED_TEST_SUITE(asumv_IIT_ERS, TypeParam); using namespace testinghelpers::IIT; -#if defined(TEST_BLAS) || defined(TEST_CBLAS) +#if defined(TEST_BLAS_LIKE) || defined(TEST_CBLAS) /* BLAS Early Return Scenarios(ERS): diff --git a/gtestsuite/testsuite/util/nrm2/nrm2.h b/gtestsuite/testsuite/util/nrm2/nrm2.h index bf466d66e..45780998b 100644 --- a/gtestsuite/testsuite/util/nrm2/nrm2.h +++ b/gtestsuite/testsuite/util/nrm2/nrm2.h @@ -69,6 +69,20 @@ static RT nrm2_(gtint_t n, T* x, gtint_t incx){ throw std::runtime_error("Error in testsuite/level1/nrm2.h: Invalid typename in nrm2_()."); } +template::real_type> +static RT nrm2_blis_impl(gtint_t n, T* x, gtint_t incx){ + if constexpr (std::is_same::value) + return snrm2_blis_impl( &n, x, &incx ); + else if constexpr (std::is_same::value) + return dnrm2_blis_impl( &n, x, &incx ); + else if constexpr (std::is_same::value) + return scnrm2_blis_impl( &n, x, &incx ); + else if constexpr (std::is_same::value) + return dznrm2_blis_impl( &n, x, &incx ); + else + throw std::runtime_error("Error in testsuite/level1/nrm2.h: Invalid typename in nrm2_blis_impl()."); +} + template::real_type> static RT cblas_nrm2(gtint_t n, T* x, gtint_t incx){ if constexpr (std::is_same::value) @@ -120,6 +134,8 @@ static RT nrm2(gtint_t n, T* x, gtint_t incx) #ifdef TEST_BLAS return nrm2_(n, x, incx); +#elif TEST_BLAS_BLIS_IMPL + return nrm2_blis_impl(n, x, incx); #elif TEST_CBLAS return cblas_nrm2(n, x, incx); #elif TEST_BLIS_TYPED