about summary refs log tree commit diff
path: root/nixpkgs/pkgs/development/cuda-modules/nccl-tests/default.nix
blob: 9c9fc5dfb8d1356458778b420a21d97aef134766 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
# NOTE: Though NCCL tests is called within the cudaPackages package set, we avoid passing in
# the names of dependencies from that package set directly to avoid evaluation errors
# in the case redistributable packages are not available.
{
  config,
  cudaPackages,
  fetchFromGitHub,
  gitUpdater,
  lib,
  mpi,
  mpiSupport ? false,
  which,
}:
let
  inherit (cudaPackages)
    backendStdenv
    cuda_cccl
    cuda_cudart
    cuda_nvcc
    cudatoolkit
    cudaVersion
    nccl
    ;
in
backendStdenv.mkDerivation (
  finalAttrs: {

    pname = "nccl-tests";
    version = "2.13.9";

    src = fetchFromGitHub {
      owner = "NVIDIA";
      repo = finalAttrs.pname;
      rev = "v${finalAttrs.version}";
      hash = "sha256-QYuMBPhvHHVo2ku14jD1CVINLPW0cyiXJkXxb77IxbE=";
    };

    strictDeps = true;

    nativeBuildInputs =
      [which]
      ++ lib.optionals (lib.versionOlder cudaVersion "11.4") [cudatoolkit]
      ++ lib.optionals (lib.versionAtLeast cudaVersion "11.4") [cuda_nvcc];

    buildInputs =
      [nccl]
      ++ lib.optionals (lib.versionOlder cudaVersion "11.4") [cudatoolkit]
      ++ lib.optionals (lib.versionAtLeast cudaVersion "11.4") [
        cuda_nvcc.dev # crt/host_config.h
        cuda_cudart
      ]
      ++ lib.optionals (lib.versionAtLeast cudaVersion "12.0") [
        cuda_cccl.dev # <nv/target>
      ]
      ++ lib.optionals mpiSupport [mpi];

    makeFlags =
      ["NCCL_HOME=${nccl}"]
      ++ lib.optionals (lib.versionOlder cudaVersion "11.4") ["CUDA_HOME=${cudatoolkit}"]
      ++ lib.optionals (lib.versionAtLeast cudaVersion "11.4") ["CUDA_HOME=${cuda_nvcc}"]
      ++ lib.optionals mpiSupport ["MPI=1"];

    enableParallelBuilding = true;

    installPhase = ''
      mkdir -p $out/bin
      cp -r build/* $out/bin/
    '';

    passthru.updateScript = gitUpdater {
      inherit (finalAttrs) pname version;
      rev-prefix = "v";
    };

    meta = with lib; {
      description = "Tests to check both the performance and the correctness of NVIDIA NCCL operations";
      homepage = "https://github.com/NVIDIA/nccl-tests";
      platforms = platforms.linux;
      license = licenses.bsd3;
      broken = !config.cudaSupport || (mpiSupport && mpi == null);
      maintainers = with maintainers; [jmillerpdt] ++ teams.cuda.members;
    };
  }
)