Commit Graph

1766 Commits

Author SHA1 Message Date
Field G. Van Zee
a2ffac7520 Merge branch 'amd-master' into amd 2019-10-11 10:31:18 -05:00
Field G. Van Zee
29b0e1ef4e Code review + tweaks to AMD's AOCL 2.0 PR (#349).
Details:
- NOTE: This is a merge commit of 'master' of git://github.com/amd/blis
  into 'amd-master' of flame/blis.
- Fixed a bug in the downstream value of BLIS_NUM_ARCHS, which was
  inadvertantly not incremented when the Zen2 subconfiguration was
  added.
- In bli_gemm_front(), added a missing conditional constraint around the
  call to bli_gemm_small() that ensures that the computation precision
  of C matches the storage precision of C.
- In bli_syrk_front(), reorganized and relocated the notrans/trans logic
  that existed around the call to bli_syrk_small() into bli_syrk_small()
  to minimize the calling code footprint and also to bring that code
  into stylistic harmony with similar code in bli_gemm_front() and
  bli_trsm_front(). Also, replaced direct accessing of obj_t fields with
  proper accessor static functions (e.g. 'a->dim[0]' becomes
  'bli_obj_length( a )').
- Added #ifdef BLIS_ENABLE_SMALL_MATRIX guard around prototypes for
  bli_gemm_small(), bli_syrk_small(), and bli_trsm_small(). This is
  strictly speaking unnecessary, but it serves as a useful visual cue to
  those who may be reading the files.
- Removed cpp macro-protected small matrix debugging code from
  bli_trsm_front.c.
- Added a GCC_OT_9_1_0 variable to build/config.mk.in to facilitate gcc
  version check for availability of -march=znver2, and added appropriate
  support to configure script.
- Cleanups to compiler flags common to recent AMD microarchitectures in
  config/zen/amd_config.mk, including: removal of -march=znver1 et al.
  from CKVECFLAGS (since the -march flag is added within make_defs.mk);
  setting CRVECFLAGS similarly to CKVECFLAGS.
- Cleanups to config/zen/bli_cntx_init_zen.c.
- Cleanups, added comments to config/zen/make_defs.mk.
- Cleanups to config/zen2/make_defs.mk, including making use of newly-
  added GCC_OT_9_1_0 and existing GCC_OT_6_1_0 to choose the correct
  set of compiler flags based on the version of gcc being used.
- Reverted downstream changes to test/test_gemm.c.
- Various whitespace/comment changes.
2019-10-11 10:24:24 -05:00
Field G. Van Zee
1cfe8e2562 Reimplemented bli_cpuid_query() for ARM.
Details:
- Rewrote bli_cpuid_query() for ARM architectures to use stdio-based
  functions such as fopen() and fgets() instead of popen(). The new code
  does more or less the same thing as before--searches /proc/cpuinfo for
  various strings, which are then parsed in order to determine the
  model, part number, and features. Thanks to Dave Love for suggesting
  this change in issue #335.
2019-09-05 16:08:30 -05:00
Devin Matthews
7c78191457 Always use sqsumv to compute normfv. (#334)
* Always use sqsumv to compute normfv on MacOS.

* Unconditionally disable the "dot trick" in normfv.

* Added explanatory comment to normfv definition.

Details:
- Added a comment above the unconditional disabling of the dotv-based
  implementation to normfv. Thanks to Roman Yurchak, Devin Matthews,
  and Isuru Fernando in helping with this improvement.
- CREDITS file update.
2019-08-30 16:52:09 -05:00
Field G. Van Zee
80e6c10b72 Added reproduction section to Performance docs.
Details:
- Added section titled "Reproduction" to both Performance.md and
  PerformanceSmall.md that briefly nudges the motivated reader in the
  right direction if he/she wishes to run the same performance
  benchmarks used to produce the graphs shown in those documents.
  Thanks to Dave Love for making this suggestion.
2019-08-29 12:12:08 -05:00
Field G. Van Zee
14cb426414 Updated OpenBLAS, Eigen sup results.
Details:
- Updated the results shown in docs/PerformanceSmall.md for OpenBLAS and
  Eigen.
2019-08-28 17:04:33 -05:00
Field G. Van Zee
b02e0aae8c Updated test drivers to iterate backwards.
Details:
- Updated test driver source in test, test/3, test/1m4m, and
  test/mixeddt to iterate through the problem space backwards. This
  can help avoid certain situations where the CPU frequency does not
  immediately throttle up to its maximum. Thanks to Robert van de
  Geijn for recommending this fix (originally made to test/sup drivers
  in 57e422a).
- Applied off-by-one matlab output bugfix from b6017e5 to test drivers
  in test, test/3, test/1m4m, and test/mixeddt directories.
2019-08-27 14:37:46 -05:00
Field G. Van Zee
b6017e53f4 Bugfix of output text + tweaks to test/sup driver.
Details:
- Fixed an off-by-one bug in the output of matlab row indices in
  test/sup/test_gemm.c that only manifested when the problem size
  increment was equal to 1.
- Disabled the building of rrc, rcr, rcc, crr, crc, and ccr storage
  combinations for blissup drivers in test/sup. This helps make the
  building of drivers complete sooner.
- Trivial changes to test/sup/runme.sh.
2019-08-27 14:18:14 -05:00
Devin Matthews
138d403b6b Use -funsafe-math-optimizations and -ffp-contract=fast for all reference kernels when using gcc or clang. (#331) 2019-08-26 18:11:27 -05:00
Field G. Van Zee
d5a05a15a7 Cropped whitespace from new sup graphs.
Details:
- Previously forgot crop whitespace from the new .png graphs
  added/updated in docs/graphs/sup.
2019-08-26 16:54:31 -05:00
Field G. Van Zee
a6c80171a3 Fixed contents links in docs/PerformanceSmall.md.
Details:
- Corrected links in contents section of docs/PerformanceSmall.md,
  which were erroneously directing readers to the corresponding
  sections of docs/Performance.md.
2019-08-26 16:51:31 -05:00
Field G. Van Zee
40781774df Updated sup performance graphs with libxsmm.
Details:
- Added libxsmm to column-stored sup graphs presented in
  docs/PerformanceSmall.md.
- Updated sup results for BLASFEO.
- Added sup results for Lonestar5 (Haswell).
- Addresses issue #326.
2019-08-26 16:47:37 -05:00
figual
bfddf67132 Fixed context registration for Cortex A53 (#329). 2019-08-26 12:01:33 +02:00
Field G. Van Zee
4a0a6e89c5 Changed test/sup alpha to 1; test libxsmm+netlib.
Details:
- Changed the value of alpha to 1.0 in test/sup/test_gemm.c. This is
  needed because libxsmm currently only optimizes gemm operations where
  alpha is unit (and beta is unit or zero).
- Adjusted the test/sup/Makefile to test libxsmm with netlib BLAS as its
  fallback library. This is the library that will be called the
  problem dimensions are deemed too large, or any other criteria for
  optimization are not met. (This was done not because it is realistic,
  but rather so that it would be very clear when libxsmm ceased handling
  gemm calls internally when the data are graphed.)
2019-08-24 15:25:16 -05:00
Field G. Van Zee
7aa52b5783 Use libxsmm API in test/sup; add missing -ldl.
Details:
- Switch the driver source in test/sup so that libxsmm_?gemm() is called
  instead of ?gemm_() when compiling for / linking against libxsmm.
  libxsmm's documentation isn't clear on whether it is even *trying* to
  provide BLAS API compatibility, and I got tired of trying to figure it
  out.
- Added missing -ldl in LDFLAGS when linking against libxsmm.
2019-08-23 16:12:50 -05:00
Field G. Van Zee
57e422aa16 Added libxsmm support to test/sup drivers.
Details:
- Modified test/sup/Makefile to build drivers that test the performance
  of skinny/small problems via libxsmm.
- Modified test/sup/runme.sh to run aforementioned drivers.
- Modified test/sup/test_gemm.c so that problem sizes are tested in
  reverse order (from largest to smallest). This can help avoid certain
  situations where the CPU frequency does not immediately throttle up
  to its maximum. Thanks to Robert van de Geijn for recommending this
  fix.
2019-08-23 14:17:52 -05:00
Field G. Van Zee
661681fe33 Merge branch 'master' of github.com:flame/blis 2019-08-22 14:29:50 -05:00
Field G. Van Zee
2f387e32ef Added Eigen -march=native hack to perf docs.
Details:
- Spell out the hack given to me by Sameer Agarwal in order to get Eigen
  to build with -march=native (which is critically important for Eigen)
  in docs/Performance.md and docs/PerformanceSmall.md.
2019-08-22 14:27:30 -05:00
Devin Matthews
ef0a1a0faf Update do_sde.sh (#330)
* Update do_sde.sh

Automatically accept SDE license and download directly from Intel

* Update .travis.yml

[ci skip]

* Update .travis.yml

Enable SDE testing for PRs.
2019-08-21 17:40:24 -05:00
Field G. Van Zee
0cd383d53a Corrected variable type and comment update.
Details:
- Forgot to save all changes from bli_gemmtrsm4m1_ref.c before commit
  in 8122f59. Fixed type mismatch and referenced github issue in
  comment.
2019-08-21 13:39:05 -05:00
Field G. Van Zee
8122f59745 Pacify 'restrict' warning in gemmtrsm4m1 ref ukr.
Details:
- Previously, some versions of gcc would complain that the same
  pointer, one_r, is being passed in for both alpha and beta in the
  fourth call to the real gemm ukernel in bli_gemmtrsm4m1_ref.c. This
  is understandable since the compiler knows that the real gemm ukernel
  qualifies all of its floating-point arguments (including alpha and
  beta) with restrict. A small hack has been inserted into the file
  that defines a new variable to store the value 1.0, which is now used
  in lieu of one_r for beta in the fourth call to the real gemm ukernel,
  which should pacify the compiler now. Thanks to Dave Love for
  reporting this issue (#328) and for Devin Matthews for offering his
  'restrict' expertise.
2019-08-21 13:22:12 -05:00
Field G. Van Zee
e8c6281f13 Add -march support for specific gcc version ranges.
Details:
- Added logic to configure that checks the version of the compiler
  against known version ranges that could cause problems later in the
  build process. For example, versions of gcc older than 4.9.0 use
  different -march labels than version 4.9.0 or later
  ('-march=corei7-avx' vs '-march=sandybridge', respectively).
  Similarly, before 6.1, compilation on Zen was possible, but you
  need to start with -march=bdver4 and then disable instruction sets
  that were discarded during the transition from Excavator to Zen. So
  now, configure substitutes 'yes'/'no' values into anchors in
  config.mk.in, which sets various make variables (e.g. GCC_OT_4_9_0),
  which can be accessed and branched upon by the various
  configurations' make_defs.mk files when setting their compiler flags.
- Updated config/haswell/make_defs.mk to branch on GCC_OT_4_9_0.
- Updated config/sandybridge/make_defs.mk to branch on GCC_OT_4_9_0.
- Updated config/zen/make_defs.mk to branch on GCC_OT_6_1_0.
2019-08-21 12:38:53 -05:00
Field G. Van Zee
e6ac4ebcb6 Added page size, source location to perf docs.
Details:
- Added the page size, as returned via 'getconf -a | grep PAGE_SIZE',
  and the location of the performance drivers to docs/Performance.md
  (test/3) and docs/PerformanceSmall.md (test/sup). Thanks to Dave
  Love for suggesting these additions in #325.
2019-08-20 13:49:47 -05:00
Meghana
fdce1a5648 changed gcc version check condition from 'ifeq' to 'if greater or equal'
Change-Id: Ie4c461867829bcc113210791bbefb9517e52c226
AOCL2.0 2.0
2019-07-24 15:04:41 +05:30
Meghana
c9486e0c4f code to detect version of gcc and set flags accordingly for zen2
Change-Id: I29b0311d0000dee1a2533ee29941acf53f9e9f34
2019-07-24 09:45:17 +05:30
Field G. Van Zee
54afe3dfe6 Added "Education and Learning" ToC entry to README. 2019-07-23 16:54:28 -05:00
Field G. Van Zee
9f53b1ce7a Added "Education and Learning" section to README.
Details:
- Added a short section after the Intro of the README.md file titled
  "Education and Learning" that directs interested readers to the
  "LAFF-On Programming for High-Performance" massive open online course
  (MOOC) hosted via edX.
2019-07-23 16:50:35 -05:00
Field G. Van Zee
deda4ca8a0 Added test/1m4m driver directory.
Details:
- Added a new standalone test driver directory named '1m4m' that can
  build and run performance experiments for BLIS 1m, 4m1a, assembly,
  OpenBLAS, and the vendor library (MKL). This new driver directory
  was used to regenerate performance results for the 1m paper.
- Added alternate (commented-out) cache blocksizes to
  config/haswell/bli_cntx_init_haswell.c. These blocksizes tend to
  work well on an a 12-core Intel Xeon E5-2650 v3.
2019-07-22 13:59:05 -05:00
Meghana
dcc0ce12fd Added a global Makefile for AMD architectures in config/zen folder
This Makefile(amd_config.mk) has all the flags that are common to EPYC series

Change-Id: Ic02c60a8293ccdd37f0f292e631acd198e6895de
2019-07-22 17:12:01 +05:30
Field G. Van Zee
af17bca26a Updated haswell MC cache blocksizes.
Details:
- Updated the default MC cache blocksizes used by the haswell subconfig
  for both row-preferential (the default) and column-preferential
  microkernels.
2019-07-19 14:46:23 -05:00
Field G. Van Zee
b5e9bce4dd Updated -march flags for sandybridge, haswell.
Details:
- Updated the '-march=corei7-avx' flag in the sandybridge subconfig
  to '-march=sandybridge' and the '-march=core-avx2' flag in the
  haswell subconfig to '-march=haswell'. The older flags were used
  by older versions of gcc and should have been updated to the newer
  forms a long time ago. (The older flags were clearly working, even
  though they are no longer documented in the gcc man page.)
2019-07-19 14:42:37 -05:00
Field G. Van Zee
c22b9dba58 More updates to comments in testsuite modules.
Details:
- Updated most comments in testsuite modules that describe how the
  correctness test is performed so that it is clear whether the vector
  (normfv) or matrix (normfm) form of Frobenius norm is used.
2019-07-16 13:14:47 -05:00
Field G. Van Zee
c4cc6fa702 New cntx_t blksz "set" functions + misc tweaks.
Details:
- Defined two new static functions in bli_cntx.h:
    bli_cntx_set_blksz_def_dt()
    bli_cntx_set_blksz_max_dt()
  which developers may find convenient when experimenting with different
  values of cache blocksizes.
- Updated one- and two-socket multithreaded problem size range and
  increment values in test/3/Makefile.
- Changed default to column storage in test/3/test_gemm.c.
- Fixed typo in comment in testsuite/src/test_subm.c.
2019-07-16 13:00:35 -05:00
Meghana Vankadari
b84cee29f4 Merge "Added compiler flags for vanilla clang" into amd-staging-rome2.0 2019-07-08 02:03:07 -04:00
kdevraje
1f80858abf This checkin solves the dgemm performance issue jira ticket CPUPL 458, as #else was missed during integration, it was always following else path to get the block sizes
Change-Id: I0084b5856c2513ab1066c08c15b5086db6532717
2019-07-05 16:05:11 +05:30
Meghana
c7dd6e6cd2 Added compiler flags for vanilla clang
Change-Id: I13c00b4c0d65bbda4c929848fd48b0ab611952ab
2019-07-04 09:32:51 +05:30
Meghana
2acd49b764 fix for test failures using AOCC 2.0
Change-Id: If44eaccc64bbe96bbbe1d32279b1b5773aba08d1
2019-07-01 15:44:07 +05:30
Field G. Van Zee
ceee2f973e Fixed thrinfo_t printing bug for small problems.
Details:
- Fixed a bug in bli_l3_thrinfo_print_gemm_paths() and
  bli_l3_thrinfo_print_trsm_paths(), defined in bli_l3_thrinfo.c,
  whereby subnodes of the thrinfo_t tree are "dereferenced" near the
  beginning of the functions, which may lead to segfaults in certain
  situations where the thread tree was not fully formed because the
  matrix problem was too small for the level of parallelism specified.
  (That is, too small because some problems were assigned no work due
  to the smallest units in the m and n dimensions being defined by the
  register blocksizes mr and nr.) The fix requires several nested levels
  of if statements, and this is one of those few instances where use of
  goto statements results in (mostly) prettier code, especially in the
  case of _gemm_paths(). And while it wasn't necessary, I ported this
  goto usage to the loop body that prints the thrinfo_t work_id and
  comm_id values for each thread. Thanks to Nicholai Tukanov for helping
  to find this bug.
2019-06-24 17:47:40 -05:00
kdevraje
cac127182d Merge branch 'amd-staging-rome2.0' of ssh://git.amd.com:29418/cpulibraries/er/blis
with public repo commit id 565fa3853b.

Change-Id: I68b9824b110cf14df248217a24a6191b3df79d42
2019-06-24 14:05:54 +05:30
Field G. Van Zee
c152109e9a Updated BLASFEO results in PerformanceSmall.md.
Details:
- Updated the BLASFEO performance graphs shown in PerformanceSmall.md
  using a new commit of BLASFEO (2c9f312); updated PerformanceSmall.md
  accordingly.
- Updated test/sup/octave/plot_l3sup_perf.m so that the .m files
  containing the mpnpkp results do not need to be preprocessed in order
  to plot half the problem size range (ie: up to 400 instead of the
  800 range of the other shape cases).
- Trivial updates to runme.m.
2019-06-19 13:23:24 -05:00
Field G. Van Zee
4d19c98110 Trivial change to MixedDatatypes.md link text. 2019-06-08 11:02:03 -05:00
Field G. Van Zee
24965beabe Fixed typo in README.md's MixedDatatypes.md link. 2019-06-08 11:00:22 -05:00
Field G. Van Zee
50dc5d9576 Adjust -fopenmp-simd for icc's preferred syntax.
Details:
- Use -qopenmp-simd instead of -fopenmp-simd when compiling with Intel
  icc. Recall that this option is used for SIMD auto-vectorization in
  reference kernels only. Support for the -f option has been completely
  deprecated and removed in newer versions of icc in favor of -q. Thanks
  to Victor Eijkhout for reporting this issue and suggesting the fix.
2019-06-07 13:10:16 -05:00
Field G. Van Zee
ad937db950 Added missing #include "bli_family_thunderx2.h".
Details:
- Added a cpp-conditional directive block to bli_arch_config.h that
  #includes "bli_family_thunderx2.h". The code has been missing since
  adf5c17f. However, this never manifested as an error because the file
  is virtually empty and not needed for thunderx2 (or most subconfigs).
  Thanks to Jeff Diamond for helping to spot this.
2019-06-07 11:34:08 -05:00
Field G. Van Zee
ce671917b2 Fixed formatting/typo in docs/PerformanceSmall.md. 2019-06-06 14:17:21 -05:00
Field G. Van Zee
86c33a4eb2 Tweaked language in README.md related to sup/AMD. 2019-06-05 11:43:55 -05:00
Field G. Van Zee
cbaa22e1ca Added BLASFEO results to docs/PerformanceSmall.md.
Details:
- Updated the graphs linked in PerformanceSmall.md with BLASFEO results,
  and added documenting language accordingly.
- Updated scripts in test/sup/octave to plot BLASFEO data.
- Minor tweak to language re: how OpenBLAS was configured for
  docs/Performance.md.
2019-06-04 16:06:58 -05:00
Field G. Van Zee
763fa39c30 Minor tweaks to test/sup.
Details:
- Changed starting problem and increment from 16 to 4.
- Added 'lll' (square problems) to list of problem size shapes to
  compile and run with.
- Define BLASFEO location and added BLASFEO-related definitions.
2019-06-04 14:46:45 -05:00
Field G. Van Zee
5e1e696003 CHANGELOG update (0.6.0) 2019-06-03 18:37:20 -05:00
Field G. Van Zee
18c876b989 Version file update (0.6.0) 0.6.0 2019-06-03 18:37:19 -05:00