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