On Mon, Nov 27, 2023 at 2:10 PM Dr. Thomas Orgis <
thomas.or...@uni-hamburg.de> wrote:

> Hi,
>
> I'm involved in packaging NumPy for http://pkgsrc.org/. We install a
> set of possible BLAS/CBLAS/LAPACK/LAPACKE packages side-by-side in the
> same prefix. This includes multiple variants of OpenBLAS with regard to
> multithreading (and indexing). For this purpose, we point software to
> use the build-time chosen BLAS implementation via BLAS_LIBS and similar
> variables, or, as seems to be appropriate for the new meson build of
> NumPy, via .pc files.
>
> A package depends on the generic BLAS library family and central user
> configuration chooses which one the packages should use during build.
>
> What would be the correct way to force the NumPy build to just use our
> BLAS choice, avoiding any automatisms that might surprise us?
>
> How agnostic is NumPy regarding the offered BLAS? Does it have to know
> that it is using OpenMP-parallelized OpenBLAS vs. the serial one (I'd
> imagine just setting OMP_NUM_THREADS handles paralellism)


The NumPy build does not know anything about this. It will just build, and
it will simply call the OpenBLAS functionality - whether those execute
under the hood in parallel or not, or with OpenMP or pthreads, is unknown.
When a user or downstream library wants to control that parallelism, they
can use an environment variable or https://github.com/joblib/threadpoolctl.

or MKL, Netlib, … ?


By default, the NumPy build will try all of those, in the order given by
the `blas-order` and `lapack-order` build options (see `meson_options.txt
in the root of the repo).

It doesn't scale to have to tell it "openblas" or "netlib",
> as there is no universal vocabulary to name the variants, and NumPy
> doesn't even know openblas_openmp from serial openblas or
> openblas_pthread (right?).
>
> Basically, I want to do
>
>         meson setup -Dcblas_pc=$CBLAS_PC
>
> with CBLAS_PC being the module name of one of
>
> $prefix/lib/pkgconfig/cblas.pc
> $prefix/lib/pkgconfig/openblas_pthread.pc
> $prefix/lib/pkgconfig/openblas_openmp.pc
> $prefix/lib/pkgconfig/openblas64_openmp.pc
>
> so that pkg-config does its thing without the NumPy build guessing
> around. Is that feasible already? Is it easily supportable with some
> changes to the build? I dream of a world where package build scripts
> don't have to add dozens of idiosyncratic lines to detect these libs.
>

Yes, that is possible. You should be building with a build frontend (pip or
pypa/build) and then the invocation will include `-C-Dblas=<your .pc name>
-C-Dlapack=<your .pc name>`. See
http://scipy.github.io/devdocs/building/blas_lapack.html for more guidance.


> I'd like things to work like for CMake's FindBLAS with
> -DBLA_PREFER_PKGCONFIG and -DBLA_PKGCONFIG_BLAS=$BLAS_PC (see
>
>         https://cmake.org/cmake/help/latest/module/FindBLAS.html
>
> since version 3.25).
>
> Can we have that?
>

Yes, that is implemented since NumPy 1.26.2 and in the main branch.


>
> And: NumPy needs CBLAS … does it also need LAPACKE instead of LAPACK?
>

No need for LAPACKE.


> These are differing libraries, possibly coming in differing binaries,
> even if your OpenBLAS builds also combine them. So I guess it should be
> -Dcblas_pc and -Dlapacke_pc, both being possibly identical. A build of
> the reference Netlib implementation provides four distinct libraries
> and .pc files:
>
> $prefix/lib/pkgconfig/cblas.pc
> $prefix/lib/pkgconfig/blas.pc
> $prefix/lib/pkgconfig/lapacke.pc
> $prefix/lib/pkgconfig/lapack.pc
>
> We do support installing openblas64 and friends alongside the others
> and I imagine just setting an ILP64 option and repective symbol suffix
> (none as of yet, as it's not a settled thing upstream) for the NumPy
> build if a 64 variant is chosen by the user. I wonder a bit if there
> are possible pitfalls combining other libraries with Python and
> indirectly some incompatible BLAS variant via NumPy … but one point of
> our user choice is that they could ensure that all packages really use
> the same BLAS.
>

You have to opt in to ILP64, via a `-Duse-ilp64` flag. It will not work to
craft a blas.pc which points at a 64-bit BLAS.

Cheers,
Ralf



>
>
> Alrighty then,
>
> Thomas
>
> --
> Dr. Thomas Orgis
> HPC @ Universität Hamburg
> _______________________________________________
> NumPy-Discussion mailing list -- numpy-discussion@python.org
> To unsubscribe send an email to numpy-discussion-le...@python.org
> https://mail.python.org/mailman3/lists/numpy-discussion.python.org/
> Member address: ralf.gomm...@googlemail.com
>
_______________________________________________
NumPy-Discussion mailing list -- numpy-discussion@python.org
To unsubscribe send an email to numpy-discussion-le...@python.org
https://mail.python.org/mailman3/lists/numpy-discussion.python.org/
Member address: arch...@mail-archive.com

Reply via email to