Skip to content

Commit edb7ab5

Browse files
author
Chip-Kerchner
committed
Merge branch 'develop' of https://github.com/openmathlib/openblas into develop
2 parents ccc7bfa + 577d480 commit edb7ab5

31 files changed

+12191
-69
lines changed

.github/workflows/dynamic_arch.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ jobs:
4242
- name: Install Dependencies
4343
run: |
4444
if [ "$RUNNER_OS" == "Linux" ]; then
45+
sudo apt-get update
4546
sudo apt-get install -y gfortran cmake ccache libtinfo5
4647
elif [ "$RUNNER_OS" == "macOS" ]; then
4748
# It looks like "gfortran" isn't working correctly unless "gcc" is re-installed.

CMakeLists.txt

Lines changed: 58 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@ option(BUILD_LAPACK_DEPRECATED "When building LAPACK, include also some older, d
2424

2525
option(BUILD_TESTING "Build LAPACK testsuite when building LAPACK" ON)
2626

27+
option(BUILD_BENCHMARKS "Build the collection of BLAS/LAPACK benchmarks" OFF)
28+
2729
option(C_LAPACK "Build LAPACK from C sources instead of the original Fortran" OFF)
2830

2931
option(BUILD_WITHOUT_CBLAS "Do not build the C interface (CBLAS) to the BLAS functions" OFF)
@@ -328,7 +330,7 @@ if (NOT NOFORTRAN)
328330
# Build test and ctest
329331
add_subdirectory(test)
330332
endif()
331-
if (BUILD_TESTING)
333+
if (BUILD_TESTING AND NOT BUILD_WITHOUT_LAPACK)
332334
add_subdirectory(lapack-netlib/TESTING)
333335
endif()
334336
endif()
@@ -458,6 +460,61 @@ if (BUILD_SHARED_LIBS AND NOT ${SYMBOLPREFIX}${SYMBOLSUFFIX} STREQUAL "")
458460
endif()
459461
endif()
460462
463+
if (BUILD_BENCHMARKS)
464+
#find_package(OpenMP REQUIRED)
465+
file(GLOB SOURCES "benchmark/*.c")
466+
if (NOT USE_OPENMP)
467+
file(GLOB REMFILE "benchmark/smallscaling.c")
468+
list(REMOVE_ITEM SOURCES ${REMFILE})
469+
endif()
470+
if (BUILD_WITHOUT_LAPACK)
471+
file(GLOB REMFILE "benchmark/cholesky.c")
472+
list(REMOVE_ITEM SOURCES ${REMFILE})
473+
file(GLOB REMFILE "benchmark/geev.c")
474+
list(REMOVE_ITEM SOURCES ${REMFILE})
475+
file(GLOB REMFILE "benchmark/gesv.c")
476+
list(REMOVE_ITEM SOURCES ${REMFILE})
477+
file(GLOB REMFILE "benchmark/getri.c")
478+
list(REMOVE_ITEM SOURCES ${REMFILE})
479+
file(GLOB REMFILE "benchmark/potrf.c")
480+
list(REMOVE_ITEM SOURCES ${REMFILE})
481+
file(GLOB REMFILE "benchmark/spmv.c")
482+
list(REMOVE_ITEM SOURCES ${REMFILE})
483+
file(GLOB REMFILE "benchmark/symv.c")
484+
list(REMOVE_ITEM SOURCES ${REMFILE})
485+
file(GLOB REMFILE "benchmark/linpack.c")
486+
list(REMOVE_ITEM SOURCES ${REMFILE})
487+
endif()
488+
if (NOT USE_GEMM3M)
489+
file(GLOB REMFILE "benchmark/gemm3m.c")
490+
list(REMOVE_ITEM SOURCES ${REMFILE})
491+
endif()
492+
foreach(source ${SOURCES})
493+
get_filename_component(name ${source} NAME_WE)
494+
if ((NOT ${name} STREQUAL "zdot-intel") AND (NOT ${name} STREQUAL "cula_wrapper"))
495+
set(defines DEFAULT COMPLEX DOUBLE "COMPLEX\;DOUBLE")
496+
foreach(define ${defines})
497+
set(target_name "benchmark_${name}")
498+
if (NOT "${define}" STREQUAL "DEFAULT")
499+
string(JOIN "_" define_str ${define})
500+
set(target_name "${target_name}_${define_str}")
501+
endif()
502+
if ((NOT ${target_name} STREQUAL "benchmark_imax_COMPLEX") AND (NOT ${target_name} STREQUAL "benchmark_imax_COMPLEX_DOUBLE") AND
503+
(NOT ${target_name} STREQUAL "benchmark_imin_COMPLEX") AND (NOT ${target_name} STREQUAL "benchmark_imin_COMPLEX_DOUBLE") AND
504+
(NOT ${target_name} STREQUAL "benchmark_max_COMPLEX") AND (NOT ${target_name} STREQUAL "benchmark_max_COMPLEX_DOUBLE") AND
505+
(NOT ${target_name} STREQUAL "benchmark_min_COMPLEX") AND (NOT ${target_name} STREQUAL "benchmark_min_COMPLEX_DOUBLE"))
506+
add_executable(${target_name} ${source})
507+
target_include_directories(${target_name} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR})
508+
target_link_libraries(${target_name} ${OpenBLAS_LIBNAME} )
509+
# target_link_libraries(${target_name} ${OpenBLAS_LIBNAME} OpenMP::OpenMP_C)
510+
if (NOT "${define}" STREQUAL "DEFAULT")
511+
target_compile_definitions(${target_name} PRIVATE ${define})
512+
endif()
513+
endif()
514+
endforeach()
515+
endif()
516+
endforeach()
517+
endif()
461518
462519
463520
# Install project

Makefile.system

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1520,10 +1520,18 @@ ifndef LIBNAMEPREFIX
15201520
LIBNAMEPREFIX =
15211521
endif
15221522

1523+
SYMPREFIX=$(SYMBOLPREFIX)
1524+
ifeq ($(SYMBOLPREFIX),$(LIBNAMEPREFIX))
1525+
SYMPREFIX=
1526+
endif
1527+
SYMSUFFIX=$(SYMBOLSUFFIX)
1528+
ifeq ($(SYMBOLSUFFIX),$(LIBNAMESUFFIX))
1529+
SYMSUFFIX=
1530+
endif
15231531
ifndef LIBNAMESUFFIX
1524-
LIBNAMEBASE = $(SYMBOLPREFIX)$(LIBSONAMEBASE)$(SYMBOLSUFFIX)
1532+
LIBNAMEBASE = $(SYMPREFIX)$(LIBSONAMEBASE)$(SYMSUFFIX)
15251533
else
1526-
LIBNAMEBASE = $(SYMBOLPREFIX)$(LIBSONAMEBASE)$(SYMBOLSUFFIX)$(LIBNAMESUFFIX)
1534+
LIBNAMEBASE = $(SYMPREFIX)$(LIBSONAMEBASE)$(SYMSUFFIX)$(LIBNAMESUFFIX)
15271535
endif
15281536

15291537
ifeq ($(OSNAME), CYGWIN_NT)

ctest/CMakeLists.txt

Lines changed: 40 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,17 @@ if (NOT NOFORTRAN)
8888
auxiliary.c
8989
c_xerbla.c
9090
constant.c)
91+
if (USE_GEMM3M)
92+
if ((${float_char} STREQUAL "c") OR (${float_char} STREQUAL "z"))
93+
add_executable(x${float_char}cblat3_3m
94+
c_${float_char}blat3_3m.f
95+
c_${float_char}blas3_3m.c
96+
c_${float_char}3chke_3m.c
97+
auxiliary.c
98+
c_xerbla.c
99+
constant.c)
100+
endif()
101+
endif()
91102
else()
92103
add_executable(x${float_char}cblat3
93104
c_${float_char}blat3c.c
@@ -96,6 +107,17 @@ else()
96107
auxiliary.c
97108
c_xerbla.c
98109
constant.c)
110+
if (USE_GEMM3M)
111+
if ((${float_char} STREQUAL "c") OR (${float_char} STREQUAL "z"))
112+
add_executable(x${float_char}cblat3_3m
113+
c_${float_char}blat3c_3m.c
114+
c_${float_char}blas3_3m.c
115+
c_${float_char}3chke_3m.c
116+
auxiliary.c
117+
c_xerbla.c
118+
constant.c)
119+
endif()
120+
endif()
99121
endif()
100122
target_link_libraries(x${float_char}cblat3 ${OpenBLAS_LIBNAME})
101123
if (USE_OPENMP AND (${CMAKE_Fortran_COMPILER_ID} STREQUAL GNU) AND (${CMAKE_C_COMPILER_ID} STREQUAL Clang))
@@ -105,7 +127,24 @@ endif()
105127
if(${CMAKE_SYSTEM_NAME} MATCHES "Linux" OR ${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD" OR ${CMAKE_SYSTEM_NAME} MATCHES "QNX")
106128
target_link_libraries(x${float_char}cblat3 m)
107129
endif()
130+
if (USE_GEMM3M)
131+
if ((${float_char} STREQUAL "c") OR (${float_char} STREQUAL "z"))
132+
target_link_libraries(x${float_char}cblat3_3m ${OpenBLAS_LIBNAME})
133+
if (USE_OPENMP AND (${CMAKE_Fortran_COMPILER_ID} STREQUAL GNU) AND (${CMAKE_C_COMPILER_ID} STREQUAL Clang))
134+
string(REGEX REPLACE "-fopenmp" "" CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS}")
135+
target_link_libraries(x${float_char}cblat3 omp pthread)
136+
endif()
137+
if(${CMAKE_SYSTEM_NAME} MATCHES "Linux" OR ${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD" OR ${CMAKE_SYSTEM_NAME} MATCHES "QNX")
138+
target_link_libraries(x${float_char}cblat3_3m m)
139+
endif()
140+
endif()
141+
endif()
108142
add_test(NAME "x${float_char}cblat3"
109143
COMMAND ${test_helper} $<TARGET_FILE:x${float_char}cblat3> "${PROJECT_SOURCE_DIR}/ctest/${float_char}in3")
110-
144+
if (USE_GEMM3M)
145+
if ((${float_char} STREQUAL "c") OR (${float_char} STREQUAL "z"))
146+
add_test(NAME "x${float_char}cblat3_3m"
147+
COMMAND ${test_helper} $<TARGET_FILE:x${float_char}cblat3_3m> "${PROJECT_SOURCE_DIR}/ctest/${float_char}in3_3m")
148+
endif()
149+
endif()
111150
endforeach()

ctest/Makefile

Lines changed: 39 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,24 @@
55
TOPDIR = ..
66
include $(TOPDIR)/Makefile.system
77

8+
SUPPORT_GEMM3M = 0
9+
10+
ifeq ($(ARCH), x86)
11+
SUPPORT_GEMM3M = 1
12+
endif
13+
14+
ifeq ($(ARCH), x86_64)
15+
SUPPORT_GEMM3M = 1
16+
endif
17+
18+
ifeq ($(ARCH), ia64)
19+
SUPPORT_GEMM3M = 1
20+
endif
21+
22+
ifeq ($(ARCH), MIPS)
23+
SUPPORT_GEMM3M = 1
24+
endif
25+
826
override CFLAGS += -DADD$(BU) -DCBLAS
927
ifeq ($(F_COMPILER),GFORTRAN)
1028
override FFLAGS += -fno-tree-vectorize
@@ -144,9 +162,15 @@ all3targets += xdcblat3
144162
endif
145163
ifeq ($(BUILD_COMPLEX),1)
146164
all3targets += xccblat3
165+
ifeq ($(SUPPORT_GEMM3M),1)
166+
all3targets += xccblat3_3m
167+
endif
147168
endif
148169
ifeq ($(BUILD_COMPLEX16),1)
149170
all3targets += xzcblat3
171+
ifeq ($(SUPPORT_GEMM3M),1)
172+
all3targets += xzcblat3_3m
173+
endif
150174
endif
151175

152176
all3: $(all3targets)
@@ -181,9 +205,9 @@ endif
181205
endif
182206
endif
183207

184-
all3_3m: xzcblat3_3m xccblat3_3m
208+
ifeq ($(SUPPORT_GEMM3M),1)
185209
ifeq ($(USE_OPENMP), 1)
186-
ifeq ($(BUILD_SINGLE),1)
210+
ifeq ($(BUILD_COMPLEX),1)
187211
OMP_NUM_THREADS=2 ./xccblat3_3m < cin3_3m
188212
endif
189213
ifeq ($(BUILD_COMPLEX16),1)
@@ -197,6 +221,7 @@ ifeq ($(BUILD_COMPLEX16),1)
197221
OPENBLAS_NUM_THREADS=2 ./xzcblat3_3m < zin3_3m
198222
endif
199223
endif
224+
endif
200225

201226

202227

@@ -271,15 +296,21 @@ xccblat2: $(ctestl2o) c_cblat2.o $(TOPDIR)/$(LIBNAME)
271296
$(FC) $(FLDFLAGS) -o xccblat2 c_cblat2.o $(ctestl2o) $(LIB) $(EXTRALIB) $(CEXTRALIB)
272297
xccblat3: $(ctestl3o) c_cblat3.o $(TOPDIR)/$(LIBNAME)
273298
$(FC) $(FLDFLAGS) -o xccblat3 c_cblat3.o $(ctestl3o) $(LIB) $(EXTRALIB) $(CEXTRALIB)
299+
ifeq ($(SUPPORT_GEMM3M),1)
274300
xccblat3_3m: $(ctestl3o_3m) c_cblat3_3m.o $(TOPDIR)/$(LIBNAME)
275301
$(FC) $(FLDFLAGS) -o xccblat3_3m c_cblat3_3m.o $(ctestl3o_3m) $(LIB) $(EXTRALIB) $(CEXTRALIB)
302+
endif
276303
else
277304
xccblat1: $(ctestl1o) c_cblat1c.o $(TOPDIR)/$(LIBNAME)
278305
$(CC) $(CFLAGS) -o xccblat1 c_cblat1c.o $(ctestl1o) $(LIB) $(CEXTRALIB) $(filter-out -lgfortran,$(EXTRALIB))
279306
xccblat2: $(ctestl2o) c_cblat2c.o $(TOPDIR)/$(LIBNAME)
280307
$(CC) $(CFLAGS) -o xccblat2 c_cblat2c.o $(ctestl2o) $(LIB) $(CEXTRALIB) $(filter-out -lgfortran,$(EXTRALIB))
281308
xccblat3: $(ctestl3o) c_cblat3c.o $(TOPDIR)/$(LIBNAME)
282309
$(CC) $(CFLAGS) -o xccblat3 c_cblat3c.o $(ctestl3o) $(LIB) $(CEXTRALIB) $(filter-out -lgfortran,$(EXTRALIB))
310+
ifeq ($(SUPPORT_GEMM3M),1)
311+
xccblat3_3m: $(ctestl3o_3m) c_cblat3c_3m.o $(TOPDIR)/$(LIBNAME)
312+
$(CC) $(CFLAGS) -o xccblat3_3m c_cblat3c_3m.o $(ctestl3o_3m) $(LIB) $(EXTRALIB) $(CEXTRALIB)
313+
endif
283314
endif
284315
endif
285316

@@ -293,15 +324,21 @@ xzcblat2: $(ztestl2o) c_zblat2.o $(TOPDIR)/$(LIBNAME)
293324
$(FC) $(FLDFLAGS) -o xzcblat2 c_zblat2.o $(ztestl2o) $(LIB) $(EXTRALIB) $(CEXTRALIB)
294325
xzcblat3: $(ztestl3o) c_zblat3.o $(TOPDIR)/$(LIBNAME)
295326
$(FC) $(FLDFLAGS) -o xzcblat3 c_zblat3.o $(ztestl3o) $(LIB) $(EXTRALIB) $(CEXTRALIB)
327+
ifeq ($(SUPPORT_GEMM3M),1)
296328
xzcblat3_3m: $(ztestl3o_3m) c_zblat3_3m.o $(TOPDIR)/$(LIBNAME)
297329
$(FC) $(FLDFLAGS) -o xzcblat3_3m c_zblat3_3m.o $(ztestl3o_3m) $(LIB) $(EXTRALIB) $(CEXTRALIB)
330+
endif
298331
else
299332
xzcblat1: $(ztestl1o) c_zblat1c.o $(TOPDIR)/$(LIBNAME)
300333
$(CC) $(CFLAGS) -o xzcblat1 c_zblat1c.o $(ztestl1o) $(LIB) $(CEXTRALIB) $(filter-out -lgfortran,$(EXTRALIB))
301334
xzcblat2: $(ztestl2o) c_zblat2c.o $(TOPDIR)/$(LIBNAME)
302335
$(CC) $(CFLAGS) -o xzcblat2 c_zblat2c.o $(ztestl2o) $(LIB) $(CEXTRALIB) $(filter-out -lgfortran,$(EXTRALIB))
303336
xzcblat3: $(ztestl3o) c_zblat3c.o $(TOPDIR)/$(LIBNAME)
304337
$(CC) $(CFLAGS) -o xzcblat3 c_zblat3c.o $(ztestl3o) $(LIB) $(CEXTRALIB) $(filter-out -lgfortran,$(EXTRALIB))
338+
ifeq ($(SUPPORT_GEMM3M),1)
339+
xzcblat3_3m: $(ztestl3o_3m) c_zblat3c_3m.o $(TOPDIR)/$(LIBNAME)
340+
$(CC) $(CFLAGS) -o xzcblat3_3m c_zblat3c_3m.o $(ztestl3o_3m) $(LIB) $(EXTRALIB) $(CEXTRALIB)
341+
endif
305342
endif
306343
endif
307344

0 commit comments

Comments
 (0)