diff --git a/pkgs/development/libraries/science/math/nccl/default.nix b/pkgs/development/libraries/science/math/nccl/default.nix index d3c20258425..badd08291de 100644 --- a/pkgs/development/libraries/science/math/nccl/default.nix +++ b/pkgs/development/libraries/science/math/nccl/default.nix @@ -1,24 +1,44 @@ -{ callPackage, cudatoolkit_8, cudatoolkit_9 }: +{ stdenv, fetchFromGitHub, which, cudatoolkit }: -let - generic = args: callPackage (import ./generic.nix (removeAttrs args ["cudatoolkit"])) { - inherit (args) cudatoolkit; +stdenv.mkDerivation rec { + name = "nccl-${version}-cuda-${cudatoolkit.majorVersion}"; + version = "2.4.2-1"; + + src = fetchFromGitHub { + owner = "NVIDIA"; + repo = "nccl"; + rev = "v${version}"; + sha256 = "0aa4gv51nbmmdhx6vp40l249m4arp30sijrn6kwxdfi1k9kajiq5"; }; -in + outputs = [ "out" "dev" ]; -{ - nccl_cudatoolkit_8 = generic rec { - version = "2.1.4"; - cudatoolkit = cudatoolkit_8; - srcName = "nccl_${version}-1+cuda${cudatoolkit.majorVersion}_x86_64.txz"; - sha256 = "1lwwm8kdhna5m318yg304kl2gsz1jwhv4zv4gn8av2m57zh848zi"; - }; + nativeBuildInputs = [ which ]; - nccl_cudatoolkit_9 = generic rec { - version = "2.1.4"; - cudatoolkit = cudatoolkit_9; - srcName = "nccl_${version}-1+cuda${cudatoolkit.majorVersion}_x86_64.txz"; - sha256 = "0pajmqzkacpszs63jh2hw2qqc49kj75kcf7r0ky8hdh560q8xn0p"; + buildInputs = [ cudatoolkit ]; + + preConfigure = '' + patchShebangs src/collectives/device/gen_rules.sh + ''; + + makeFlags = [ + "CUDA_HOME=${cudatoolkit}" + "PREFIX=$(out)" + ]; + + postFixup = '' + moveToOutput lib/libnccl_static.a $dev + ''; + + NIX_CFLAGS_COMPILE = [ "-Wno-unused-function" ]; + + enableParallelBuilding = true; + + meta = with stdenv.lib; { + description = "Multi-GPU and multi-node collective communication primitives for NVIDIA GPUs"; + homepage = https://developer.nvidia.com/nccl; + license = licenses.bsd3; + platforms = [ "x86_64-linux" ]; + maintainers = with maintainers; [ mdaiter orivej ]; }; } diff --git a/pkgs/development/libraries/science/math/nccl/generic.nix b/pkgs/development/libraries/science/math/nccl/generic.nix deleted file mode 100644 index 609a7df51e5..00000000000 --- a/pkgs/development/libraries/science/math/nccl/generic.nix +++ /dev/null @@ -1,57 +0,0 @@ -{ version -, srcName -, sha256 -}: - -{ stdenv -, lib -, requireFile -, cudatoolkit -}: - -stdenv.mkDerivation rec { - name = "cudatoolkit-${cudatoolkit.majorVersion}-nccl-${version}"; - - inherit version; - - src = requireFile rec { - name = srcName; - inherit sha256; - message = '' - This nix expression requires that ${name} is already part of the store. - Register yourself to NVIDIA Accelerated Computing Developer Program, retrieve the NCCL library - at https://developer.nvidia.com/nccl, and run the following command in the download directory: - nix-prefetch-url file://\$PWD/${name} - ''; - }; - - unpackCmd = "tar xJf $src"; - - installPhase = '' - function fixRunPath { - p=$(patchelf --print-rpath $1) - patchelf --set-rpath "$p:${lib.makeLibraryPath [ stdenv.cc.cc ]}" $1 - } - fixRunPath lib/libnccl.so - - mkdir -p $out - cp -a include $out/include - cp -a lib $out/lib - ''; - - propagatedBuildInputs = [ - cudatoolkit - ]; - - passthru = { - inherit cudatoolkit; - }; - - meta = with stdenv.lib; { - description = "Multi-GPU and multi-node collective communication primitives that are performance optimized for NVIDIA GPUs"; - homepage = https://developer.nvidia.com/nccl; - license = licenses.unfree; - platforms = [ "x86_64-linux" ]; - maintainers = with maintainers; [ mdaiter ]; - }; -} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index b33dfd77d7a..87b27bcd226 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -4311,11 +4311,10 @@ in nbd = callPackage ../tools/networking/nbd { }; xnbd = callPackage ../tools/networking/xnbd { }; - inherit (callPackages ../development/libraries/science/math/nccl { }) - nccl_cudatoolkit_8 - nccl_cudatoolkit_9; - - nccl = nccl_cudatoolkit_9; + nccl = callPackage ../development/libraries/science/math/nccl { }; + nccl_cudatoolkit_9_0 = nccl.override { cudatoolkit = cudatoolkit_9_0; }; + nccl_cudatoolkit_9 = nccl.override { cudatoolkit = cudatoolkit_9; }; + nccl_cudatoolkit_10 = nccl.override { cudatoolkit = cudatoolkit_10; }; ndjbdns = callPackage ../tools/networking/ndjbdns { };