magma: add rocm support
This commit is contained in:
@@ -1,40 +1,75 @@
|
||||
{ lib, stdenv, fetchurl, cmake, gfortran, ninja, cudaPackages, libpthreadstubs, lapack, blas }:
|
||||
{ lib
|
||||
, stdenv
|
||||
, fetchurl
|
||||
, cmake
|
||||
, ninja
|
||||
, gfortran
|
||||
, libpthreadstubs
|
||||
, lapack
|
||||
, blas
|
||||
, cudaPackages
|
||||
, hip
|
||||
, hipblas
|
||||
, hipsparse
|
||||
, openmp
|
||||
, useCUDA ? true
|
||||
, useROCM ? false
|
||||
, gpuTargets ? [ ]
|
||||
}:
|
||||
|
||||
let
|
||||
inherit (cudaPackages) cudatoolkit cudaFlags;
|
||||
in
|
||||
|
||||
assert let majorIs = lib.versions.major cudatoolkit.version;
|
||||
in majorIs == "9" || majorIs == "10" || majorIs == "11";
|
||||
|
||||
let
|
||||
in stdenv.mkDerivation (finalAttrs: {
|
||||
pname = "magma";
|
||||
version = "2.6.2";
|
||||
|
||||
in stdenv.mkDerivation {
|
||||
pname = "magma";
|
||||
inherit version;
|
||||
src = fetchurl {
|
||||
url = "https://icl.cs.utk.edu/projectsfiles/magma/downloads/magma-${version}.tar.gz";
|
||||
name = "magma-${finalAttrs.version}.tar.gz";
|
||||
url = "https://icl.cs.utk.edu/projectsfiles/magma/downloads/magma-${finalAttrs.version}.tar.gz";
|
||||
hash = "sha256-dbVU2rAJA+LRC5cskT5Q5/iMvGLzrkMrWghsfk7aCnE=";
|
||||
name = "magma-${version}.tar.gz";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ gfortran cmake ninja ];
|
||||
nativeBuildInputs = [
|
||||
cmake
|
||||
ninja
|
||||
gfortran
|
||||
];
|
||||
|
||||
buildInputs = [ cudatoolkit libpthreadstubs lapack blas ];
|
||||
buildInputs = [
|
||||
libpthreadstubs
|
||||
lapack
|
||||
blas
|
||||
] ++ lib.optionals useCUDA [
|
||||
cudatoolkit
|
||||
] ++ lib.optionals useROCM [
|
||||
hip
|
||||
hipblas
|
||||
hipsparse
|
||||
openmp
|
||||
];
|
||||
|
||||
cmakeFlags = [
|
||||
cmakeFlags = lib.optionals useCUDA [
|
||||
"-DCMAKE_C_COMPILER=${cudatoolkit.cc}/bin/gcc"
|
||||
"-DCMAKE_CXX_COMPILER=${cudatoolkit.cc}/bin/g++"
|
||||
"-DMAGMA_ENABLE_CUDA=ON"
|
||||
"-DGPU_TARGET=${builtins.concatStringsSep "," cudaFlags.cudaRealArchs}"
|
||||
] ++ lib.optionals useROCM [
|
||||
"-DCMAKE_C_COMPILER=${hip}/bin/hipcc"
|
||||
"-DCMAKE_CXX_COMPILER=${hip}/bin/hipcc"
|
||||
"-DMAGMA_ENABLE_HIP=ON"
|
||||
"-DGPU_TARGET=${builtins.concatStringsSep "," (if gpuTargets == [ ] then hip.gpuTargets else gpuTargets)}"
|
||||
];
|
||||
|
||||
buildFlags = [
|
||||
"magma"
|
||||
"magma_sparse"
|
||||
];
|
||||
|
||||
doCheck = false;
|
||||
|
||||
preConfigure = ''
|
||||
export CC=${cudatoolkit.cc}/bin/gcc CXX=${cudatoolkit.cc}/bin/g++
|
||||
'';
|
||||
|
||||
enableParallelBuilding=true;
|
||||
buildFlags = [ "magma" "magma_sparse" ];
|
||||
passthru = {
|
||||
inherit cudatoolkit;
|
||||
};
|
||||
|
||||
meta = with lib; {
|
||||
description = "Matrix Algebra on GPU and Multicore Architectures";
|
||||
@@ -42,7 +77,7 @@ in stdenv.mkDerivation {
|
||||
homepage = "http://icl.cs.utk.edu/magma/index.html";
|
||||
platforms = platforms.unix;
|
||||
maintainers = with maintainers; [ tbenst ];
|
||||
# CUDA and ROCm are mutually exclusive
|
||||
broken = useCUDA && useROCM || useCUDA && versionOlder cudatoolkit.version "9";
|
||||
};
|
||||
|
||||
passthru.cudatoolkit = cudatoolkit;
|
||||
}
|
||||
})
|
||||
|
||||
@@ -36119,7 +36119,20 @@ with pkgs;
|
||||
|
||||
lie = callPackage ../applications/science/math/LiE { };
|
||||
|
||||
magma = callPackage ../development/libraries/science/math/magma { };
|
||||
magma = callPackage ../development/libraries/science/math/magma {
|
||||
inherit (llvmPackages_rocm) openmp;
|
||||
};
|
||||
|
||||
magma-cuda = magma.override {
|
||||
useCUDA = true;
|
||||
useROCM = false;
|
||||
};
|
||||
|
||||
magma-hip = magma.override {
|
||||
useCUDA = false;
|
||||
useROCM = true;
|
||||
};
|
||||
|
||||
clmagma = callPackage ../development/libraries/science/math/clmagma { };
|
||||
|
||||
mathematica = callPackage ../applications/science/math/mathematica { };
|
||||
|
||||
Reference in New Issue
Block a user