Files
blis/testsuite/input.operations
Field G. Van Zee 5fec95b99f Implemented mixed-datatype support for gemm.
Details:
- Implemented support for gemm where A, B, and C may have different
  storage datatypes, as well as a computational precision (and implied
  computation domain) that may be different from the storage precision
  of either A or B. This results in 128 different combinations, all
  which are implemented within this commit. (For now, the mixed-datatype
  functionality is only supported via the object API.) If desired, the
  mixed-datatype support may be disabled at configure-time.
- Added a memory-intensive optimization to certain mixed-datatype cases
  that requires a single m-by-n matrix be allocated (temporarily) per
  call to gemm. This optimization aims to avoid the overhead involved in
  repeatedly updating C with general stride, or updating C after a
  typecast from the computation precision. This memory optimization may
  be disabled at configure-time (provided that the mixed-datatype
  support is enabled in the first place).
- Added support for testing mixed-datatype combinations to testsuite.
  The user may test gemm with mixed domains, precisions, both, or
  neither.
- Added a standalone test driver directory for building and running
  mixed-datatype performance experiments.
- Defined a new variation of castm, castnzm, which operates like castm
  except that imaginary values are not touched when casting a real
  operand to a complex operand. (By contrast, in these situations castm
  sets the imaginary components of the destination matrix to zero.)
- Defined bli_obj_imag_is_zero() and substituted calls in lieu of all
  usages of bli_obj_imag_equals() that tested against BLIS_ZERO, and
  also simplified the implementation of bli_obj_imag_equals().
- Fixed bad behavior from bli_obj_is_real() and bli_obj_is_complex()
  when given BLIS_CONSTANT objects.
- Disabled dt_on_output field in auxinfo_t structure as well as all
  accessor functions. Also commented out all usage of accessor
  functions within macrokernels. (Typecasting in the microkernel is
  still feasible, though probably unrealistic for now given the
  additional complexity required.)
- Use void function pointer type (instead of void*) for storing function
  pointers in bli_l0_fpa.c.
- Added documentation for using gemm with mixed datatypes in
  docs/MixedDatatypes.md and example code in examples/oapi/11gemm_md.c.
- Defined level-1d operation xpbyd and level-1m operation xpbym.
- Added xpbym test module to testsuite.
- Updated frame/include/bli_x86_asm_macros.h with additional macros
  (courtsey of Devin Matthews).
2018-10-15 16:37:39 -05:00

319 lines
9.0 KiB
Plaintext

# --------------------------------------------------------------------------
#
# 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
?? # parameters: transa transb
1 # hemm
-1 -1 # dimensions: m n
???? # parameters: side uploa conja transb
1 # herk
-1 -1 # dimensions: m k
?? # parameters: uploc transa
1 # her2k
-1 -1 # dimensions: m k
??? # parameters: uploc transa transb
1 # symm
-1 -1 # dimensions: m n
???? # parameters: side uploa conja transb
1 # syrk
-1 -1 # dimensions: m k
?? # parameters: uploc transa
1 # syr2k
-1 -1 # dimensions: m k
??? # parameters: uploc transa transb
1 # trmm
-1 -1 # dimensions: m n
???? # parameters: side uploa transa diaga
1 # trmm3
-1 -1 # dimensions: m n
????n # parameters: side uploa transa diaga transb
1 # trsm
-1 -1 # dimensions: m n
???? # parameters: side uploa transa diaga