-
Notifications
You must be signed in to change notification settings - Fork 756
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add support for alternating rings, allow for cross-nic rings without cross-rail communication. Add support for user buffer registration for network send/recv. Optimize aggregated operations to better utilize all channels. Add flattening for BCM PCI gen5 switches. Add support for inter-node NVLink communication Add support for port fusion in NET/IB. Add support for ReduceScatter and AllGather using Collnet. Update net API to v8. Fix hang during A2A connection.
- Loading branch information
Showing
74 changed files
with
4,616 additions
and
2,149 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,83 @@ | ||
/* | ||
* Copyright (c) 2017-2022, NVIDIA CORPORATION. All rights reserved. | ||
*/ | ||
|
||
#ifndef NCCL_NET_V8_H_ | ||
#define NCCL_NET_V8_H_ | ||
|
||
#include "net_device.h" | ||
|
||
typedef struct { | ||
char* name; // Used mostly for logging. | ||
char* pciPath; // Path to the PCI device in /sys. | ||
uint64_t guid; // Unique identifier for the NIC chip. Important for | ||
// cards with multiple PCI functions (Physical or virtual). | ||
int ptrSupport; // [NCCL_PTR_HOST|NCCL_PTR_CUDA|NCCL_PTR_DMABUF] | ||
int regIsGlobal; // regMr is not tied to a particular comm | ||
int speed; // Port speed in Mbps. | ||
int port; // Port number. | ||
float latency; // Network latency | ||
int maxComms; // Maximum number of comms we can create | ||
int maxRecvs; // Maximum number of grouped receives. | ||
ncclNetDeviceType netDeviceType; // Network offload type | ||
int netDeviceVersion; // Version number for network offload | ||
} ncclNetProperties_v8_t; | ||
|
||
typedef ncclNetProperties_v8_t ncclNetProperties_t; | ||
|
||
typedef struct { | ||
// Name of the network (mainly for logs) | ||
const char* name; | ||
// Initialize the network. | ||
ncclResult_t (*init)(ncclDebugLogger_t logFunction); | ||
// Return the number of adapters. | ||
ncclResult_t (*devices)(int* ndev); | ||
// Get various device properties. | ||
ncclResult_t (*getProperties)(int dev, ncclNetProperties_v8_t* props); | ||
// Create a receiving object and provide a handle to connect to it. The | ||
// handle can be up to NCCL_NET_HANDLE_MAXSIZE bytes and will be exchanged | ||
// between ranks to create a connection. | ||
ncclResult_t (*listen)(int dev, void* handle, void** listenComm); | ||
// Connect to a handle and return a sending comm object for that peer. | ||
// This call must not block for the connection to be established, and instead | ||
// should return successfully with sendComm == NULL with the expectation that | ||
// it will be called again until sendComm != NULL. | ||
// If *sendDevComm points to a valid object, then NCCL is requesting device offload for this connection | ||
ncclResult_t (*connect)(int dev, void* handle, void** sendComm, ncclNetDeviceHandle_v8_t** sendDevComm); | ||
// Finalize connection establishment after remote peer has called connect. | ||
// This call must not block for the connection to be established, and instead | ||
// should return successfully with recvComm == NULL with the expectation that | ||
// it will be called again until recvComm != NULL. | ||
// If *recvDevComm points to a valid object, then NCCL is requesting device offload for this connection | ||
ncclResult_t (*accept)(void* listenComm, void** recvComm, ncclNetDeviceHandle_v8_t** recvDevComm); | ||
// Register/Deregister memory. Comm can be either a sendComm or a recvComm. | ||
// Type is either NCCL_PTR_HOST or NCCL_PTR_CUDA. | ||
ncclResult_t (*regMr)(void* comm, void* data, size_t size, int type, void** mhandle); | ||
/* DMA-BUF support */ | ||
ncclResult_t (*regMrDmaBuf)(void* comm, void* data, size_t size, int type, uint64_t offset, int fd, void** mhandle); | ||
ncclResult_t (*deregMr)(void* comm, void* mhandle); | ||
// Asynchronous send to a peer. | ||
// May return request == NULL if the call cannot be performed (or would block) | ||
ncclResult_t (*isend)(void* sendComm, void* data, int size, int tag, void* mhandle, void** request); | ||
// Asynchronous recv from a peer. | ||
// May return request == NULL if the call cannot be performed (or would block) | ||
ncclResult_t (*irecv)(void* recvComm, int n, void** data, int* sizes, int* tags, void** mhandles, void** request); | ||
// Perform a flush/fence to make sure all data received with NCCL_PTR_CUDA is | ||
// visible to the GPU | ||
ncclResult_t (*iflush)(void* recvComm, int n, void** data, int* sizes, void** mhandles, void** request); | ||
// Test whether a request is complete. If size is not NULL, it returns the | ||
// number of bytes sent/received. | ||
ncclResult_t (*test)(void* request, int* done, int* sizes); | ||
// Close and free send/recv comm objects | ||
ncclResult_t (*closeSend)(void* sendComm); | ||
ncclResult_t (*closeRecv)(void* recvComm); | ||
ncclResult_t (*closeListen)(void* listenComm); | ||
|
||
// Copy the given mhandle to a dptr in a format usable by this plugin's device code | ||
ncclResult_t (*getDeviceMr)(void* comm, void* mhandle, void** dptr_mhandle); | ||
|
||
// Notify the plugin that a recv has completed by the device | ||
ncclResult_t (*irecvConsumed)(void* recvComm, int n, void* request); | ||
} ncclNet_v8_t; | ||
|
||
#endif // end include guard |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,6 +1,6 @@ | ||
##### version | ||
NCCL_MAJOR := 2 | ||
NCCL_MINOR := 19 | ||
NCCL_PATCH := 4 | ||
NCCL_MINOR := 20 | ||
NCCL_PATCH := 3 | ||
NCCL_SUFFIX := | ||
PKG_REVISION := 1 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.