diff options
author | Matthew Bauer <mjbauer95@gmail.com> | 2020-04-21 11:03:10 -0500 |
---|---|---|
committer | Matthew Bauer <mjbauer95@gmail.com> | 2020-04-21 11:03:10 -0500 |
commit | 3c41d61514029d5aa4ea748c1e46098767ae448b (patch) | |
tree | 8830180c68f0dc03a7dd03bf982cdcbce89ee868 /doc/using | |
parent | 8f58fa044dca8becdc865c2feb51e5048bf14fef (diff) |
doc/overlays.xml: update documentation for BLAS/LAPACK
This expands the documentation and explains how to assert LP64.
Diffstat (limited to 'doc/using')
-rw-r--r-- | doc/using/overlays.xml | 40 |
1 files changed, 39 insertions, 1 deletions
diff --git a/doc/using/overlays.xml b/doc/using/overlays.xml index 7732e0ac2179d..5f808839dd0d0 100644 --- a/doc/using/overlays.xml +++ b/doc/using/overlays.xml @@ -177,7 +177,7 @@ self: super: <para> <link 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> The Nixpkgs attribute is <literal>mkl</literal>. @@ -211,6 +211,44 @@ self: super: using <literal>LD_PRELOAD</literal> of libblas.so.3 and liblapack.so.3. </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> </chapter> |