magma: add rocm support

This commit is contained in:
Madoura
2023-01-18 16:59:17 -06:00
parent 4181b58e8a
commit ef3daffc88
2 changed files with 73 additions and 25 deletions
@@ -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;
}
})
+14 -1
View File
@@ -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 { };