Kevin Kofler <kevin.kofler(a)chello.at> writes:
Jerry James wrote:
> If I understand correctly, the default is a library that cannot
> tolerate multiple threads, uses 32-bit integers in the interface, and
> does not use "a symbol name suffix", whatever that means.
Hmmm, normally, the serial version is not itself parallelized but should
tolerate threaded applications. In fact, that is the main advantage over the
threaded versions that may interfere with the application's own threading,
and the reason why serial is still the default.
Yes, you normally want to parallelize only at the top level. Blithely
switching on threading of some sort in libraries typically causes
trouble with HPC applications in particular. Assuming only the public
BLAS(/LAPACK) interface is used, you can change which implementation if
used (including threaded or not) with LD_PRELOAD.
However, that does not appear to be entirely true, judging from your
> OpenBLAS : Program will terminate because you tried to start too many
which leaves me slightly confused.
I don't know where that's coming from, but it's not from libopenblas as
far as I can tell, so it needs debugging.
> Also, I see this in /usr/include/openblas/openblas_config.h:
> #define OPENBLAS_HAVE_SSE3
> #define OPENBLAS_HAVE_SSSE3
> That suggests that SSE3 and SSSE3 instructions have been built into
> one or more of the openblas libraries, which means that users with
> machines that do not support those instruction sets will get illegal
> instruction errors if they try to use anything linked with openblas.
OpenBLAS detects the available instruction set at runtime on x86/x86_64, so
SSE3 and SSSE3 instructions should only be used when the hardware actually
supports them (though I have not personally verified that this actually
works as documented).
OpenBLAS's dynamic selection works fine (for x86 cpuids it recognizes),
but is highly suboptimal on avx512, at least for dgemm. (You currently
want BLIS for avx512, but the BLIS packaging is waiting for me to sort
out the effect of hardening flags.) OB doesn't currently dispatch on
micro-architecture for any other architectures as far as I know, but
BLIS does to a limited extent, and I don't think you can optimally use
just one of OB or BLIS everywhere. However, I don't think there's a
need to use ATLAS anywhere in Fedora now.
Overall, the situation with linear algebra support in Fedora is a mess.
There was a proposal to fix it, which was rejected in committee some
time ago. (It looked to me as though the committee didn't understand
the issues.) I wrote something about it and the fiddle I've used at
probably needs some updating.
-- Frustrated of HPC-town