Commit Graph

39 Commits

Author SHA1 Message Date
Field G. Van Zee
4ee986f0a7 Added mixed-datatype testing to Travis CI (#271).
Details:
- Modified .travis.yml to automatically test the mixed-datatype support
  of the gemm operation, 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
  '.mixed' suffix (similar to those with the '.fast' suffix) for testing
  mixed-datatype gemm.
- Updated docs/BuildSystem.md to document the new make targets
  'testblis-md' and 'checkblis-md'.
2018-10-22 14:09:44 -05:00
Field G. Van Zee
090e4f08fc Merge branch 'master' into dev 2018-10-19 18:41:10 -05:00
Field G. Van Zee
c9be5889fb Added "Known issues" section to Multithreading.md.
Details:
- Added known issues section to Multithreading.md.
- Trivial changes to MixedDatatypes.md, Sandboxes.md.
2018-10-19 17:42:40 -05:00
Field G. Van Zee
4e38a8d4ee Implemented python version checking in configure.
Details:
- Added python version checking to configure script. (Recall that python
  is needed to execute the flatten-headers.py script.) Minimum versions
  of python needed are currently as follows:
    python2: 2.7 or later
    python3: 3.5 or later
  The standard search order for python interpeters is:
    python python3 python2
  The PYTHON environment variable is also supported and will be checked
  before the standard search order list.
- Updated BuildSystem.md to include: a minimum make version; mention
  that the C compiler must actually be a C99 compiler; and the caveat
  that Windows builds do not require pthreads since BLIS can provide
  an implementation of pthreads internally.
2018-10-19 15:54:15 -05:00
Field G. Van Zee
bb6df2814f Defined a new level-1d operation: shiftd.
Details:
- Defined a new level-1d operation called 'shiftd', including object and
  typed APIs. This operation adds a scalar value to every element along
  an arbitrary diagonal of a matrix. Currently, shiftd is implemented in
  terms of the addv kernel. (The scalar is passed in as the x vector
  with an increment of zero.)
- Replaced ad-hoc usage of setd and addd (after creating a temporary
  matrix object) with use of shiftd, which is much more concise, in
  various test driver files in the testsuite. Similar changes were made
  to the standalone test drivers and the example code.
- Added documentation entries in BLISObjectAPI.md and BLISTypedAPI.md
  for bli_shiftd() and bli_?shiftd(), respectively.
- Added observed object properties to level-1d documentation in
  BLISObjectAPI.md.
2018-10-18 17:11:39 -05:00
Field G. Van Zee
49d3f9fcbb Merge branch 'master' into dev 2018-10-17 18:00:40 -05:00
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
Field G. Van Zee
08dd67c4b2 ReleaseNotes.md update in advance of next version. 2018-08-30 15:12:13 -05:00
Field G. Van Zee
0f491e994a Allow lesser Makefiles to reference installed BLIS.
Details:
- Updated the build system so that "lesser" Makefiles, such as those in
  belonging to example code or the testsuite, may be run even if the
  directory is orphaned from the original build tree. This allows a
  user to configure, compile, and install BLIS, delete the build tree
  (that is, the source distribution, or the build directory for out-
  of-tree builds) and then compile example or testsuite code and link
  against the installed copy of BLIS (provided the example or testsuite
  directory was preserved or obtained from another source). The only
  requirement is that make be invoked while setting the
  BLIS_INSTALL_PATH variable to the same installation prefix used when
  BLIS was configured. The easiest syntax is:

    make BLIS_INSTALL_PATH=/install/prefix

  though it's also permissible to set BLIS_INSTALL_PATH as an
  environment variable prior to running 'make'.
- Updated all lesser Makefiles to implement the new aforementioned build
  behavior.
- Relocated check-blastest.sh and check-blistest.sh from build to
  blastest and testsuite, respectively, so that if those directories are
  copied elsewhere the user can still run 'make check' locally.
- Updated docs/Testsuite.md with language that mentions this new option
  of building/linking against an installed copy of BLIS.
2018-08-25 20:12:36 -05:00
Field G. Van Zee
7afd095af3 Removed skx from code snippet in previous commit.
Details:
- The docs/ConfigurationHowTo.md document was written with examples that
  did not yet contain the skx sub-configuration, but the previous commit
  included bli_arch.c code copied and pasted from a recent commit that
  does support skx. To keep things consistent, I've removed skx from the
  recently-added ConfigurationHowTo.md code snippet.
2018-08-22 14:58:24 -05:00
Field G. Van Zee
48211a980d Update to docs/ConfigurationHowTo.md.
Details:
- Added missing language directing the reader to modify the config_name
  string array in bli_arch.c when adding a new sub-configuration. Thanks
  to Devangi Parikh for reporting this missing section.
2018-08-22 14:55:02 -05:00
Field G. Van Zee
a61dd5e7bc Changed 'test' target to be more like 'check'.
Details:
- Redefined the 'test' make target in the top-level Makefile so that the
  final result ("everything passed" or at "least one failure") is echoed
  to stdout. Note that 'check' is unchanged, and thus is now effectively
  a fast version of 'test'.
- Updated docs/BuildSystem.md to reflect the above change.
2018-08-14 17:08:03 -05:00
Field G. Van Zee
ebe998d06c Fixed typos in BuildSystem.md from previuos commit. 2018-08-01 13:24:00 -05:00
Field G. Van Zee
e72a344e94 Added table of 'make' targets to BuildSystem.md.
Details:
- Added a new section to BuildSystem.md that describes the most useful
  make targets defined in the top-level Makefile.
2018-08-01 13:00:38 -05:00
Field G. Van Zee
455d3f49e5 Edits to object/typed API, multithreading docs. 2018-07-29 18:31:29 -05:00
Field G. Van Zee
922a1c05e0 More tweaks to README.md. 2018-07-28 20:15:55 -05:00
Field G. Van Zee
a7a0cf2b5d More edits to docs/Multithreading.md. 2018-07-28 16:59:31 -05:00
Field G. Van Zee
be21d0cf68 Fixed typos in docs/Multithreading.md. 2018-07-28 16:46:51 -05:00
Field G. Van Zee
eac07c7b4f Edits to docs/Multithreading.md. 2018-07-28 16:45:28 -05:00
Field G. Van Zee
1f1a237d3f Fixed links in BLISTypedAPI.md. 2018-07-28 16:33:28 -05:00
Field G. Van Zee
89c8806e3a Minor doc fixes to previous commit. 2018-07-28 16:30:56 -05:00
Field G. Van Zee
b8c7574f84 README.md, typed/object API updates.
Details:
- Updated the typed and object APIs to include language on the rntm_t
  parameters in the expert interfaces.
- Updated README to include link to object API.
2018-07-28 16:27:09 -05:00
Field G. Van Zee
b86cf13793 Release Notes update in advance of next version. 2018-07-27 16:08:21 -05:00
Field G. Van Zee
401b69c8f2 More indentation in docs/ConfigurationHowTo.md. 2018-07-25 17:55:13 -05:00
Field G. Van Zee
1c6a1b921e Trying new indentation in ConfigurationHowTo.md.
Details:
- Modified a few sections to take advantage of a feature of markdown
  that allows a bullet or enumeration to have multiple paragraphs. This
  is a trial run to make sure the indentation looks good when rendered
  in a web browser.
2018-07-25 17:14:58 -05:00
Field G. Van Zee
87d57c31c2 Various minor updates to typed, object API docs. 2018-07-25 14:20:18 -05:00
Field G. Van Zee
af60d738f2 Finished object creation part of BLISObjectAPI.md.
Details:
- Filled in remaining section on object creation function reference
  of BLISObjectAPI.md. All object management functions demonstrated as
  part of the example code in examples/oapi are now documented, as well
  as some other functions that are not shown in the example code.
- Updated variuos links (mostly in function index) to correctly point to
  the object API reference instead of the typed API reference.
- Added documentation to getijm, setijm.
2018-07-24 15:35:52 -05:00
Field G. Van Zee
8217a6a3b6 Moved sandbox README.md to docs/Sandboxes.md.
Details:
- Relocated sandbox/ref99/README.md to docs/Sandboxes.md and made minor
  edits to the document.
2018-07-24 13:13:10 -05:00
Field G. Van Zee
ecbebe7c2e Defined rntm_t to relocate cntx_t.thrloop (#235).
Details:
- Defined a new struct datatype, rntm_t (runtime), to house the thrloop
  field of the cntx_t (context). The thrloop array holds the number of
  ways of parallelism (thread "splits") to extract per level-3
  algorithmic loop until those values can be used to create a
  corresponding node in the thread control tree (thrinfo_t structure),
  which (for any given level-3 invocation) usually happens by the time
  the macrokernel is called for the first time.
- Relocating the thrloop from the cntx_t remedies a thread-safety issue
  when invoking level-3 operations from two or more application threads.
  The race condition existed because the cntx_t, a pointer to which is
  usually queried from the global kernel structure (gks), is supposed to
  be a read-only. However, the previous code would write to the cntx_t's
  thrloop field *after* it had been queried, thus violating its read-only
  status. In practice, this would not cause a problem when a sequential
  application made a multithreaded call to BLIS, nor when two or more
  application threads used the same parallelization scheme when calling
  BLIS, because in either case all application theads would be using
  the same ways of parallelism for each loop. The true effects of the
  race condition were limited to situations where two or more application
  theads used *different* parallelization schemes for any given level-3
  call.
- In remedying the above race condition, the application or calling
  library can now specify the parallelization scheme on a per-call basis.
  All that is required is that the thread encode its request for
  parallelism into the rntm_t struct prior to passing the address of the
  rntm_t to one of the expert interfaces of either the typed or object
  APIs. This allows, for example, one application thread to extract 4-way
  parallelism from a call to gemm while another application thread
  requests 2-way parallelism. Or, two threads could each request 4-way
  parallelism, but from different loops.
- A rntm_t* parameter has been added to the function signatures of most
  of the level-3 implementation stack (with the most notable exception
  being packm) as well as all level-1v, -1d, -1f, -1m, and -2 expert
  APIs. (A few internal functions gained the rntm_t* parameter even
  though they currently have no use for it, such as bli_l3_packm().)
  This required some internal calls to some of those functions to
  be updated since BLIS was already using those operations internally
  via the expert interfaces. For situations where a rntm_t object is
  not available, such as within packm/unpackm implementations, NULL is
  passed in to the relevant expert interfaces. This is acceptable for
  now since parallelism is not obtained for non-level-3 operations.
- Revamped how global parallelism is encoded. First, the conventional
  environment variables such as BLIS_NUM_THREADS and BLIS_*_NT  are only
  read once, at library initialization. (Thanks to Nathaniel Smith for
  suggesting this to avoid repeated calls getenv(), which can be slow.)
  Those values are recorded to a global rntm_t object. Public APIs, in
  bli_thread.c, are still available to get/set these values from the
  global rntm_t, though now the "set" functions have additional logic
  to ensure that the values are set in a synchronous manner via a mutex.
  If/when NULL is passed into an expert API (meaning the user opted to
  not provide a custom rntm_t), the values from the global rntm_t are
  copied to a local rntm_t, which is then passed down the function stack.
  Calling a basic API is equivalent to calling the expert APIs with NULL
  for the cntx and rntm parameters, which means the semantic behavior of
  these basic APIs (vis-a-vis multithreading) is unchanged from before.
- Renamed bli_cntx_set_thrloop_from_env() to bli_rntm_set_ways_for_op()
  and reimplemented, with the function now being able to treat the
  incoming rntm_t in a manner agnostic to its origin--whether it came
  from the application or is an internal copy of the global rntm_t.
- Removed various global runtime APIs for setting the number of ways of
  parallelism for individual loops (e.g. bli_thread_set_*_nt()) as well
  as the corresponding "get" functions. The new model simplifies these
  interfaces so that one must either set the total number of threads, OR
  set all of the ways of parallelism for each loop simultaneously (in a
  single function call).
- Updated sandbox/ref99 according to above changes.
- Rewrote/augmented docs/Multithreading.md to document the three methods
  (and two specific ways within each method) of requesting parallelism
  in BLIS.
- Removed old, disabled code from bli_l3_thrinfo.c.
- Whitespace changes to code (e.g. bli_obj.c) and docs/BuildSystem.md.
2018-07-17 18:37:32 -05:00
Field G. Van Zee
60c1977364 Documented accessor functions in BLISObjectAPI.md.
Details:
- Added documentation to docs/BLISObjectAPI.md for a handful of
  commonly-used obj_t accessor functions.
- Minor updates to docs/BLISTypedAPI.md.
2018-07-12 19:22:14 -05:00
Field G. Van Zee
9fef85756d Cleaned up loose ends in BLISObjectAPI.md.
Details:
- Deleted some lines from the API function signatures that did not
  belong (and were only left over from the copy-paste of the typed API).
- Fixed some paragraph-in-bullet indentation.
2018-07-11 18:40:30 -05:00
Field G. Van Zee
80ddeae462 Added BLISObjectAPI.md to docs.
Details:
- Added first draft of BLISObjectAPI.md. (Object management section is
  still missing.)
- Small fixes to BLISTypedAPI.md found while writing BLISObjectAPI.md.
- In various .md files, changed ``` verbatim blocks to language
  attributes (e.g. ```c for C code).
2018-07-11 18:31:57 -05:00
Field G. Van Zee
038442add3 Added -lpthread to makefile example in BuildSystem.md.
Details:
- Added missing pthreads library linking to example makefile in
  docs/BuildSystem.md, as well as similar language to build requirements
  at the beginning of the document. Thanks to Stefanos Mavros for
  bringing this to our attention.
- Updated CREDITS file.
2018-07-11 12:24:18 -05:00
Field G. Van Zee
bf10d8624e Small updates to KernelsHowTo.md, BLISTypedAPI.md.
Details:
- Minor updates to BLISTypedAPI.md, mostly to bring terminology
  up-to-date with the new "typed API" classification.
- Added contents section to KernelsHowTo.md.
2018-07-09 18:40:13 -05:00
Field G. Van Zee
1fd3bce59e Further updates to KernelsHowTo.md, BLISTypedAPI.md.
Details:
- Added missing level-1v operations to BLISTypedAPI (e.g. axpbyv,
  xpbyv).
- Updated broken linkes in KernelsHowTo.md based on misnamed anchors.
- Other minor changes.
2018-07-09 18:20:11 -05:00
Field G. Van Zee
c40d30a6c9 Updated KernelsHowTo.md, BLISTypedAPI.md.
Details;
- Added missing (basic) information in KernelsHowTo.md for level-1f and
  level-1v kernels.
- Updated section regarding contexts.
2018-07-09 17:55:54 -05:00
Field G. Van Zee
7d3e8a7e5f Reverted docs/*.md links to relative paths.
Details:
- Within the documents in docs/*.md, reverted links to other local
  documents to relative paths.
- Fixed some links/documents that did not yet have the '.md' suffix.
- Testing whether we can use relative links ('docs/BLISTypedAPI.md')
  from within README.md.
2018-07-07 20:01:29 -05:00
Field G. Van Zee
d97c862c2b Updated links (URLs) in docs/*.md.
Details:
- Updated most markdown links in the documents/wikis to use absolute
  paths instead of the relative paths that were in use previously.
  A few links were not updated, except for adding a ".md" to reflect
  the documents' new names, in order to test whether relative
  linking still works.
2018-07-07 19:40:41 -05:00
Field G. Van Zee
bcacddfad7 Added 'docs' directory with wiki markdown files.
Details:
- Exported all github wikis to a new 'docs' directory.
- Renamed 'BLISAPIQuickReference' wiki to 'BLISTypedAPI' and removed
  all cntx_t* arguments from the (now non-expert) APIs (with the
  exception of the kernel APIs).
- Added section to BuildSystem documenting new ARG_MAX hack.
2018-07-07 16:45:29 -05:00