easybuilders / easybuild

EasyBuild - building software with ease
http://easybuild.io
GNU General Public License v2.0
457 stars 142 forks source link

can we improve support for 8 byte integers in linear algebra libraries? #737

Open migueldiascosta opened 2 years ago

migueldiascosta commented 2 years ago

For MKL, the i8 toolchainoption selects the ilp64 variants of the libraries [1, 2]

We can easily make OpenBLAS also build a library with 8 byte integers with e.g. buildopts = ['', 'INTERFACE64=1'] in the easyconfigs, and a small change in the easyblock to pass this option to testopts and installopts, and eventually rename and check libraries.

(FlexiBLAS also supports this, with INTEGER8=ON, and in that case adds the 64 suffix to the command and library names)

There is also the option of adding a suffix to the symbol names (e.g., SYMBOLSUFFIX=64_ in OpenBLAS), but in that case the behaviour would be different to MKL and the application would need to be aware of that (e.g. [3, 4])

I think this will also be useful in order to build Julia from source, at least with the same defaults as upstream

But we do need to choose a convention for the library names and eventually symbol suffixes and stick to it

thoughts?

[1] https://github.com/easybuilders/easybuild-framework/blob/712f9d293235d19f34d0aeb109a0837ae03129dd/easybuild/toolchains/linalg/intelmkl.py#L136 [2] https://github.com/easybuilders/easybuild-framework/blob/b64c4969b28bd11c29bfabed82ee1a1a4b22d327/easybuild/toolchains/fft/intelfftw.py#L58) [3] https://numpy.org/devdocs/user/building.html#bit-blas-and-lapack [4] https://scipy.github.io/devdocs/building/#reference-for-build-options

akesandgren commented 2 years ago

There is a major problem to be solved though, Scalapack (PBLAS in particular) from netlib has no I8 support whatsoever, at least last time i checked.. I've been meaning to do stuff there, but never got enough time to even start...

migueldiascosta commented 2 years ago

@akesandgren well, I was thinking more of shared memory situations, and even then "opt-in" (and even using the different symbols besides the different library names) - when using Scalapack one can in principle simply increase the number of MPI processes to decrease the number of elements that each one needs to address

but sure, if the MKL 'i8' behaviour could be completely replicated, it would be cleaner

jfgrimm commented 2 years ago

running to this issue when trying to compile the latest GAMESS with the foss toolchain; GAMESS rejects OpenBLAS if it doesn't have 8-byte integer support

RE ScaLAPACK -- this looks to have some ilp64 support since https://github.com/Reference-ScaLAPACK/scalapack/pull/19 (v2.2)