doc/overlays.xml: update documentation for BLAS/LAPACK
This expands the documentation and explains how to assert LP64.
This commit is contained in:
parent
8f58fa044d
commit
3c41d61514
|
@ -1290,32 +1290,9 @@ self: super: {
|
||||||
|
|
||||||
### How to use Intel's MKL with numpy and scipy?
|
### How to use Intel's MKL with numpy and scipy?
|
||||||
|
|
||||||
A `site.cfg` is created that configures BLAS based on the `blas` parameter of
|
MKL can be configured using an overlay. See the section “[Using
|
||||||
the `numpy` derivation. By passing in `mkl`, `numpy` and packages depending on
|
overlays to configure
|
||||||
`numpy` will be built with `mkl`.
|
alternatives](#sec-overlays-alternatives-blas-lapack)”.
|
||||||
|
|
||||||
The following is an overlay that configures `numpy` to use `mkl`:
|
|
||||||
|
|
||||||
```nix
|
|
||||||
self: super: {
|
|
||||||
python37 = super.python37.override {
|
|
||||||
packageOverrides = python-self: python-super: {
|
|
||||||
numpy = python-super.numpy.override {
|
|
||||||
blas = super.pkgs.mkl;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
`mkl` requires an `openmp` implementation when running with multiple processors.
|
|
||||||
By default, `mkl` will use Intel's `iomp` implementation if no other is
|
|
||||||
specified, but this is a runtime-only dependency and binary compatible with the
|
|
||||||
LLVM implementation. To use that one instead, Intel recommends users set it with
|
|
||||||
`LD_PRELOAD`.
|
|
||||||
|
|
||||||
Note that `mkl` is only available on `x86_64-{linux,darwin}` platforms;
|
|
||||||
moreover, Hydra is not building and distributing pre-compiled binaries using it.
|
|
||||||
|
|
||||||
### What inputs do `setup_requires`, `install_requires` and `tests_require` map to?
|
### What inputs do `setup_requires`, `install_requires` and `tests_require` map to?
|
||||||
|
|
||||||
|
|
|
@ -177,7 +177,7 @@ self: super:
|
||||||
<para>
|
<para>
|
||||||
<link
|
<link
|
||||||
xlink:href="https://software.intel.com/en-us/mkl">Intel
|
xlink:href="https://software.intel.com/en-us/mkl">Intel
|
||||||
MKL</link> (only works on x86 architecture)
|
MKL</link> (only works on x86 architecture, unfree)
|
||||||
</para>
|
</para>
|
||||||
<para>
|
<para>
|
||||||
The Nixpkgs attribute is <literal>mkl</literal>.
|
The Nixpkgs attribute is <literal>mkl</literal>.
|
||||||
|
@ -211,6 +211,44 @@ self: super:
|
||||||
using <literal>LD_PRELOAD</literal> of libblas.so.3 and
|
using <literal>LD_PRELOAD</literal> of libblas.so.3 and
|
||||||
liblapack.so.3.
|
liblapack.so.3.
|
||||||
</para>
|
</para>
|
||||||
|
<para>
|
||||||
|
Intel MKL requires an <literal>openmp</literal> implementation
|
||||||
|
when running with multiple processors. By default,
|
||||||
|
<literal>mkl</literal> will use Intel’s <literal>iomp</literal>
|
||||||
|
implementation if no other is specified, but this is a
|
||||||
|
runtime-only dependency and binary compatible with the LLVM
|
||||||
|
implementation. To use that one instead, Intel recommends users
|
||||||
|
set it with <literal>LD_PRELOAD</literal>. Note that
|
||||||
|
<literal>mkl</literal> is only available on
|
||||||
|
<literal>x86_64-linux</literal> and
|
||||||
|
<literal>x86_64-darwin</literal>. Moreover, Hydra is not build
|
||||||
|
and distributing pre-compiled binaries using it.
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
For BLAS/LAPACK switching to work correctly, all packages must
|
||||||
|
depend on <literal>blas</literal> or <literal>lapack</literal>.
|
||||||
|
This ensures that only one BLAS/LAPACK library is used at one
|
||||||
|
time. There are two versions versions of BLAS/LAPACK currently
|
||||||
|
in the wild, <literal>LP64</literal> (integer size = 32 bits)
|
||||||
|
and <literal>ILP64</literal> (integer size = 64 bits). Some
|
||||||
|
software needs special flags or patches to work with
|
||||||
|
<literal>ILP64</literal>. You can check if
|
||||||
|
<literal>ILP64</literal> is used in Nixpkgs with
|
||||||
|
<varname>blas.isILP64</varname> and
|
||||||
|
<varname>lapack.isILP64</varname>. Some software does NOT work
|
||||||
|
with <literal>ILP64</literal>, and derivations need to specify
|
||||||
|
an assertion to prevent this. You can prevent
|
||||||
|
<literal>ILP64</literal> from being used with the following:
|
||||||
|
</para>
|
||||||
|
<programlisting>
|
||||||
|
{ stdenv, blas, lapack, ... }:
|
||||||
|
|
||||||
|
assert (!blas.isILP64) && (!lapack.isILP64);
|
||||||
|
|
||||||
|
stdenv.mkDerivation {
|
||||||
|
...
|
||||||
|
}
|
||||||
|
</programlisting>
|
||||||
</section>
|
</section>
|
||||||
</section>
|
</section>
|
||||||
</chapter>
|
</chapter>
|
||||||
|
|
Loading…
Reference in New Issue