diff --git a/doc/using/overlays.xml b/doc/using/overlays.xml index 7f6ee040c7c7..f6e02b969eac 100644 --- a/doc/using/overlays.xml +++ b/doc/using/overlays.xml @@ -187,14 +187,28 @@ self: super: AMD - BLIS/LIBFLAME (optimized for modern AMD x86_64 CPUs) + xlink:href="https://github.com/flame/blis">BLIS - The AMD BLIS library, with attribute amd-blis, - provides a BLAS implementation. The complementary AMD LIBFLAME - library, with attribute amd-libflame, provides - a LAPACK implementation. + BLIS, available through the attribute + blis, is a framework for linear algebra kernels. In + addition, it implements the BLAS interface. + + + + + AMD + BLIS/LIBFLAME (optimized for modern AMD x86_64 CPUs) + + + The AMD fork of the BLIS library, with attribute + amd-blis, extends BLIS with optimizations for + modern AMD CPUs. The changes are usually submitted to + the upstream BLIS project after some time. However, AMD BLIS + typically provides some performance improvements on AMD Zen CPUs. + The complementary AMD LIBFLAME library, with attribute + amd-libflame, provides a LAPACK implementation. diff --git a/pkgs/development/libraries/science/math/blis/default.nix b/pkgs/development/libraries/science/math/blis/default.nix new file mode 100644 index 000000000000..42ba4f25204e --- /dev/null +++ b/pkgs/development/libraries/science/math/blis/default.nix @@ -0,0 +1,64 @@ +{ stdenv +, fetchFromGitHub +, perl +, python3 + +# Enable BLAS interface with 64-bit integer width. +, blas64 ? false + +# Target architecture. x86_64 builds Intel and AMD kernels. +, withArchitecture ? "x86_64" + +# Enable OpenMP-based threading. +, withOpenMP ? true +}: + +let + blasIntSize = if blas64 then "64" else "32"; +in stdenv.mkDerivation rec { + pname = "blis"; + version = "0.7.0"; + + src = fetchFromGitHub { + owner = "flame"; + repo = "blis"; + rev = version; + sha256 = "13g9kg7x8j9icg4frdq3wpl2cmp0jnh93mw48daa7ym399w17423"; + }; + + inherit blas64; + + nativeBuildInputs = [ + perl + python3 + ]; + + doCheck = true; + + enableParallelBuilding = true; + + configureFlags = [ + "--enable-cblas" + "--blas-int-size=${blasIntSize}" + ] ++ stdenv.lib.optionals withOpenMP [ "--enable-threading=openmp" ] + ++ [ withArchitecture ]; + + postPatch = '' + patchShebangs configure build/flatten-headers.py + ''; + + postInstall = '' + ln -s $out/lib/libblis.so.3 $out/lib/libblas.so.3 + ln -s $out/lib/libblis.so.3 $out/lib/libcblas.so.3 + ln -s $out/lib/libblas.so.3 $out/lib/libblas.so + ln -s $out/lib/libcblas.so.3 $out/lib/libcblas.so + ''; + + meta = with stdenv.lib; { + description = "BLAS-compatible linear algebra library"; + homepage = "https://github.com/flame/blis"; + license = licenses.bsd3; + maintainers = [ maintainers.danieldk ]; + platforms = [ "x86_64-linux" ]; + }; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index f67b48eebc40..9bce07e4f5f7 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -1387,6 +1387,8 @@ in blink1-tool = callPackage ../tools/misc/blink1-tool { }; + blis = callPackage ../development/libraries/science/math/blis { }; + bliss = callPackage ../applications/science/math/bliss { }; blobfuse = callPackage ../tools/filesystems/blobfuse { };