mirror of
https://github.com/amd/blis.git
synced 2026-04-19 23:28:52 +00:00
Added SALT testing to Travis CI.
Details: - Modified .travis.yml to automatically employ the simulation of application-level threading within the testsuite, with supporting changes to common.mk, the top-level Makefile, and travis/do_testsuite.sh. - Added a new pair of input files to testsuite directory with the '.salt' suffix (similar to those with the '.fast' suffix) for testing application-level threading. - Updated docs/BuildSystem.md to document the new make targets 'testblis-salt' and 'checkblis-salt'.
This commit is contained in:
@@ -14,6 +14,10 @@ matrix:
|
||||
- os: linux
|
||||
compiler: gcc
|
||||
env: OOT=0 TEST=MD SDE=0 THR="none" CONF="auto"
|
||||
# salt testsuite (fast set of operations+parameters)
|
||||
- os: linux
|
||||
compiler: gcc
|
||||
env: OOT=0 TEST=SALT SDE=0 THR="none" CONF="auto"
|
||||
# test x86_64 ukrs with SDE
|
||||
- os: linux
|
||||
compiler: gcc
|
||||
|
||||
35
Makefile
35
Makefile
@@ -51,9 +51,11 @@
|
||||
flat-header flat-cblas-header \
|
||||
test \
|
||||
testblas blastest-f2c blastest-bin blastest-run \
|
||||
testblis testsuite testsuite-bin testsuite-run \
|
||||
testblis-fast testblis-md testsuite-run-fast \
|
||||
check checkblas checkblis checkblis-fast checkblis-md \
|
||||
testsuite testsuite-bin \
|
||||
testsuite-run testsuite-run-fast testsuite-run-md testsuite-run-salt \
|
||||
testblis testblis-fast testblis-md testblis-salt \
|
||||
check checkblas \
|
||||
checkblis checkblis-fast checkblis-md checkblis-salt \
|
||||
install-headers install-libs install-lib-symlinks \
|
||||
showconfig \
|
||||
clean cleanmk cleanh cleanlib distclean \
|
||||
@@ -334,6 +336,8 @@ TESTSUITE_FAST_GEN_PATH := $(DIST_PATH)/$(TESTSUITE_DIR)/$(TESTSUITE_FAST_GEN)
|
||||
TESTSUITE_FAST_OPS_PATH := $(DIST_PATH)/$(TESTSUITE_DIR)/$(TESTSUITE_FAST_OPS)
|
||||
TESTSUITE_MIXD_GEN_PATH := $(DIST_PATH)/$(TESTSUITE_DIR)/$(TESTSUITE_MIXD_GEN)
|
||||
TESTSUITE_MIXD_OPS_PATH := $(DIST_PATH)/$(TESTSUITE_DIR)/$(TESTSUITE_MIXD_OPS)
|
||||
TESTSUITE_SALT_GEN_PATH := $(DIST_PATH)/$(TESTSUITE_DIR)/$(TESTSUITE_SALT_GEN)
|
||||
TESTSUITE_SALT_OPS_PATH := $(DIST_PATH)/$(TESTSUITE_DIR)/$(TESTSUITE_SALT_OPS)
|
||||
|
||||
# The locations of the test suite source directory and the local object
|
||||
# directory.
|
||||
@@ -764,6 +768,8 @@ testblis-fast: testsuite-run-fast
|
||||
|
||||
testblis-md: testsuite-run-md
|
||||
|
||||
testblis-salt: testsuite-run-salt
|
||||
|
||||
testsuite: testsuite-run
|
||||
|
||||
testsuite-bin: check-env $(TESTSUITE_BIN)
|
||||
@@ -830,6 +836,21 @@ else
|
||||
> $(TESTSUITE_OUT_FILE)
|
||||
endif
|
||||
|
||||
# A rule to run the testsuite using the input.*.salt files, which
|
||||
# simulates application-level threading across operation tests.
|
||||
testsuite-run-salt: testsuite-bin
|
||||
ifeq ($(ENABLE_VERBOSE),yes)
|
||||
$(TESTSUITE_WRAPPER) ./$(TESTSUITE_BIN) -g $(TESTSUITE_SALT_GEN_PATH) \
|
||||
-o $(TESTSUITE_SALT_OPS_PATH) \
|
||||
> $(TESTSUITE_OUT_FILE)
|
||||
|
||||
else
|
||||
@echo "Running $(TESTSUITE_BIN) (salt) with output redirected to '$(TESTSUITE_OUT_FILE)'"
|
||||
@$(TESTSUITE_WRAPPER) ./$(TESTSUITE_BIN) -g $(TESTSUITE_SALT_GEN_PATH) \
|
||||
-o $(TESTSUITE_SALT_OPS_PATH) \
|
||||
> $(TESTSUITE_OUT_FILE)
|
||||
endif
|
||||
|
||||
# Check the results of the BLIS testsuite.
|
||||
checkblis: testsuite-run
|
||||
ifeq ($(ENABLE_VERBOSE),yes)
|
||||
@@ -854,6 +875,14 @@ else
|
||||
@- $(TESTSUITE_CHECK_PATH) $(TESTSUITE_OUT_FILE)
|
||||
endif
|
||||
|
||||
# Check the results of the BLIS testsuite (salt).
|
||||
checkblis-salt: testsuite-run-salt
|
||||
ifeq ($(ENABLE_VERBOSE),yes)
|
||||
- $(TESTSUITE_CHECK_PATH) $(TESTSUITE_OUT_FILE)
|
||||
else
|
||||
@- $(TESTSUITE_CHECK_PATH) $(TESTSUITE_OUT_FILE)
|
||||
endif
|
||||
|
||||
# --- Install header rules ---
|
||||
|
||||
install-headers: check-env $(MK_INCL_DIR_INST)
|
||||
|
||||
@@ -323,6 +323,8 @@ TESTSUITE_FAST_GEN := input.general.fast
|
||||
TESTSUITE_FAST_OPS := input.operations.fast
|
||||
TESTSUITE_MIXD_GEN := input.general.mixed
|
||||
TESTSUITE_MIXD_OPS := input.operations.mixed
|
||||
TESTSUITE_SALT_GEN := input.general.salt
|
||||
TESTSUITE_SALT_OPS := input.operations.salt
|
||||
TESTSUITE_OUT_FILE := output.testsuite
|
||||
|
||||
# CHANGELOG file.
|
||||
|
||||
@@ -391,10 +391,12 @@ The BLIS `Makefile` implements many `make` targets. The table below lists most o
|
||||
| `checkblis` | Execute `testblis` and characterize the results to `stdout`. |
|
||||
| `checkblis-fast`| Execute `testblis-fast` and characterize the results to `stdout`. |
|
||||
| `checkblis-md` | Execute `testblis-md` and characterize the results to `stdout`. |
|
||||
| `checkblis-salt`| Execute `testblis-salt` and characterize the results to `stdout`. |
|
||||
| `checkblas` | Execute `testblas` and characterize the results to `stdout`. |
|
||||
| `testblis` | Run the BLIS testsuite with default parameters (runs for 2-8 minutes). |
|
||||
| `testblis-fast` | Run the BLIS testsuite with "fast" parameters (runs for a few seconds). |
|
||||
| `testblis-md` | Run the BLIS testsuite for `gemm` with full mixing of datatypes (runs for 10-30 seconds). |
|
||||
| `testblis-salt` | Run the BLIS testsuite while simulating application-level threading (runs for a few seconds). |
|
||||
| `testsuite` | Same as `testblis`. |
|
||||
| `testblas` | Run the BLAS test drivers with default parameters (runs for a few seconds). |
|
||||
| `showconfig` | Show a summary of currently selected `configure` options. |
|
||||
|
||||
49
testsuite/input.general.salt
Normal file
49
testsuite/input.general.salt
Normal file
@@ -0,0 +1,49 @@
|
||||
# ----------------------------------------------------------------------
|
||||
#
|
||||
# input.general
|
||||
# BLIS test suite
|
||||
#
|
||||
# This file contains input values that control how BLIS operations are
|
||||
# tested. Comments explain the purpose of each parameter as well as
|
||||
# accepted values.
|
||||
#
|
||||
|
||||
1 # Number of repeats per experiment (best result is reported)
|
||||
rc # Matrix storage scheme(s) to test:
|
||||
# 'c' = col-major storage; 'g' = general stride storage;
|
||||
# 'r' = row-major storage
|
||||
cj # Vector storage scheme(s) to test:
|
||||
# 'c' = colvec / unit stride; 'j' = colvec / non-unit stride;
|
||||
# 'r' = rowvec / unit stride; 'i' = rowvec / non-unit stride
|
||||
0 # Test all combinations of storage schemes?
|
||||
1 # Perform all tests with alignment?
|
||||
# '0' = do NOT align buffers/ldims; '1' = align buffers/ldims
|
||||
0 # Randomize vectors and matrices using:
|
||||
# '0' = real values on [-1,1];
|
||||
# '1' = powers of 2 in narrow precision range
|
||||
32 # General stride spacing (for cases when testing general stride)
|
||||
sdcz # Datatype(s) to test:
|
||||
# 's' = single real; 'c' = single complex;
|
||||
# 'd' = double real; 'z' = double complex
|
||||
0 # Test gemm with mixed-domain operands?
|
||||
0 # Test gemm with mixed-precision operands?
|
||||
100 # Problem size: first to test
|
||||
100 # Problem size: maximum to test
|
||||
100 # Problem size: increment between experiments
|
||||
# Complex level-3 implementations to test:
|
||||
0 # 3mh ('1' = enable; '0' = disable)
|
||||
0 # 3m1 ('1' = enable; '0' = disable)
|
||||
0 # 4mh ('1' = enable; '0' = disable)
|
||||
0 # 4m1b ('1' = enable; '0' = disable)
|
||||
0 # 4m1a ('1' = enable; '0' = disable)
|
||||
1 # 1m ('1' = enable; '0' = disable)
|
||||
1 # native ('1' = enable; '0' = disable)
|
||||
4 # Simulate application-level threading:
|
||||
# '1' = disable / use one testsuite thread;
|
||||
# 'n' = enable and use n testsuite threads
|
||||
1 # Error-checking level:
|
||||
# '0' = disable error checking; '1' = full error checking
|
||||
i # Reaction to test failure:
|
||||
# 'i' = ignore; 's' = sleep() and continue; 'a' = abort
|
||||
0 # Output results in matlab/octave format? ('1' = yes; '0' = no)
|
||||
0 # Output results to stdout AND files? ('1' = yes; '0' = no)
|
||||
318
testsuite/input.operations.salt
Normal file
318
testsuite/input.operations.salt
Normal file
@@ -0,0 +1,318 @@
|
||||
# --------------------------------------------------------------------------
|
||||
#
|
||||
# input.operations
|
||||
# BLIS test suite
|
||||
#
|
||||
# This file contains input values that control which BLIS operations are
|
||||
# tested as well as how those test runs are parameterized. We will now
|
||||
# describe how each section or line type may be edited.
|
||||
#
|
||||
# ENABLING/DISABLING ENTIRE SECTIONS
|
||||
# The values in the "Section overrides" section allow you to disable
|
||||
# all operations in a given "level". Enabling a level here by itself
|
||||
# does not enable every operation in that level; it simply means that
|
||||
# the individual switches for each operation (in that level) determine
|
||||
# whether or not the tests are executed. Use 1 to enable a section, or
|
||||
# 0 to disable.
|
||||
#
|
||||
# ENABLING/DISABLING INDIVIDUAL OPERATION TESTS
|
||||
# Given that an operation's section override switch is set to 1
|
||||
# (enabled), whether or not that operation will get tested is
|
||||
# determined by its local switch. For example, if the level-1v section
|
||||
# override is set to 1, and there is a 1 on the line marked "addv",
|
||||
# then the addv operation will be tested. Similarly, a 0 would cause
|
||||
# addv to not be tested.
|
||||
#
|
||||
# ENABLING ONLY SELECT OPERATIONS
|
||||
# If you would like to enable just a few (or even just one) operation
|
||||
# without adjusting any section overrides (or individual operation
|
||||
# switches), change the desired operation switch(es) to 2. This will
|
||||
# cause any operation that is not set to 2 to be disabled, regardless
|
||||
# of section override values. For example, setting the axpyv and gemv
|
||||
# operation switches to 2 will cause the test suite to test ONLY axpyv
|
||||
# and gemv, even if all other sections and operations are set to 1.
|
||||
# NOTE: As long as there is at least on operation switch set to 2, no
|
||||
# other operations will be tested. When you are done testing your
|
||||
# select operations, you should revert the operation switch(es) back
|
||||
# to 1.
|
||||
#
|
||||
# CHANGING PROBLEM SIZE/SHAPES TESTED
|
||||
# The problem sizes tested by an operation are determined by the
|
||||
# dimension specifiers on the line marked "dimensions: <spec_labels>".
|
||||
# If, for example, <spec_labels> contains two dimension labels (e.g.
|
||||
# "m n"), then the line should begin with two dimension specifiers.
|
||||
# Dimension specifiers of -1 cause the corresponding dimension to be
|
||||
# bound to the problem size, which is determined by values set in
|
||||
# input.general. Positive values cause the corresponding dimension to
|
||||
# be fixed to that value and held constant.
|
||||
#
|
||||
# Examples of dimension specifiers (where the dimensions are m and n):
|
||||
#
|
||||
# -1 -1 Dimensions m and n grow with problem size (resulting in
|
||||
# square matrices).
|
||||
# -1 150 Dimension m grows with problem size and n is fixed at
|
||||
# 150.
|
||||
# -1 -2 Dimension m grows with problem size and n grows
|
||||
# proportional to half the problem size.
|
||||
#
|
||||
# CHANGING PARAMTER COMBINATIONS TESTED
|
||||
# The parameter combinations tested by an operation are determined by
|
||||
# the parameter specifier characters on the line marked "parameters:
|
||||
# <param_labels>". If, for example, <param_labels> contains two
|
||||
# parameter labels (e.g. "transa conjx"), then the line should contain
|
||||
# two parameter specifier characters. The '?' specifier character
|
||||
# serves as a wildcard--it causes all possible values of that parameter
|
||||
# to be tested. A character such as 'n' or 't' causes only that value
|
||||
# to be tested.
|
||||
#
|
||||
# Examples of parameter specifiers (where the parameters are transa
|
||||
# and conjx):
|
||||
#
|
||||
# ?? All combinations of the transa and conjx parameters are
|
||||
# tested: nn, nc, tn, tc, cn, cc, hn, hc.
|
||||
# ?n conjx is fixed to "no conjugate" but transa is allowed
|
||||
# to vary: nn, tn, cn, hn.
|
||||
# hc Only the case where transa is "Hermitian-transpose" and
|
||||
# conjx is "conjugate" is tested.
|
||||
#
|
||||
# Here is a full list of the parameter types used by the various BLIS
|
||||
# operations along with their possible character encodings:
|
||||
#
|
||||
# side: l,r left, right
|
||||
# uplo: l,u lower, upper
|
||||
# trans: n,t,c,h no transpose, transpose, conjugate, Hermitian-
|
||||
# transpose (i.e. conjugate-transpose)
|
||||
# conj: n,c no conjugate, conjugate
|
||||
# diag: n,u non-unit diagonal, unit diagonal
|
||||
#
|
||||
|
||||
# --- Section overrides ----------------------------------------------------
|
||||
|
||||
1 # Utility
|
||||
1 # Level-1v kernels
|
||||
1 # Level-1m
|
||||
1 # Level-1f kernels
|
||||
1 # Level-2
|
||||
1 # Level-3 micro-kernels
|
||||
1 # Level-3
|
||||
|
||||
|
||||
# --- Utility --------------------------------------------------------------
|
||||
|
||||
1 # randv
|
||||
-1 # dimensions: m
|
||||
|
||||
1 # randm
|
||||
-1 -1 # dimensions: m n
|
||||
|
||||
|
||||
# --- Level-1v -------------------------------------------------------------
|
||||
|
||||
1 # addv
|
||||
-1 # dimensions: m
|
||||
? # parameters: conjx
|
||||
|
||||
1 # amaxv
|
||||
-1 # dimensions: m
|
||||
|
||||
1 # axpbyv
|
||||
-1 # dimensions: m
|
||||
? # parameters: conjx
|
||||
|
||||
1 # axpyv
|
||||
-1 # dimensions: m
|
||||
? # parameters: conjx
|
||||
|
||||
1 # copyv
|
||||
-1 # dimensions: m
|
||||
? # parameters: conjx
|
||||
|
||||
1 # dotv
|
||||
-1 # dimensions: m
|
||||
?? # parameters: conjx conjy
|
||||
|
||||
1 # dotxv
|
||||
-1 # dimensions: m
|
||||
?? # parameters: conjx conjy
|
||||
|
||||
1 # normfv
|
||||
-1 # dimensions: m
|
||||
|
||||
1 # scalv
|
||||
-1 # dimensions: m
|
||||
? # parameters: conjbeta
|
||||
|
||||
1 # scal2v
|
||||
-1 # dimensions: m
|
||||
? # parameters: conjx
|
||||
|
||||
1 # setv
|
||||
-1 # dimensions: m
|
||||
|
||||
1 # subv
|
||||
-1 # dimensions: m
|
||||
? # parameters: conjx
|
||||
|
||||
1 # xpbyv
|
||||
-1 # dimensions: m
|
||||
? # parameters: conjx
|
||||
|
||||
|
||||
# --- Level-1m -------------------------------------------------------------
|
||||
|
||||
1 # addm
|
||||
-1 -2 # dimensions: m n
|
||||
? # parameters: transa
|
||||
|
||||
1 # axpym
|
||||
-1 -1 # dimensions: m n
|
||||
? # parameters: transa
|
||||
|
||||
1 # copym
|
||||
-1 -2 # dimensions: m n
|
||||
? # parameters: transa
|
||||
|
||||
1 # normfm
|
||||
-1 -2 # dimensions: m n
|
||||
|
||||
1 # scalm
|
||||
-1 -2 # dimensions: m n
|
||||
? # parameters: conjbeta
|
||||
|
||||
1 # scal2m
|
||||
-1 -2 # dimensions: m n
|
||||
? # parameters: transa
|
||||
|
||||
1 # setm
|
||||
-1 -2 # dimensions: m n
|
||||
|
||||
1 # subm
|
||||
-1 -2 # dimensions: m n
|
||||
? # parameters: transa
|
||||
|
||||
1 # xpbym
|
||||
-1 -1 # dimensions: m n
|
||||
? # parameters: transa
|
||||
|
||||
|
||||
# --- Level-1f kernels -----------------------------------------------------
|
||||
|
||||
1 # axpy2v
|
||||
-1 # dimensions: m
|
||||
?? # parameters: conjx conjy
|
||||
|
||||
1 # dotaxpyv
|
||||
-1 # dimensions: m
|
||||
??? # parameters: conjxt conjx conjy
|
||||
|
||||
1 # axpyf
|
||||
-1 # dimensions: m
|
||||
?? # parameters: conja conjx
|
||||
|
||||
1 # dotxf
|
||||
-1 # dimensions: m
|
||||
?? # parameters: conjat conjx
|
||||
|
||||
1 # dotxaxpyf
|
||||
-1 # dimensions: m
|
||||
???? # parameters: conjat conja conjw conjx
|
||||
|
||||
|
||||
# --- Level-2 --------------------------------------------------------------
|
||||
|
||||
1 # gemv
|
||||
-1 -2 # dimensions: m n
|
||||
?? # parameters: transa conjx
|
||||
|
||||
1 # ger
|
||||
-1 -2 # dimensions: m n
|
||||
?? # parameters: conjx conjy
|
||||
|
||||
1 # hemv
|
||||
-1 # dimensions: m
|
||||
??? # parameters: uploa conja conjx
|
||||
|
||||
1 # her
|
||||
-1 # dimensions: m
|
||||
?? # parameters: uploc conjx
|
||||
|
||||
1 # her2
|
||||
-1 # dimensions: m
|
||||
??? # parameters: uploc conjx conjy
|
||||
|
||||
1 # symv
|
||||
-1 # dimensions: m
|
||||
??? # parameters: uploa conja conjx
|
||||
|
||||
1 # syr
|
||||
-1 # dimensions: m
|
||||
?? # parameters: uploc conjx
|
||||
|
||||
1 # syr2
|
||||
-1 # dimensions: m
|
||||
??? # parameters: uploc conjx conjy
|
||||
|
||||
1 # trmv
|
||||
-1 # dimensions: m
|
||||
??? # parameters: uploa transa diaga
|
||||
|
||||
1 # trsv
|
||||
-1 # dimensions: m
|
||||
??? # parameters: uploa transa diaga
|
||||
|
||||
|
||||
# --- Level-3 micro-kernels ------------------------------------------------
|
||||
|
||||
1 # gemm
|
||||
-1 # dimensions: k
|
||||
|
||||
1 # trsm
|
||||
? # parameters: uploa
|
||||
|
||||
1 # gemmtrsm
|
||||
-1 # dimensions: k
|
||||
? # parameters: uploa
|
||||
|
||||
|
||||
# --- Level-3 --------------------------------------------------------------
|
||||
|
||||
1 # gemm
|
||||
-1 -1 -1 # dimensions: m n k
|
||||
nn # parameters: transa transb
|
||||
|
||||
1 # hemm
|
||||
-1 -1 # dimensions: m n
|
||||
??nn # parameters: side uploa conja transb
|
||||
|
||||
1 # herk
|
||||
-1 -1 # dimensions: m k
|
||||
?n # parameters: uploc transa
|
||||
|
||||
1 # her2k
|
||||
-1 -1 # dimensions: m k
|
||||
?nn # parameters: uploc transa transb
|
||||
|
||||
1 # symm
|
||||
-1 -1 # dimensions: m n
|
||||
??nn # parameters: side uploa conja transb
|
||||
|
||||
1 # syrk
|
||||
-1 -1 # dimensions: m k
|
||||
?n # parameters: uploc transa
|
||||
|
||||
1 # syr2k
|
||||
-1 -1 # dimensions: m k
|
||||
?nn # parameters: uploc transa transb
|
||||
|
||||
1 # trmm
|
||||
-1 -1 # dimensions: m n
|
||||
??n? # parameters: side uploa transa diaga
|
||||
|
||||
0 # trmm3
|
||||
-1 -1 # dimensions: m n
|
||||
??n?n # parameters: side uploa transa diaga transb
|
||||
|
||||
1 # trsm
|
||||
-1 -1 # dimensions: m n
|
||||
??n? # parameters: side uploa transa diaga
|
||||
|
||||
@@ -3,15 +3,19 @@
|
||||
set -e
|
||||
set -x
|
||||
|
||||
export BLIS_IC_NT=2
|
||||
export BLIS_JC_NT=1
|
||||
export BLIS_IR_NT=1
|
||||
export BLIS_IC_NT=2
|
||||
export BLIS_JR_NT=1
|
||||
export BLIS_IR_NT=1
|
||||
|
||||
if [ "$TEST" = "FAST" ]; then
|
||||
make testblis-fast
|
||||
elif [ "$TEST" = "MD" ]; then
|
||||
make testblis-md
|
||||
elif [ "$TEST" = "SALT" ]; then
|
||||
# Disable multithreading within BLIS.
|
||||
export BLIS_JC_NT=1 BLIS_IC_NT=1 BLIS_JR_NT=1 BLIS_IR_NT=1
|
||||
make testblis-salt
|
||||
else
|
||||
make testblis
|
||||
fi
|
||||
|
||||
Reference in New Issue
Block a user