xref: /aosp_15_r20/external/tensorflow/third_party/nccl/archive.BUILD (revision b6fb3261f9314811a0f4371741dbb8839866f948)
1*b6fb3261SAndroid Build Coastguard Worker# NVIDIA NCCL 2
2*b6fb3261SAndroid Build Coastguard Worker# A package of optimized primitives for collective multi-GPU communication.
3*b6fb3261SAndroid Build Coastguard Worker
4*b6fb3261SAndroid Build Coastguard Workerlicenses(["notice"])
5*b6fb3261SAndroid Build Coastguard Worker
6*b6fb3261SAndroid Build Coastguard Workerexports_files(["LICENSE.txt"])
7*b6fb3261SAndroid Build Coastguard Worker
8*b6fb3261SAndroid Build Coastguard Workerload("@local_config_cuda//cuda:build_defs.bzl", "cuda_library")
9*b6fb3261SAndroid Build Coastguard Workerload(
10*b6fb3261SAndroid Build Coastguard Worker    "@local_config_nccl//:build_defs.bzl",
11*b6fb3261SAndroid Build Coastguard Worker    "cuda_rdc_library",
12*b6fb3261SAndroid Build Coastguard Worker    "gen_device_srcs",
13*b6fb3261SAndroid Build Coastguard Worker)
14*b6fb3261SAndroid Build Coastguard Worker
15*b6fb3261SAndroid Build Coastguard Workercc_library(
16*b6fb3261SAndroid Build Coastguard Worker    name = "src_hdrs",
17*b6fb3261SAndroid Build Coastguard Worker    hdrs = [
18*b6fb3261SAndroid Build Coastguard Worker        "src/include/collectives.h",
19*b6fb3261SAndroid Build Coastguard Worker        "src/nccl.h",
20*b6fb3261SAndroid Build Coastguard Worker    ],
21*b6fb3261SAndroid Build Coastguard Worker    strip_include_prefix = "src",
22*b6fb3261SAndroid Build Coastguard Worker)
23*b6fb3261SAndroid Build Coastguard Worker
24*b6fb3261SAndroid Build Coastguard Workercc_library(
25*b6fb3261SAndroid Build Coastguard Worker    name = "include_hdrs",
26*b6fb3261SAndroid Build Coastguard Worker    hdrs = glob(["src/include/**"]),
27*b6fb3261SAndroid Build Coastguard Worker    strip_include_prefix = "src/include",
28*b6fb3261SAndroid Build Coastguard Worker    deps = ["@local_config_cuda//cuda:cuda_headers"],
29*b6fb3261SAndroid Build Coastguard Worker)
30*b6fb3261SAndroid Build Coastguard Worker
31*b6fb3261SAndroid Build Coastguard Workercc_library(
32*b6fb3261SAndroid Build Coastguard Worker    name = "device_hdrs",
33*b6fb3261SAndroid Build Coastguard Worker    hdrs = glob(["src/collectives/device/*.h"]),
34*b6fb3261SAndroid Build Coastguard Worker    strip_include_prefix = "src/collectives/device",
35*b6fb3261SAndroid Build Coastguard Worker)
36*b6fb3261SAndroid Build Coastguard Worker
37*b6fb3261SAndroid Build Coastguard Worker# NCCL compiles the same source files with different NCCL_OP/NCCL_TYPE defines.
38*b6fb3261SAndroid Build Coastguard Worker# RDC compilation requires that each compiled module has a unique ID. Clang
39*b6fb3261SAndroid Build Coastguard Worker# derives the module ID from the path only so we need to copy the files to get
40*b6fb3261SAndroid Build Coastguard Worker# different IDs for different parts of compilation. NVCC does not have that
41*b6fb3261SAndroid Build Coastguard Worker# problem because it generates IDs based on preprocessed content.
42*b6fb3261SAndroid Build Coastguard Workergen_device_srcs(
43*b6fb3261SAndroid Build Coastguard Worker    name = "device_srcs",
44*b6fb3261SAndroid Build Coastguard Worker    srcs = [
45*b6fb3261SAndroid Build Coastguard Worker        "src/collectives/device/all_gather.cu.cc",
46*b6fb3261SAndroid Build Coastguard Worker        "src/collectives/device/all_reduce.cu.cc",
47*b6fb3261SAndroid Build Coastguard Worker        "src/collectives/device/broadcast.cu.cc",
48*b6fb3261SAndroid Build Coastguard Worker        "src/collectives/device/reduce.cu.cc",
49*b6fb3261SAndroid Build Coastguard Worker        "src/collectives/device/reduce_scatter.cu.cc",
50*b6fb3261SAndroid Build Coastguard Worker        "src/collectives/device/sendrecv.cu.cc",
51*b6fb3261SAndroid Build Coastguard Worker    ],
52*b6fb3261SAndroid Build Coastguard Worker)
53*b6fb3261SAndroid Build Coastguard Worker
54*b6fb3261SAndroid Build Coastguard Workercuda_rdc_library(
55*b6fb3261SAndroid Build Coastguard Worker    name = "device",
56*b6fb3261SAndroid Build Coastguard Worker    srcs = [
57*b6fb3261SAndroid Build Coastguard Worker        "src/collectives/device/functions.cu.cc",
58*b6fb3261SAndroid Build Coastguard Worker        "src/collectives/device/onerank_reduce.cu.cc",
59*b6fb3261SAndroid Build Coastguard Worker        ":device_srcs",
60*b6fb3261SAndroid Build Coastguard Worker    ] + glob([
61*b6fb3261SAndroid Build Coastguard Worker        # Required for header inclusion checking, see below for details.
62*b6fb3261SAndroid Build Coastguard Worker        "src/collectives/device/*.h",
63*b6fb3261SAndroid Build Coastguard Worker        "src/nccl.h",
64*b6fb3261SAndroid Build Coastguard Worker    ]),
65*b6fb3261SAndroid Build Coastguard Worker    deps = [
66*b6fb3261SAndroid Build Coastguard Worker        ":device_hdrs",
67*b6fb3261SAndroid Build Coastguard Worker        ":include_hdrs",
68*b6fb3261SAndroid Build Coastguard Worker        ":src_hdrs",
69*b6fb3261SAndroid Build Coastguard Worker        "@local_config_cuda//cuda:cuda_headers",
70*b6fb3261SAndroid Build Coastguard Worker    ],
71*b6fb3261SAndroid Build Coastguard Worker)
72*b6fb3261SAndroid Build Coastguard Worker
73*b6fb3261SAndroid Build Coastguard Workercc_library(
74*b6fb3261SAndroid Build Coastguard Worker    name = "net",
75*b6fb3261SAndroid Build Coastguard Worker    srcs = [
76*b6fb3261SAndroid Build Coastguard Worker        "src/transport/coll_net.cc",
77*b6fb3261SAndroid Build Coastguard Worker        "src/transport/net.cc",
78*b6fb3261SAndroid Build Coastguard Worker    ],
79*b6fb3261SAndroid Build Coastguard Worker    linkopts = select({
80*b6fb3261SAndroid Build Coastguard Worker        "@org_tensorflow//tensorflow:macos": [],
81*b6fb3261SAndroid Build Coastguard Worker        "//conditions:default": ["-lrt"],
82*b6fb3261SAndroid Build Coastguard Worker    }),
83*b6fb3261SAndroid Build Coastguard Worker    deps = [
84*b6fb3261SAndroid Build Coastguard Worker        ":include_hdrs",
85*b6fb3261SAndroid Build Coastguard Worker        ":src_hdrs",
86*b6fb3261SAndroid Build Coastguard Worker    ],
87*b6fb3261SAndroid Build Coastguard Worker)
88*b6fb3261SAndroid Build Coastguard Worker
89*b6fb3261SAndroid Build Coastguard Workercc_library(
90*b6fb3261SAndroid Build Coastguard Worker    name = "nccl",
91*b6fb3261SAndroid Build Coastguard Worker    srcs = glob(
92*b6fb3261SAndroid Build Coastguard Worker        include = [
93*b6fb3261SAndroid Build Coastguard Worker            "src/**/*.cc",
94*b6fb3261SAndroid Build Coastguard Worker            # Required for header inclusion checking, see below for details.
95*b6fb3261SAndroid Build Coastguard Worker            "src/graph/*.h",
96*b6fb3261SAndroid Build Coastguard Worker        ],
97*b6fb3261SAndroid Build Coastguard Worker        # Exclude device-library code.
98*b6fb3261SAndroid Build Coastguard Worker        exclude = [
99*b6fb3261SAndroid Build Coastguard Worker            "src/collectives/device/**",
100*b6fb3261SAndroid Build Coastguard Worker            "src/transport/coll_net.cc",
101*b6fb3261SAndroid Build Coastguard Worker            "src/transport/net.cc",
102*b6fb3261SAndroid Build Coastguard Worker        ],
103*b6fb3261SAndroid Build Coastguard Worker    ) + [
104*b6fb3261SAndroid Build Coastguard Worker        # Required for header inclusion checking (see
105*b6fb3261SAndroid Build Coastguard Worker        # http://docs.bazel.build/versions/master/be/c-cpp.html#hdrs).
106*b6fb3261SAndroid Build Coastguard Worker        # Files in src/ which #include "nccl.h" load it from there rather than
107*b6fb3261SAndroid Build Coastguard Worker        # from the virtual includes directory.
108*b6fb3261SAndroid Build Coastguard Worker        "src/include/collectives.h",
109*b6fb3261SAndroid Build Coastguard Worker        "src/nccl.h",
110*b6fb3261SAndroid Build Coastguard Worker    ],
111*b6fb3261SAndroid Build Coastguard Worker    hdrs = ["src/nccl.h"],
112*b6fb3261SAndroid Build Coastguard Worker    include_prefix = "third_party/nccl",
113*b6fb3261SAndroid Build Coastguard Worker    linkopts = select({
114*b6fb3261SAndroid Build Coastguard Worker        "@org_tensorflow//tensorflow:macos": [],
115*b6fb3261SAndroid Build Coastguard Worker        "//conditions:default": ["-lrt"],
116*b6fb3261SAndroid Build Coastguard Worker    }),
117*b6fb3261SAndroid Build Coastguard Worker    strip_include_prefix = "src",
118*b6fb3261SAndroid Build Coastguard Worker    visibility = ["//visibility:public"],
119*b6fb3261SAndroid Build Coastguard Worker    deps = [
120*b6fb3261SAndroid Build Coastguard Worker        ":device",
121*b6fb3261SAndroid Build Coastguard Worker        ":include_hdrs",
122*b6fb3261SAndroid Build Coastguard Worker        ":net",
123*b6fb3261SAndroid Build Coastguard Worker        ":src_hdrs",
124*b6fb3261SAndroid Build Coastguard Worker    ],
125*b6fb3261SAndroid Build Coastguard Worker)
126