Renato Golin [Fri, 16 Nov 2018 15:45:12 +0000 (15:45 +0000)]
Simplifying ARMv8 build parameters
ARMv8 builds were a bit mixed up, with ThunderX2 code in ARMv8 mode
(which is not right because TX2 is ARMv8.1) as well as requiring a few
redundancies in the defines, making it harder to maintain and understand
what core has what. A few other minor issues were also fixed.
Tests were made on the following cores: A53, A57, A72, Falkor, ThunderX,
ThunderX2, and XGene.
Tests were: OpenBLAS/test, OpenBLAS/benchmark, BLAS-Tester.
A summary:
* Removed TX2 code from ARMv8 build, to make sure it is compatible with
all ARMv8 cores, not just v8.1. Also, the TX2 code has actually
harmed performance on big cores.
* Commoned up ARMv8 architectures' defines in params.h, to make sure
that all will benefit from ARMv8 settings, in addition to their own.
* Adding a few more cores, using ARMv8's include strategy, to benefit
from compiler optimisations using mtune. Also updated cache
information from the manuals, making sure we set good conservative
values by default. Removed Vulcan, as it's an alias to TX2.
* Auto-detecting most of those cores, but also updating the forced
compilation in getarch.c, to make sure the parameters are the same
whether compiled natively or forced arch.
Benefits:
* ARMv8 build is now guaranteed to work on all ARMv8 cores
* Improved performance for ARMv8 builds on some cores (A72, Falkor,
ThunderX1 and 2: up to 11%) over current develop
* Improved performance for *all* cores comparing to develop branch
before TX2's patch (9% ~ 36%)
* ThunderX1 builds are 14% faster than ARMv8 on TX1, 9% faster than
current develop's branch and 8% faster than deveop before tx2 patches
Issues:
* Regression from current develop branch for A53 (-12%) and A57 (-3%)
with ARMv8 builds, but still faster than before TX2's commit (+15%
and +24% respectively). This can be improved with a simplification of
TX2's code, to be done in future patches. At least the code is
guaranteed to be ARMv8.0 now.
Comments:
* CortexA57 builds are unchanged on A57 hardware from develop's branch,
which makes sense, as it's untouched.
* CortexA72 builds improve over A57 on A72 hardware, even if they're
using the same includes due to new compiler tunning in the makefile.
Martin Kroeker [Fri, 16 Nov 2018 13:58:28 +0000 (14:58 +0100)]
Fix harmless typo
fixes #1872
Martin Kroeker [Mon, 12 Nov 2018 16:30:44 +0000 (17:30 +0100)]
Merge pull request #1865 from martin-frbg/issue1844
Optimize gemv for small M, large N only if it can be done in a threadsafe manner
Martin Kroeker [Mon, 12 Nov 2018 13:30:28 +0000 (14:30 +0100)]
Merge pull request #1864 from aytekinar/patch-1
Add ARM tests on Travis
Arda Aytekin [Thu, 8 Nov 2018 23:25:30 +0000 (00:25 +0100)]
Update .travis.yml
Updated `.travis.yml` file to add emulated tests for `ARMV6` and `ARMV8`
architectures with `gcc` and `clang`. Created prebuilt images with
required dependencies. Squashed layers into one.
Martin Kroeker [Sat, 10 Nov 2018 18:23:31 +0000 (19:23 +0100)]
Merge pull request #1866 from martin-frbg/issue1859
Fix argument in SLASET call to zero S
Martin Kroeker [Sat, 10 Nov 2018 16:16:53 +0000 (17:16 +0100)]
Fix argument in SLASET call to zero S
fixes #1859 in accordance with https://github.com/LAPACK-Reference/issue/296
Martin Kroeker [Sat, 10 Nov 2018 14:45:54 +0000 (15:45 +0100)]
Allow optimization for small m, large n only if it can be made threadsafe
otherwise the introduction of a static array in 8e5a108 to improve #532 breaks concurrent calls from multiple threads as seen in #1844
Martin Kroeker [Sat, 10 Nov 2018 14:37:25 +0000 (15:37 +0100)]
Merge pull request #2 from xianyi/develop
merge develop
Martin Kroeker [Fri, 9 Nov 2018 12:12:06 +0000 (13:12 +0100)]
Merge pull request #1863 from martin-frbg/aix_install3
Set LIBSONAME suffix to .a for AIX
Martin Kroeker [Thu, 8 Nov 2018 21:39:10 +0000 (22:39 +0100)]
Set LIBSONAME suffix to .a for AIX
another fix for #1803
Martin Kroeker [Wed, 7 Nov 2018 20:01:29 +0000 (21:01 +0100)]
Merge pull request #1856 from rengolin/armv8-a57
[Arm64) Revert A53 detection as A57
Martin Kroeker [Wed, 7 Nov 2018 07:49:21 +0000 (08:49 +0100)]
Merge pull request #1831 from brada4/hemv
disable threading in C/ZSWAP copying from S/DSWAP
Martin Kroeker [Wed, 7 Nov 2018 07:48:31 +0000 (08:48 +0100)]
Merge pull request #1857 from brada4/fc-1847
Add gfortran -frecursive option from upstream and #1847
Martin Kroeker [Wed, 7 Nov 2018 07:47:52 +0000 (08:47 +0100)]
Merge branch 'develop' into fc-1847
Martin Kroeker [Wed, 7 Nov 2018 07:46:55 +0000 (08:46 +0100)]
Merge pull request #1858 from brada4/buff-1847
Add minimum threshold for number of buffers
Andrew [Tue, 6 Nov 2018 17:51:24 +0000 (17:51 +0000)]
lets fit it in one 4k page
Andrew [Tue, 6 Nov 2018 09:45:49 +0000 (09:45 +0000)]
handle cmake too
Andrew [Tue, 6 Nov 2018 09:40:13 +0000 (09:40 +0000)]
add low bound for number of buffers
Andrew [Tue, 6 Nov 2018 09:39:05 +0000 (09:39 +0000)]
init
Andrew [Tue, 6 Nov 2018 08:20:55 +0000 (08:20 +0000)]
Add -frecursive gfortran option by default
Andrew [Tue, 6 Nov 2018 08:19:08 +0000 (08:19 +0000)]
init
Renato Golin [Mon, 5 Nov 2018 11:30:12 +0000 (11:30 +0000)]
[Arm64) Revert A53 detection as A57
This patch reverts the decision of treating A53 like A57, which was
based on an analysis done on server class hardware and is not
representative of all A53s out there.
Fixes #1855.
Martin Kroeker [Fri, 2 Nov 2018 12:18:01 +0000 (13:18 +0100)]
Merge pull request #1846 from fenrus75/threadsize
gemm/dgemm: add a way for an arch kernel to specify preferred sizes
Martin Kroeker [Fri, 2 Nov 2018 08:50:51 +0000 (09:50 +0100)]
Merge pull request #1850 from martin-frbg/issue1811
Restore Android/ARMv7 build fix from #778
Martin Kroeker [Thu, 1 Nov 2018 19:39:16 +0000 (20:39 +0100)]
Merge pull request #1849 from martin-frbg/aix_install2
Use installbsd on AIX
Martin Kroeker [Thu, 1 Nov 2018 17:50:25 +0000 (18:50 +0100)]
Restore Android/ARMv7 build fix from #778
for #1811
Martin Kroeker [Thu, 1 Nov 2018 17:26:08 +0000 (18:26 +0100)]
Use installbsd on AIX
(and fix misplaced parenthesis from previous commit). See #1803
Martin Kroeker [Thu, 1 Nov 2018 08:53:10 +0000 (09:53 +0100)]
Merge pull request #1845 from martin-frbg/aix_install
Accomodate AIX install, which has different syntax
Arjan van de Ven [Thu, 1 Nov 2018 01:43:20 +0000 (01:43 +0000)]
sgemm/dgemm: add a way for an arch kernel to specify prefered sizes
The current gemm threading code can make very unfortunate choices, for
example on my 10 core system a 1024x1024x1024 matrix multiply ends up
chunking into blocks of 102... which is not a vector friendly size
and performance ends up horrible.
this patch adds a helper define where an architecture can specify
a preference for size multiples.
This is different from existing defines that are minimum sizes and such.
The performance increase with this patch for the 1024x1024x1024 sgemm
is 2.3x (!!)
Arjan van de Ven [Thu, 1 Nov 2018 01:42:09 +0000 (01:42 +0000)]
skylakex: Make the sgemm/dgemm beta code robust for a N=0 or M=0 case
in the threading code there are cases where N or M can become 0,
and the optimized beta code did not handle this well, leading
to a crash
during the audit for the crash a few edge conditions on the if statements
were found and fixed as well
Martin Kroeker [Wed, 31 Oct 2018 20:50:34 +0000 (21:50 +0100)]
Accomodate AIX install, which has different syntax
for #1803
Martin Kroeker [Wed, 31 Oct 2018 20:25:15 +0000 (21:25 +0100)]
Merge pull request #1843 from martin-frbg/aix_numprocs
Add get_num_procs implementation for AIX
Martin Kroeker [Wed, 31 Oct 2018 17:38:22 +0000 (18:38 +0100)]
Add get_num_procs implementation for AIX
(and copy HAIKU implementation to the non-TLS version of the code as well)
Martin Kroeker [Tue, 30 Oct 2018 11:41:24 +0000 (12:41 +0100)]
Merge pull request #1837 from embray/set-num-thread-after-fork
Ensure that blas_thread_init has been called in openblas_set_num_threads
Erik M. Bray [Sun, 28 Oct 2018 21:16:52 +0000 (21:16 +0000)]
ensure that threading has been initialized in the first place before calling openblas_set_num_threads
Martin Kroeker [Sun, 28 Oct 2018 19:00:01 +0000 (20:00 +0100)]
Merge pull request #1836 from martin-frbg/zen2core
Fix detection of Ryzen2 (missing CORE_ZEN)
Martin Kroeker [Sun, 28 Oct 2018 17:36:55 +0000 (18:36 +0100)]
Fix detection of Ryzen2 (missing CORE_ZEN)
Martin Kroeker [Tue, 23 Oct 2018 16:14:28 +0000 (18:14 +0200)]
Merge pull request #1829 from ashwinyes/develop_aarch64_dynamic_arch_support
Add DYNAMIC_ARCH support for ARM64
Andrew [Mon, 22 Oct 2018 20:21:49 +0000 (23:21 +0300)]
disable threading in C/ZSWAP copying from S/DSWAP
Ashwin Sekhar T K [Thu, 18 Oct 2018 12:15:45 +0000 (05:15 -0700)]
ARM64: Enable DYNAMIC_ARCH
Enable DYNAMIC_ARCH feature on ARM64. This patch uses the cpuid
feature in linux kernel to detect the core type at runtime
(https://www.kernel.org/doc/Documentation/arm64/cpu-feature-registers.txt).
If this feature is missing in kernel, then the user should use the
OPENBLAS_CORETYPE env variable to select the desired core type.
Ashwin Sekhar T K [Mon, 22 Oct 2018 08:49:16 +0000 (01:49 -0700)]
ARM64: Remove #define ARMV8 for THUNDERX
Ashwin Sekhar T K [Thu, 18 Oct 2018 12:13:02 +0000 (05:13 -0700)]
ARM64: Fix DYNAMIC_ARCH compilation for cores which dont use GEMM3M
Ashwin Sekhar T K [Thu, 18 Oct 2018 12:02:23 +0000 (05:02 -0700)]
ARM64: Move parameters from parameter.c to param.h
Remove the runtime setting of P, Q, R parameters for
targets ARMV8, THUNDERX2T99. Instead set them as constants
in param.h at compile time.
Ashwin Sekhar T K [Thu, 18 Oct 2018 11:51:24 +0000 (04:51 -0700)]
ARM64: Remove XGENE1 references
Remove XGENE1 target as the implementation for the
same is incomplete. Moreover whoever wishes to use
on XGENE1 can use the generic ARMV8 target as there
are no XGENE1 specific optimizations in OpenBLAS.
Martin Kroeker [Sun, 21 Oct 2018 18:34:05 +0000 (20:34 +0200)]
Merge pull request #1825 from brada4/hemv
Delay _hemv threading in attempt to address #1820
Andrew [Sat, 20 Oct 2018 18:37:53 +0000 (21:37 +0300)]
re-arrange new code for readability
Andrew [Sat, 20 Oct 2018 08:13:29 +0000 (11:13 +0300)]
Attempt to tame _hemv threading #1820
Andrew [Sat, 20 Oct 2018 07:55:04 +0000 (10:55 +0300)]
init
Martin Kroeker [Thu, 18 Oct 2018 06:13:05 +0000 (08:13 +0200)]
Merge pull request #1821 from ashwinyes/develop_aarch64_armv8neonkernels
Use ThunderX2 Neon Kernels for ARMV8 Target
Ashwin Sekhar T K [Wed, 17 Oct 2018 15:11:27 +0000 (08:11 -0700)]
ARM64: Use THUNDERX2T99 Neon Kernels for ARMV8
Currently the generic ARMV8 target uses C implementations
for many routines. Replace these with the neon implementations
written for THUNDERX2T99 target which are upto 6x faster for
certain routines.
Ashwin Sekhar T K [Wed, 17 Oct 2018 15:02:40 +0000 (08:02 -0700)]
ARM64: Remove dependency of THUNDERX2T99 Makefile on CORTEXA57 Makefile
Ashwin Sekhar T K [Wed, 17 Oct 2018 15:02:16 +0000 (08:02 -0700)]
ARM64: Remove dependency of THUNDERX Makefile on ARMV8 Makefile
Ashwin Sekhar T K [Wed, 17 Oct 2018 15:01:45 +0000 (08:01 -0700)]
ARM64: Remove dependency of CORTEXA57 Makefile on ARMV8 Makefile
Ashwin Sekhar T K [Wed, 17 Oct 2018 15:01:27 +0000 (08:01 -0700)]
ARM64: Remove dependency of XGENE1 Makefile on ARMV8 Makefile
Martin Kroeker [Sun, 14 Oct 2018 17:57:34 +0000 (19:57 +0200)]
Merge pull request #1815 from fenrus75/sgemm_beta_fix
enable the SGEMM/SKX C based kernel
Arjan van de Ven [Fri, 12 Oct 2018 09:30:35 +0000 (09:30 +0000)]
enable the SGEMM/SKX C based kernel
In QA the final bug was found so now the sklyakex sgemm C based kernel can
be activated....
Martin Kroeker [Thu, 11 Oct 2018 19:51:31 +0000 (21:51 +0200)]
Merge pull request #1812 from martin-frbg/issue1806-2
Use KERNEL_DEFINITIONS rather than COMMON_OPTS to pass -march=skylake…
Martin Kroeker [Thu, 11 Oct 2018 09:03:27 +0000 (11:03 +0200)]
Use KERNEL_DEFINITIONS rather than COMMON_OPTS to pass -march=skylake-avx512
Martin Kroeker [Thu, 11 Oct 2018 05:48:08 +0000 (07:48 +0200)]
Merge pull request #1808 from martin-frbg/issue1806
Add -march=skylake-avx512 to CFLAGS when the target is Skylake
Martin Kroeker [Thu, 11 Oct 2018 05:47:53 +0000 (07:47 +0200)]
Merge pull request #1807 from xianyi/revert-1798-cmake-avx512
Revert "Add -march=skylake-avx512 when required"
Martin Kroeker [Wed, 10 Oct 2018 21:47:35 +0000 (23:47 +0200)]
Syntax fix
Martin Kroeker [Wed, 10 Oct 2018 17:22:01 +0000 (19:22 +0200)]
Add -march=skylake-avx512 to CFLAGS when the target is Skylake
Should fix 1806 and #1801
Martin Kroeker [Wed, 10 Oct 2018 17:15:32 +0000 (19:15 +0200)]
Revert "Add -march=skylake-avx512 when required"
Martin Kroeker [Wed, 10 Oct 2018 06:52:53 +0000 (08:52 +0200)]
Merge pull request #1802 from martin-frbg/issue1801
Use avx512 workaround with msys2/mingw64 as well
Martin Kroeker [Wed, 10 Oct 2018 06:50:44 +0000 (08:50 +0200)]
Merge pull request #1804 from fenrus75/sgemm
Add a C+intrinsics version of the SGEMM/skylakex kernel
Arjan van de Ven [Wed, 10 Oct 2018 01:49:22 +0000 (01:49 +0000)]
Add a C+intrinsics version of the SGEMM/skylakex kernel
for most sizes this is 1.2x to 1.4x faster than the current code
Martin Kroeker [Tue, 9 Oct 2018 08:56:37 +0000 (10:56 +0200)]
Merge pull request #1800 from fengrl/patch-1
Update common_mips64.h for the 1st loop of blas_memory_alloc
Martin Kroeker [Tue, 9 Oct 2018 08:34:52 +0000 (10:34 +0200)]
Merge pull request #1792 from martin-frbg/cmakesuffix
Improve CMake help output and add SYMBOLPREFIX and -SUFFIX options
Martin Kroeker [Tue, 9 Oct 2018 08:31:59 +0000 (10:31 +0200)]
Use cygwin compilation workaround for avx512 on msys2/mingw64 as well
Martin Kroeker [Tue, 9 Oct 2018 06:20:52 +0000 (08:20 +0200)]
Merge pull request #1799 from martin-frbg/issue1796
Handle conflicting usage of ARCH in at least some BSD environments
Martin Kroeker [Tue, 9 Oct 2018 06:19:14 +0000 (08:19 +0200)]
Merge pull request #1793 from fenrus75/ncopy
Add optimized *copy versions for skylakex
fengrl [Tue, 9 Oct 2018 03:20:16 +0000 (11:20 +0800)]
Update common_mips64.h
Martin Kroeker [Mon, 8 Oct 2018 20:29:35 +0000 (22:29 +0200)]
Catch conflicting usage of ARCH in at least some BSD environments
fixes #1796
Martin Kroeker [Mon, 8 Oct 2018 20:26:59 +0000 (22:26 +0200)]
Use override for ARCH in make.inc
in case a conflicting setting of ARCH (for architecture) gets pulled in from the environment
(originally suggested by dloghin in #1753)
Martin Kroeker [Mon, 8 Oct 2018 19:15:17 +0000 (21:15 +0200)]
Merge pull request #1798 from martin-frbg/cmake-avx512
Add -march=skylake-avx512 when required
Martin Kroeker [Mon, 8 Oct 2018 17:18:12 +0000 (19:18 +0200)]
Add -march=skylake-avx512 when required
fixes #1797
Arjan van de Ven [Sat, 6 Oct 2018 23:13:26 +0000 (23:13 +0000)]
dgemm/skylakex: replace discrete mul/add with fma
very minor gains since it's not super hot code, but general principles
Arjan van de Ven [Sat, 6 Oct 2018 21:18:12 +0000 (21:18 +0000)]
Add vector optimizations for ncopy as well for dgemm/skylakex
Arjan van de Ven [Sat, 6 Oct 2018 16:36:26 +0000 (16:36 +0000)]
add a skylakex optimized dgemm beta function
Martin Kroeker [Sat, 6 Oct 2018 14:29:29 +0000 (16:29 +0200)]
Merge pull request #1791 from dev-zero/develop
fix parallel build issues with APFS/HFS+/ext2/3 in netlib-lapack
Arjan van de Ven [Sat, 6 Oct 2018 14:12:32 +0000 (14:12 +0000)]
dgemm/avx512 simplify and speed up the 4x4 kernel
Arjan van de Ven [Sat, 6 Oct 2018 14:00:37 +0000 (14:00 +0000)]
undo slow dgemm/skylake microoptimization
the compare is more costly than the work
Arjan van de Ven [Sat, 6 Oct 2018 13:47:20 +0000 (13:47 +0000)]
Add optimized *copy versions for skylakex
Add optimized n/t copy versions for skylakex; in the patch the
tcopy is also rewritten using intrinsics; the ncopy file
will be worked on in a future commit
Martin Kroeker [Sat, 6 Oct 2018 12:36:36 +0000 (14:36 +0200)]
Merge pull request #6 from xianyi/develop
merge develop
Martin Kroeker [Sat, 6 Oct 2018 12:28:04 +0000 (14:28 +0200)]
Add SYMBOLPREFIX and -SUFFIX options and improve help output
Tiziano Müller [Sat, 6 Oct 2018 12:10:02 +0000 (14:10 +0200)]
fix parallel build issues with APFS/HFS+/ext2/3 in netlib-lapack
The problem is that OpenBLAS sets the LAPACKE_LIB and the TMGLIB to the
same object and uses the `ar` feature to update the archive file. If the
underlying filesystem does not have sub-second timestamp resolution and
the system is fast enough (or `ccache` is used), the timestamp of the
builds which should be added to the previously generated archive is the
same as the archive file itself and therefore `make` does not update the
archive.
Since OpenBLAS takes care to not run the different targets updating the
archive in parallel, the easiest solution is to declare the respective
targets `.PHONY`, forcing `make` to always update them.
fixes #1682
Martin Kroeker [Fri, 5 Oct 2018 18:42:37 +0000 (20:42 +0200)]
Merge pull request #1789 from brada4/develop
update travis alpine chroot with avx512 intrinsics headers
Martin Kroeker [Fri, 5 Oct 2018 18:40:38 +0000 (20:40 +0200)]
Merge pull request #1788 from fenrus75/avx512-8x16
skylake dgemm: Add a 16x8 kernel
Arjan van de Ven [Fri, 5 Oct 2018 13:22:21 +0000 (13:22 +0000)]
Add a 24x8 kernel to the skylakex dgemm implementation
Minor gains for small matrixes, but at 512x512 and above the gain
gets more significant.
Arjan van de Ven [Fri, 5 Oct 2018 11:49:43 +0000 (11:49 +0000)]
skylake dgemm: Add a 16x8 kernel
The next step for the avx512 dgemm code is adding a 16x8 kernel.
In the 8x8 kernel, each FMA has a matching load (the broadcast);
in the 16x8 kernel we can reuse this load for 2 FMAs, which
in turn reduces pressure on the load ports of the CPU and gives
a nice performance boost (in the 25% range).
Andrew [Fri, 5 Oct 2018 12:47:55 +0000 (15:47 +0300)]
update travis alpine chroot with avx512 intrinsics headers
Andrew [Fri, 5 Oct 2018 12:41:52 +0000 (15:41 +0300)]
update travis alpine chroot with avx512 intrinsics headers
Martin Kroeker [Fri, 5 Oct 2018 06:25:38 +0000 (08:25 +0200)]
Merge pull request #1785 from brada4/develop
address #1782 2nd loop
Martin Kroeker [Fri, 5 Oct 2018 06:03:27 +0000 (08:03 +0200)]
Merge pull request #1784 from fenrus75/dgemm-avx512
Create a AVX512 enabled version of DGEMM
Martin Kroeker [Thu, 4 Oct 2018 17:14:59 +0000 (19:14 +0200)]
Function name needs to be CNAME, set from outside to allow suffixing for dynamic_arch
Martin Kroeker [Thu, 4 Oct 2018 16:41:47 +0000 (18:41 +0200)]
Merge pull request #1787 from jeromerobert/develop
Fix unknown type name __WAIT_STATUS on RHEL5
Jerome Robert [Thu, 4 Oct 2018 10:27:44 +0000 (12:27 +0200)]
Fix unknown type name __WAIT_STATUS on RHEL5
With glibc 2.5 one must have #define _XOPEN_SOURCE >= 500 to use wait.
But reading glibc code this is actually needed only if stdlib.h was
included before sys/wait.h. This was the case here through
openblas_utest.h. So changing include fix compilation on RHEL5 and
should ne hurt with more recent distro.
* Problem found when using with gcc 5.5 and 4.7.2 on RHEL5/CENTOS5
* Fix #1519
Martin Kroeker [Thu, 4 Oct 2018 07:07:09 +0000 (09:07 +0200)]
Merge pull request #1786 from martin-frbg/immintrin
Check for Immintrin.h presence in the AVX512 compatibility test as well
Martin Kroeker [Thu, 4 Oct 2018 05:36:49 +0000 (07:36 +0200)]
Check availability of immintrin.h in the AVX512 compatibility test