Skip to content

Commit

Permalink
pythonPackages.{numpy,scipy,numexpr}: support MKL as BLAS
Browse files Browse the repository at this point in the history
This adds support building with MKL.
  • Loading branch information
costrouc authored and FRidh committed Oct 20, 2018
1 parent eee82ae commit 277b73a
Show file tree
Hide file tree
Showing 4 changed files with 53 additions and 16 deletions.
22 changes: 20 additions & 2 deletions doc/languages-frameworks/python.section.md
Original file line number Diff line number Diff line change
Expand Up @@ -1079,8 +1079,7 @@ To modify only a Python package set instead of a whole Python derivation, use th
Use the following overlay template:

```nix
self: super:
{
self: super: {
python = super.python.override {
packageOverrides = python-self: python-super: {
zerobin = python-super.zerobin.overrideAttrs (oldAttrs: {
Expand All @@ -1095,6 +1094,25 @@ self: super:
}
```

### How to use Intel's MKL with numpy and scipy?

A `site.cfg` is created that configures BLAS based on the `blas` parameter
of the `numpy` derivation. By passing in `mkl`, `numpy` and packages depending
on `numpy` will be built with `mkl`.

The following is an overlay that configures `numpy` to use `mkl`:
```nix
self: super: {
python36 = super.python36.override {
packageOverrides = python-self: python-super: {
numpy = python-super.numpy.override {
blas = super.pkgs.mkl;
};
};
};
}
```

## Contributing

### Contributing guidelines
Expand Down
12 changes: 12 additions & 0 deletions pkgs/development/python-modules/numexpr/default.nix
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
, fetchPypi
, python
, numpy
, llvmPackages ? null
}:

buildPythonPackage rec {
Expand All @@ -14,6 +15,17 @@ buildPythonPackage rec {
sha256 = "ee8bc7201aa2f1962c67d27c326a11eef9df887d7b87b1278a1d4e722bf44375";
};

# Remove existing site.cfg, use the one we built for numpy.
# Somehow openmp needs to be added to LD_LIBRARY_PATH
# https://software.intel.com/en-us/forums/intel-system-studio/topic/611682
preBuild = ''
rm site.cfg
ln -s ${numpy.cfg} site.cfg
export LD_LIBRARY_PATH=${llvmPackages.openmp}/lib
'';

buildInputs = [] ++ lib.optional (numpy.blasImplementation == "mkl") llvmPackages.openmp;

propagatedBuildInputs = [ numpy ];

# Run the test suite.
Expand Down
28 changes: 20 additions & 8 deletions pkgs/development/python-modules/numpy/default.nix
Original file line number Diff line number Diff line change
@@ -1,6 +1,20 @@
{ stdenv, lib, fetchPypi, python, buildPythonPackage, isPyPy, gfortran, pytest, blas }:
{ stdenv, lib, fetchPypi, python, buildPythonPackage, isPyPy, gfortran, pytest, blas, writeTextFile }:

buildPythonPackage rec {
let
blasImplementation = lib.nameFromURL blas.name "-";
cfg = writeTextFile {
name = "site.cfg";
text = (lib.generators.toINI {} {
"${blasImplementation}" = {
include_dirs = "${blas}/include";
library_dirs = "${blas}/lib";
} // lib.optionalAttrs (blasImplementation == "mkl") {
mkl_libs = "mkl_rt";
lapack_libs = "";
};
});
};
in buildPythonPackage rec {
pname = "numpy";
version = "1.15.2";

Expand Down Expand Up @@ -39,12 +53,7 @@ buildPythonPackage rec {
'';

preBuild = ''
echo "Creating site.cfg file..."
cat << EOF > site.cfg
[openblas]
include_dirs = ${blas}/include
library_dirs = ${blas}/lib
EOF
ln -s ${cfg} site.cfg
'';

enableParallelBuilding = true;
Expand All @@ -59,8 +68,11 @@ buildPythonPackage rec {

passthru = {
blas = blas;
inherit blasImplementation cfg;
};

doCheck = blasImplementation != "mkl";

# Disable two tests
# - test_f2py: f2py isn't yet on path.
# - test_large_file_support: takes a long time and can cause the machine to run out of disk space
Expand Down
7 changes: 1 addition & 6 deletions pkgs/development/python-modules/scipy/default.nix
Original file line number Diff line number Diff line change
Expand Up @@ -29,12 +29,7 @@ buildPythonPackage rec {
'';

preBuild = ''
echo "Creating site.cfg file..."
cat << EOF > site.cfg
[openblas]
include_dirs = ${numpy.blas}/include
library_dirs = ${numpy.blas}/lib
EOF
ln -s ${numpy.cfg} site.cfg
'';

enableParallelBuilding = true;
Expand Down

0 comments on commit 277b73a

Please sign in to comment.