Merge pull request #4524 from martin-frbg/test3m

Enable GEMM3M tests when the architecture supports GEMM3M
This commit is contained in:
Martin Kroeker 2024-02-27 10:39:28 +01:00 committed by GitHub
commit 608effee7b
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
13 changed files with 8036 additions and 19 deletions

View File

@ -42,6 +42,7 @@ jobs:
- name: Install Dependencies - name: Install Dependencies
run: | run: |
if [ "$RUNNER_OS" == "Linux" ]; then if [ "$RUNNER_OS" == "Linux" ]; then
sudo apt-get update
sudo apt-get install -y gfortran cmake ccache libtinfo5 sudo apt-get install -y gfortran cmake ccache libtinfo5
elif [ "$RUNNER_OS" == "macOS" ]; then elif [ "$RUNNER_OS" == "macOS" ]; then
# It looks like "gfortran" isn't working correctly unless "gcc" is re-installed. # It looks like "gfortran" isn't working correctly unless "gcc" is re-installed.

View File

@ -88,6 +88,17 @@ if (NOT NOFORTRAN)
auxiliary.c auxiliary.c
c_xerbla.c c_xerbla.c
constant.c) constant.c)
if (USE_GEMM3M)
if ((${float_char} STREQUAL "c") OR (${float_char} STREQUAL "z"))
add_executable(x${float_char}cblat3_3m
c_${float_char}blat3_3m.f
c_${float_char}blas3_3m.c
c_${float_char}3chke_3m.c
auxiliary.c
c_xerbla.c
constant.c)
endif()
endif()
else() else()
add_executable(x${float_char}cblat3 add_executable(x${float_char}cblat3
c_${float_char}blat3c.c c_${float_char}blat3c.c
@ -96,6 +107,17 @@ else()
auxiliary.c auxiliary.c
c_xerbla.c c_xerbla.c
constant.c) constant.c)
if (USE_GEMM3M)
if ((${float_char} STREQUAL "c") OR (${float_char} STREQUAL "z"))
add_executable(x${float_char}cblat3_3m
c_${float_char}blat3c_3m.c
c_${float_char}blas3_3m.c
c_${float_char}3chke_3m.c
auxiliary.c
c_xerbla.c
constant.c)
endif()
endif()
endif() endif()
target_link_libraries(x${float_char}cblat3 ${OpenBLAS_LIBNAME}) target_link_libraries(x${float_char}cblat3 ${OpenBLAS_LIBNAME})
if (USE_OPENMP AND (${CMAKE_Fortran_COMPILER_ID} STREQUAL GNU) AND (${CMAKE_C_COMPILER_ID} STREQUAL Clang)) if (USE_OPENMP AND (${CMAKE_Fortran_COMPILER_ID} STREQUAL GNU) AND (${CMAKE_C_COMPILER_ID} STREQUAL Clang))
@ -105,7 +127,24 @@ endif()
if(${CMAKE_SYSTEM_NAME} MATCHES "Linux" OR ${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD" OR ${CMAKE_SYSTEM_NAME} MATCHES "QNX") if(${CMAKE_SYSTEM_NAME} MATCHES "Linux" OR ${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD" OR ${CMAKE_SYSTEM_NAME} MATCHES "QNX")
target_link_libraries(x${float_char}cblat3 m) target_link_libraries(x${float_char}cblat3 m)
endif() endif()
if (USE_GEMM3M)
if ((${float_char} STREQUAL "c") OR (${float_char} STREQUAL "z"))
target_link_libraries(x${float_char}cblat3_3m ${OpenBLAS_LIBNAME})
if (USE_OPENMP AND (${CMAKE_Fortran_COMPILER_ID} STREQUAL GNU) AND (${CMAKE_C_COMPILER_ID} STREQUAL Clang))
string(REGEX REPLACE "-fopenmp" "" CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS}")
target_link_libraries(x${float_char}cblat3 omp pthread)
endif()
if(${CMAKE_SYSTEM_NAME} MATCHES "Linux" OR ${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD" OR ${CMAKE_SYSTEM_NAME} MATCHES "QNX")
target_link_libraries(x${float_char}cblat3_3m m)
endif()
endif()
endif()
add_test(NAME "x${float_char}cblat3" add_test(NAME "x${float_char}cblat3"
COMMAND ${test_helper} $<TARGET_FILE:x${float_char}cblat3> "${PROJECT_SOURCE_DIR}/ctest/${float_char}in3") COMMAND ${test_helper} $<TARGET_FILE:x${float_char}cblat3> "${PROJECT_SOURCE_DIR}/ctest/${float_char}in3")
if (USE_GEMM3M)
if ((${float_char} STREQUAL "c") OR (${float_char} STREQUAL "z"))
add_test(NAME "x${float_char}cblat3_3m"
COMMAND ${test_helper} $<TARGET_FILE:x${float_char}cblat3_3m> "${PROJECT_SOURCE_DIR}/ctest/${float_char}in3_3m")
endif()
endif()
endforeach() endforeach()

View File

@ -5,6 +5,24 @@
TOPDIR = .. TOPDIR = ..
include $(TOPDIR)/Makefile.system include $(TOPDIR)/Makefile.system
SUPPORT_GEMM3M = 0
ifeq ($(ARCH), x86)
SUPPORT_GEMM3M = 1
endif
ifeq ($(ARCH), x86_64)
SUPPORT_GEMM3M = 1
endif
ifeq ($(ARCH), ia64)
SUPPORT_GEMM3M = 1
endif
ifeq ($(ARCH), MIPS)
SUPPORT_GEMM3M = 1
endif
override CFLAGS += -DADD$(BU) -DCBLAS override CFLAGS += -DADD$(BU) -DCBLAS
ifeq ($(F_COMPILER),GFORTRAN) ifeq ($(F_COMPILER),GFORTRAN)
override FFLAGS += -fno-tree-vectorize override FFLAGS += -fno-tree-vectorize
@ -144,9 +162,15 @@ all3targets += xdcblat3
endif endif
ifeq ($(BUILD_COMPLEX),1) ifeq ($(BUILD_COMPLEX),1)
all3targets += xccblat3 all3targets += xccblat3
ifeq ($(SUPPORT_GEMM3M),1)
all3targets += xccblat3_3m
endif
endif endif
ifeq ($(BUILD_COMPLEX16),1) ifeq ($(BUILD_COMPLEX16),1)
all3targets += xzcblat3 all3targets += xzcblat3
ifeq ($(SUPPORT_GEMM3M),1)
all3targets += xzcblat3_3m
endif
endif endif
all3: $(all3targets) all3: $(all3targets)
@ -181,9 +205,9 @@ endif
endif endif
endif endif
all3_3m: xzcblat3_3m xccblat3_3m ifeq ($(SUPPORT_GEMM3M),1)
ifeq ($(USE_OPENMP), 1) ifeq ($(USE_OPENMP), 1)
ifeq ($(BUILD_SINGLE),1) ifeq ($(BUILD_COMPLEX),1)
OMP_NUM_THREADS=2 ./xccblat3_3m < cin3_3m OMP_NUM_THREADS=2 ./xccblat3_3m < cin3_3m
endif endif
ifeq ($(BUILD_COMPLEX16),1) ifeq ($(BUILD_COMPLEX16),1)
@ -197,6 +221,7 @@ ifeq ($(BUILD_COMPLEX16),1)
OPENBLAS_NUM_THREADS=2 ./xzcblat3_3m < zin3_3m OPENBLAS_NUM_THREADS=2 ./xzcblat3_3m < zin3_3m
endif endif
endif endif
endif
@ -271,8 +296,10 @@ xccblat2: $(ctestl2o) c_cblat2.o $(TOPDIR)/$(LIBNAME)
$(FC) $(FLDFLAGS) -o xccblat2 c_cblat2.o $(ctestl2o) $(LIB) $(EXTRALIB) $(CEXTRALIB) $(FC) $(FLDFLAGS) -o xccblat2 c_cblat2.o $(ctestl2o) $(LIB) $(EXTRALIB) $(CEXTRALIB)
xccblat3: $(ctestl3o) c_cblat3.o $(TOPDIR)/$(LIBNAME) xccblat3: $(ctestl3o) c_cblat3.o $(TOPDIR)/$(LIBNAME)
$(FC) $(FLDFLAGS) -o xccblat3 c_cblat3.o $(ctestl3o) $(LIB) $(EXTRALIB) $(CEXTRALIB) $(FC) $(FLDFLAGS) -o xccblat3 c_cblat3.o $(ctestl3o) $(LIB) $(EXTRALIB) $(CEXTRALIB)
ifeq ($(SUPPORT_GEMM3M),1)
xccblat3_3m: $(ctestl3o_3m) c_cblat3_3m.o $(TOPDIR)/$(LIBNAME) xccblat3_3m: $(ctestl3o_3m) c_cblat3_3m.o $(TOPDIR)/$(LIBNAME)
$(FC) $(FLDFLAGS) -o xccblat3_3m c_cblat3_3m.o $(ctestl3o_3m) $(LIB) $(EXTRALIB) $(CEXTRALIB) $(FC) $(FLDFLAGS) -o xccblat3_3m c_cblat3_3m.o $(ctestl3o_3m) $(LIB) $(EXTRALIB) $(CEXTRALIB)
endif
else else
xccblat1: $(ctestl1o) c_cblat1c.o $(TOPDIR)/$(LIBNAME) xccblat1: $(ctestl1o) c_cblat1c.o $(TOPDIR)/$(LIBNAME)
$(CC) $(CFLAGS) -o xccblat1 c_cblat1c.o $(ctestl1o) $(LIB) $(CEXTRALIB) $(filter-out -lgfortran,$(EXTRALIB)) $(CC) $(CFLAGS) -o xccblat1 c_cblat1c.o $(ctestl1o) $(LIB) $(CEXTRALIB) $(filter-out -lgfortran,$(EXTRALIB))
@ -280,6 +307,10 @@ xccblat2: $(ctestl2o) c_cblat2c.o $(TOPDIR)/$(LIBNAME)
$(CC) $(CFLAGS) -o xccblat2 c_cblat2c.o $(ctestl2o) $(LIB) $(CEXTRALIB) $(filter-out -lgfortran,$(EXTRALIB)) $(CC) $(CFLAGS) -o xccblat2 c_cblat2c.o $(ctestl2o) $(LIB) $(CEXTRALIB) $(filter-out -lgfortran,$(EXTRALIB))
xccblat3: $(ctestl3o) c_cblat3c.o $(TOPDIR)/$(LIBNAME) xccblat3: $(ctestl3o) c_cblat3c.o $(TOPDIR)/$(LIBNAME)
$(CC) $(CFLAGS) -o xccblat3 c_cblat3c.o $(ctestl3o) $(LIB) $(CEXTRALIB) $(filter-out -lgfortran,$(EXTRALIB)) $(CC) $(CFLAGS) -o xccblat3 c_cblat3c.o $(ctestl3o) $(LIB) $(CEXTRALIB) $(filter-out -lgfortran,$(EXTRALIB))
ifeq ($(SUPPORT_GEMM3M),1)
xccblat3_3m: $(ctestl3o_3m) c_cblat3c_3m.o $(TOPDIR)/$(LIBNAME)
$(CC) $(CFLAGS) -o xccblat3_3m c_cblat3c_3m.o $(ctestl3o_3m) $(LIB) $(EXTRALIB) $(CEXTRALIB)
endif
endif endif
endif endif
@ -293,8 +324,10 @@ xzcblat2: $(ztestl2o) c_zblat2.o $(TOPDIR)/$(LIBNAME)
$(FC) $(FLDFLAGS) -o xzcblat2 c_zblat2.o $(ztestl2o) $(LIB) $(EXTRALIB) $(CEXTRALIB) $(FC) $(FLDFLAGS) -o xzcblat2 c_zblat2.o $(ztestl2o) $(LIB) $(EXTRALIB) $(CEXTRALIB)
xzcblat3: $(ztestl3o) c_zblat3.o $(TOPDIR)/$(LIBNAME) xzcblat3: $(ztestl3o) c_zblat3.o $(TOPDIR)/$(LIBNAME)
$(FC) $(FLDFLAGS) -o xzcblat3 c_zblat3.o $(ztestl3o) $(LIB) $(EXTRALIB) $(CEXTRALIB) $(FC) $(FLDFLAGS) -o xzcblat3 c_zblat3.o $(ztestl3o) $(LIB) $(EXTRALIB) $(CEXTRALIB)
ifeq ($(SUPPORT_GEMM3M),1)
xzcblat3_3m: $(ztestl3o_3m) c_zblat3_3m.o $(TOPDIR)/$(LIBNAME) xzcblat3_3m: $(ztestl3o_3m) c_zblat3_3m.o $(TOPDIR)/$(LIBNAME)
$(FC) $(FLDFLAGS) -o xzcblat3_3m c_zblat3_3m.o $(ztestl3o_3m) $(LIB) $(EXTRALIB) $(CEXTRALIB) $(FC) $(FLDFLAGS) -o xzcblat3_3m c_zblat3_3m.o $(ztestl3o_3m) $(LIB) $(EXTRALIB) $(CEXTRALIB)
endif
else else
xzcblat1: $(ztestl1o) c_zblat1c.o $(TOPDIR)/$(LIBNAME) xzcblat1: $(ztestl1o) c_zblat1c.o $(TOPDIR)/$(LIBNAME)
$(CC) $(CFLAGS) -o xzcblat1 c_zblat1c.o $(ztestl1o) $(LIB) $(CEXTRALIB) $(filter-out -lgfortran,$(EXTRALIB)) $(CC) $(CFLAGS) -o xzcblat1 c_zblat1c.o $(ztestl1o) $(LIB) $(CEXTRALIB) $(filter-out -lgfortran,$(EXTRALIB))
@ -302,6 +335,10 @@ xzcblat2: $(ztestl2o) c_zblat2c.o $(TOPDIR)/$(LIBNAME)
$(CC) $(CFLAGS) -o xzcblat2 c_zblat2c.o $(ztestl2o) $(LIB) $(CEXTRALIB) $(filter-out -lgfortran,$(EXTRALIB)) $(CC) $(CFLAGS) -o xzcblat2 c_zblat2c.o $(ztestl2o) $(LIB) $(CEXTRALIB) $(filter-out -lgfortran,$(EXTRALIB))
xzcblat3: $(ztestl3o) c_zblat3c.o $(TOPDIR)/$(LIBNAME) xzcblat3: $(ztestl3o) c_zblat3c.o $(TOPDIR)/$(LIBNAME)
$(CC) $(CFLAGS) -o xzcblat3 c_zblat3c.o $(ztestl3o) $(LIB) $(CEXTRALIB) $(filter-out -lgfortran,$(EXTRALIB)) $(CC) $(CFLAGS) -o xzcblat3 c_zblat3c.o $(ztestl3o) $(LIB) $(CEXTRALIB) $(filter-out -lgfortran,$(EXTRALIB))
ifeq ($(SUPPORT_GEMM3M),1)
xzcblat3_3m: $(ztestl3o_3m) c_zblat3c_3m.o $(TOPDIR)/$(LIBNAME)
$(CC) $(CFLAGS) -o xzcblat3_3m c_zblat3c_3m.o $(ztestl3o_3m) $(LIB) $(EXTRALIB) $(CEXTRALIB)
endif
endif endif
endif endif

3942
ctest/c_cblat3c_3m.c Normal file

File diff suppressed because it is too large Load Diff

3951
ctest/c_zblat3c_3m.c Normal file

File diff suppressed because it is too large Load Diff

View File

@ -21,7 +21,16 @@ endif()
if (BUILD_COMPLEX16) if (BUILD_COMPLEX16)
list (APPEND OpenBLAS_Tests zblat1 zblat2 zblat3) list (APPEND OpenBLAS_Tests zblat1 zblat2 zblat3)
endif() endif()
message (STATUS CCOMP ${CMAKE_C_COMPILER_ID} FCOMP ${CMAKE_Fortran_COMPILER_ID})
if (USE_GEMM3M)
if (BUILD_COMPLEX)
list (APPEND OpenBLAS_Tests cblat3_3m)
endif ()
if (BUILD_COMPLEX16)
list (APPEND OpenBLAS_Tests zblat3_3m)
endif ()
endif ()
foreach(test_bin ${OpenBLAS_Tests}) foreach(test_bin ${OpenBLAS_Tests})
add_executable(${test_bin} ${test_bin}.f) add_executable(${test_bin} ${test_bin}.f)
target_link_libraries(${test_bin} ${OpenBLAS_LIBNAME}) target_link_libraries(${test_bin} ${OpenBLAS_LIBNAME})
@ -82,4 +91,10 @@ add_test(NAME "${float_type}blas2"
COMMAND ${helper_prefix} $<TARGET_FILE:${float_type}blat2> "${PROJECT_SOURCE_DIR}/test/${float_type}blat2.dat" ${float_type_upper}BLAT2.SUMM) COMMAND ${helper_prefix} $<TARGET_FILE:${float_type}blat2> "${PROJECT_SOURCE_DIR}/test/${float_type}blat2.dat" ${float_type_upper}BLAT2.SUMM)
add_test(NAME "${float_type}blas3" add_test(NAME "${float_type}blas3"
COMMAND ${helper_prefix} $<TARGET_FILE:${float_type}blat3> "${PROJECT_SOURCE_DIR}/test/${float_type}blat3.dat" ${float_type_upper}BLAT3.SUMM) COMMAND ${helper_prefix} $<TARGET_FILE:${float_type}blat3> "${PROJECT_SOURCE_DIR}/test/${float_type}blat3.dat" ${float_type_upper}BLAT3.SUMM)
if (USE_GEMM3M)
if ((${float_type} STREQUAL "c") OR (${float_type} STREQUAL "z"))
add_test(NAME "${float_type}blas3_3m"
COMMAND ${helper_prefix} $<TARGET_FILE:${float_type}blat3_3m> "${PROJECT_SOURCE_DIR}/test/${float_type}blat3_3m.dat" ${float_type_upper}BLAT3_3M.SUMM)
endif()
endif()
endforeach() endforeach()

View File

@ -4,6 +4,24 @@ ifeq ($(F_COMPILER),GFORTRAN)
override FFLAGS += -fno-tree-vectorize override FFLAGS += -fno-tree-vectorize
endif endif
SUPPORT_GEMM3M = 0
ifeq ($(ARCH), x86)
SUPPORT_GEMM3M = 1
endif
ifeq ($(ARCH), x86_64)
SUPPORT_GEMM3M = 1
endif
ifeq ($(ARCH), ia64)
SUPPORT_GEMM3M = 1
endif
ifeq ($(ARCH), MIPS)
SUPPORT_GEMM3M = 1
endif
ifeq ($(NOFORTRAN),1) ifeq ($(NOFORTRAN),1)
all :: all ::
else else
@ -153,11 +171,20 @@ ifeq ($(BUILD_DOUBLE),1)
D3=dblat3 D3=dblat3
endif endif
ifeq ($(BUILD_COMPLEX),1) ifeq ($(BUILD_COMPLEX),1)
ifeq ($(SUPPORT_GEMM3M),1)
C3=cblat3 cblat3_3m
else
C3=cblat3 C3=cblat3
endif endif
endif
ifeq ($(BUILD_COMPLEX16),1) ifeq ($(BUILD_COMPLEX16),1)
ifeq ($(SUPPORT_GEMM3M),1)
Z3=zblat3 zblat3_3m
else
Z3=zblat3 Z3=zblat3
endif endif
endif
level3: $(B3) $(S3) $(D3) $(C3) $(Z3) level3: $(B3) $(S3) $(D3) $(C3) $(Z3)

View File

@ -126,7 +126,7 @@ static float check_cgemv(char api, char order, char trans, blasint m, blasint n,
srand_generate(data_cgemv_t.y_test, m * inc_y * 2); srand_generate(data_cgemv_t.y_test, m * inc_y * 2);
// Copy vector y for reference funcs // Copy vector y for reference funcs
for (int i = 0; i < m * inc_y * 2; i++) { for (i = 0; i < m * inc_y * 2; i++) {
data_cgemv_t.y_verify[i] = data_cgemv_t.y_test[i]; data_cgemv_t.y_verify[i] = data_cgemv_t.y_test[i];
} }

View File

@ -188,7 +188,7 @@ static float check_csbmv(char uplo, blasint n, blasint k, float *alpha, blasint
char trans = 'N'; char trans = 'N';
// Symmetric band packed matrix for sbmv // Symmetric band packed matrix for sbmv
float a[lda * n * 2]; float *a = (float*) malloc(lda * n * 2 * sizeof(float));
// Fill symmetric packed matrix sp_matrix, vector b_test, vector c_test // Fill symmetric packed matrix sp_matrix, vector b_test, vector c_test
srand_generate(data_csbmv.sp_matrix, n * (n + 1)); srand_generate(data_csbmv.sp_matrix, n * (n + 1));
@ -216,7 +216,7 @@ static float check_csbmv(char uplo, blasint n, blasint k, float *alpha, blasint
// Find the differences between output vector caculated by csbmv and cgemv // Find the differences between output vector caculated by csbmv and cgemv
for (i = 0; i < n * inc_c * 2; i++) for (i = 0; i < n * inc_c * 2; i++)
data_csbmv.c_test[i] -= data_csbmv.c_verify[i]; data_csbmv.c_test[i] -= data_csbmv.c_verify[i];
free(a);
// Find the norm of differences // Find the norm of differences
return BLASFUNC(scnrm2)(&n, data_csbmv.c_test, &inc_c); return BLASFUNC(scnrm2)(&n, data_csbmv.c_test, &inc_c);
} }

View File

@ -402,13 +402,14 @@ CTEST(idamin, min_idx_in_vec_tail){
CTEST(idamin, min_idx_in_vec_tail_inc_1){ CTEST(idamin, min_idx_in_vec_tail_inc_1){
blasint i; blasint i;
blasint N = ELEMENTS, inc = 1; blasint N = ELEMENTS, inc = 1;
double x[ELEMENTS * inc]; double *x = (double*)malloc(ELEMENTS * inc * sizeof(double));
for (i = 0; i < N * inc; i ++) { for (i = 0; i < N * inc; i ++) {
x[i] = i + 1000; x[i] = i + 1000;
} }
x[(N - 1) * inc] = 0.0f; x[(N - 1) * inc] = 0.0f;
blasint index = BLASFUNC(idamin)(&N, x, &inc); blasint index = BLASFUNC(idamin)(&N, x, &inc);
free(x);
ASSERT_EQUAL(N, index); ASSERT_EQUAL(N, index);
} }
@ -775,13 +776,14 @@ CTEST(idamin, c_api_min_idx_in_vec_tail){
CTEST(idamin, c_api_min_idx_in_vec_tail_inc_1){ CTEST(idamin, c_api_min_idx_in_vec_tail_inc_1){
blasint i; blasint i;
blasint N = ELEMENTS, inc = 1; blasint N = ELEMENTS, inc = 1;
double x[ELEMENTS * inc]; double *x = (double*) malloc(ELEMENTS * inc * sizeof(double));
for (i = 0; i < N * inc; i ++) { for (i = 0; i < N * inc; i ++) {
x[i] = i + 1000; x[i] = i + 1000;
} }
x[(N - 1) * inc] = 0.0; x[(N - 1) * inc] = 0.0;
blasint index = cblas_idamin(N, x, inc); blasint index = cblas_idamin(N, x, inc);
free(x);
ASSERT_EQUAL(N - 1, index); ASSERT_EQUAL(N - 1, index);
} }
#endif #endif

View File

@ -402,13 +402,14 @@ CTEST(isamin, min_idx_in_vec_tail){
CTEST(isamin, min_idx_in_vec_tail_inc_1){ CTEST(isamin, min_idx_in_vec_tail_inc_1){
blasint i; blasint i;
blasint N = ELEMENTS, inc = 1; blasint N = ELEMENTS, inc = 1;
float x[ELEMENTS * inc]; float *x = (float*) malloc(ELEMENTS * inc * sizeof(float));
for (i = 0; i < N * inc; i ++) { for (i = 0; i < N * inc; i ++) {
x[i] = i + 1000; x[i] = i + 1000;
} }
x[(N - 1) * inc] = 0.0f; x[(N - 1) * inc] = 0.0f;
blasint index = BLASFUNC(isamin)(&N, x, &inc); blasint index = BLASFUNC(isamin)(&N, x, &inc);
free(x);
ASSERT_EQUAL(N, index); ASSERT_EQUAL(N, index);
} }
@ -775,13 +776,14 @@ CTEST(isamin, c_api_min_idx_in_vec_tail){
CTEST(isamin, c_api_min_idx_in_vec_tail_inc_1){ CTEST(isamin, c_api_min_idx_in_vec_tail_inc_1){
blasint i; blasint i;
blasint N = ELEMENTS, inc = 1; blasint N = ELEMENTS, inc = 1;
float x[ELEMENTS * inc]; float *x = (float*)malloc(ELEMENTS * inc * sizeof(float));
for (i = 0; i < N * inc; i ++) { for (i = 0; i < N * inc; i ++) {
x[i] = i + 1000; x[i] = i + 1000;
} }
x[(N - 1) * inc] = 0.0f; x[(N - 1) * inc] = 0.0f;
blasint index = cblas_isamin(N, x, inc); blasint index = cblas_isamin(N, x, inc);
free(x);
ASSERT_EQUAL(N - 1, index); ASSERT_EQUAL(N - 1, index);
} }
#endif #endif

View File

@ -126,7 +126,7 @@ static double check_zgemv(char api, char order, char trans, blasint m, blasint n
drand_generate(data_zgemv_t.y_test, m * inc_y * 2); drand_generate(data_zgemv_t.y_test, m * inc_y * 2);
// Copy vector y for reference funcs // Copy vector y for reference funcs
for (int i = 0; i < m * inc_y * 2; i++) for (i = 0; i < m * inc_y * 2; i++)
{ {
data_zgemv_t.y_verify[i] = data_zgemv_t.y_test[i]; data_zgemv_t.y_verify[i] = data_zgemv_t.y_test[i];
} }

View File

@ -188,7 +188,7 @@ static double check_zsbmv(char uplo, blasint n, blasint k, double *alpha, blasin
char trans = 'N'; char trans = 'N';
// Symmetric band packed matrix for sbmv // Symmetric band packed matrix for sbmv
double a[lda * n * 2]; double *a = (double*) malloc(lda * n * 2 * sizeof(double));
// Fill symmetric packed matrix sp_matrix, vector b_test, vector c_test // Fill symmetric packed matrix sp_matrix, vector b_test, vector c_test
drand_generate(data_zsbmv.sp_matrix, n * (n + 1)); drand_generate(data_zsbmv.sp_matrix, n * (n + 1));
@ -213,6 +213,7 @@ static double check_zsbmv(char uplo, blasint n, blasint k, double *alpha, blasin
BLASFUNC(zsbmv)(&uplo, &n, &k, alpha, a, &lda, BLASFUNC(zsbmv)(&uplo, &n, &k, alpha, a, &lda,
data_zsbmv.b_test, &inc_b, beta, data_zsbmv.c_test, &inc_c); data_zsbmv.b_test, &inc_b, beta, data_zsbmv.c_test, &inc_c);
free(a);
// Find the differences between output vector caculated by zsbmv and zgemv // Find the differences between output vector caculated by zsbmv and zgemv
for (i = 0; i < n * inc_c * 2; i++) for (i = 0; i < n * inc_c * 2; i++)
data_zsbmv.c_test[i] -= data_zsbmv.c_verify[i]; data_zsbmv.c_test[i] -= data_zsbmv.c_verify[i];