9bc0e13ef0
Device API (Experimental)
* Introduces device-side APIs to integrate NCCL communication directly into application kernels.
* Supports LSA (Load/Store Access) for CUDA P2P communication over NVLink and some PCIe platforms.
* Supports Multimem for hardware multicast using NVLink SHARP.
* Adds initial framework for GIN (GPU-Initiated Networking), currently under development.
* Introduces device communicators created using ncclDevCommCreate.
* Enables device-side communication operations with synchronization (ncclLsaBarrierSession) and memory accessors (ncclGetLsaPointer, ncclGetLsaMultimemPointer).
* Experimental APIs - signatures and functionality may evolve in future releases.
* No ABI compatibility is guaranteed — applications must be recompiled with each new NCCL release.
Symmetric memory improvements
* Support for aggregating symmetric operations using ncclGroupStart/End APIs.
* Reimplement symmetric kernels using device API.
New Host APIs
* Introduce new host collective APIs: ncclAlltoAll, ncclScatter, ncclGather.
CE (Copy Engine) Collectives
* Reduce SM utilization for alltoall, scatter, gather, and allgather within a single (MN)NVL domain.
* Free up SM capacity for the application to do computation at the same time.
* To enable the feature for ncclAllGather, ncclAlltoAll, ncclGather, ncclScatter, register buffers into symmetric windows and use the NCCL_CTA_POLICY_ZERO flag in the communicator config_t.
NCCL Inspector Plugin
* Introduces an Inspector plugin for always-on performance monitoring.
* Produces structured JSON output with metadata, execution time, bandwidth, and optional event traces for each NCCL operation.
* Enables integration with analysis tools such as Performance Exporter to visualize NCCL performance bottlenecks.
* Lightweight to enable via environment variables NCCL_PROFILER_PLUGIN and NCCL_INSPECTOR_ENABLE.
CMake support (Experiemental)
* Adds a CMake build system as an alternative to existing Makefiles.
* Known issues: pkg.build and Device API currently do not work with CMake.
* The known issues will be addressed in a future release.
Decreased max CTA count from 32 to 16 on Blackwell
* SM overhead is decreased by 50% with this improvement.
* This may cause some perf drop on Blackwell because of the reduced SM usage.
* If the extra SM capacity is not desired, two options are available to restore to previous behavior: 1) Setting NCCL_MIN_CTAS=32 NCCL_MAX_CTAS=32 environment variables; 2) setting communicator config to over-write max CTA count to 32.
* Based on community feedback, future versions may consider different trade-offs between performance and SM overhead.
Plugins
* Network
* App-aware Network plugin. NCCL passes information about communication operations to be executed on the network end point. This allows for better tuning of network end points and their use in the plugins.
* Improve handling of physical and virtual network devices and load/unload.
* Network plugin version 11 - add explicit context and communication ID support for per communicator init/finalize.
* Add Multi-Request Net API. Using this will help NCCL to anticipate multiple send/recv requests and optimize for it. See maxMultiRequestSize field in ncclNetProperties_v11_t.
* Profiler
* Add support for API events (group, collective, and p2p) and for tracking kernel launches in the profiler plugin.
* Add Inspector Profiler Plugin (see section above).
* Add a hook to Google’s CoMMA profiler on github.
* Tuner
* Expose NCCL tuning constants at tuner initialization via ncclTunerConstants_v5_t.
* Add NVL Domain Information API.
* Support multiple plugin types from a single shared object.
New Parameterization and ncclConfig changes:
* Add new option NCCL_MNNVL_CLIQUE_ID=-2 which will use rack serial number to partition the MNNVL clique. This will limit NVLink domains to GPUs within a single rack.
* Add NCCL_NETDEVS_POLICY to control how NET devices are assigned to GPUs. The default (AUTO) is the policy used in previous versions.
* Add NCCL_SINGLE_PROC_MEM_REG_ENABLE control variable to enable NVLS UB registration in the “one process, multiple ranks” case as opt in.
* Move nChannelsPerNetPeer into ncclConfig. NCCL_NCHANNELS_PER_NET_PEER can override the value in ncclConfig.
* Enable PxN over C2C by default
* PxN over C2C will improve performance for Grace-Blackwell platforms by allowing NCCL to leverage the NIC attached to a peer GPU over NVLINK, C2C, and PCIe.
* This behavior can be overridden by setting NCCL_PXN_C2C=0.
Other Improvements:
* Allow FP8 support for non-reductive operations on pre sm90 devices. (See https://github.com/pytorch/pytorch/pull/151594#discussion_r2135777776)
* Fix NVLS+CollNet and temporarily disables COLLNET_CHAIN for >8 GPUs.
* Only consider running interfaces for socket traffic. NCCL will not attempt to use interfaces that do not have the IFF_RUNNING bit. (https://github.com/NVIDIA/nccl/issues/1798)
* Modernize mutex management. Convert to std::mutex and std::lock_guard.
* Remove sm35 and sm50 GENCODE targets which have long been deprecated and were causing issues with the latest NCCL release builds.
* Improved NVLS/NVLSTree tuning prediction to improve algorithm and protocol selection.
* NVLSTree Tuning Fixes. Update tuning data for H100, GB200-NV72.
* Respond better to RoCE link flaps. Instead of reporting an “unknown event” it will now report “GID table changed”.
* Move libvirt bridge interface to the end of possible interfaces so that they are considered last. These interfaces are usually virtual bridges to relay traffic to containers running on the host and cannot be used for traffic to a remote node and are therefore unsuitable.
[ROCm/rccl commit: f1308997d0]
347 lines
15 KiB
C++
347 lines
15 KiB
C++
/*************************************************************************
|
|
* Copyright (c) 2015-2022, NVIDIA CORPORATION. All rights reserved.
|
|
*
|
|
* See LICENSE.txt for license information
|
|
************************************************************************/
|
|
|
|
#ifndef NCCL_NVMLWRAP_H_
|
|
#define NCCL_NVMLWRAP_H_
|
|
|
|
#include "nccl.h"
|
|
|
|
//#define NCCL_NVML_DIRECT 1
|
|
#ifndef NCCL_NVML_DIRECT
|
|
#define NCCL_NVML_DIRECT 0
|
|
#endif
|
|
|
|
#if NCCL_NVML_DIRECT
|
|
#include "nvml.h"
|
|
#else
|
|
// Dynamically handle dependencies on NVML
|
|
|
|
/* Extracted from nvml.h */
|
|
|
|
#define NVML_API_VERSION 12
|
|
|
|
#define NVML_STRUCT_VERSION(data, ver) (unsigned int)(sizeof(nvml ## data ## _v ## ver ## _t) | \
|
|
(ver << 24U))
|
|
|
|
typedef struct nvmlDevice_st* nvmlDevice_t;
|
|
#define NVML_DEVICE_PCI_BUS_ID_BUFFER_SIZE 16
|
|
|
|
typedef enum nvmlEnableState_enum
|
|
{
|
|
NVML_FEATURE_DISABLED = 0, //!< Feature disabled
|
|
NVML_FEATURE_ENABLED = 1 //!< Feature enabled
|
|
} nvmlEnableState_t;
|
|
|
|
typedef enum nvmlNvLinkCapability_enum
|
|
{
|
|
NVML_NVLINK_CAP_P2P_SUPPORTED = 0, // P2P over NVLink is supported
|
|
NVML_NVLINK_CAP_SYSMEM_ACCESS = 1, // Access to system memory is supported
|
|
NVML_NVLINK_CAP_P2P_ATOMICS = 2, // P2P atomics are supported
|
|
NVML_NVLINK_CAP_SYSMEM_ATOMICS= 3, // System memory atomics are supported
|
|
NVML_NVLINK_CAP_SLI_BRIDGE = 4, // SLI is supported over this link
|
|
NVML_NVLINK_CAP_VALID = 5, // Link is supported on this device
|
|
// should be last
|
|
NVML_NVLINK_CAP_COUNT
|
|
} nvmlNvLinkCapability_t;
|
|
|
|
typedef enum nvmlReturn_enum
|
|
{
|
|
NVML_SUCCESS = 0, //!< The operation was successful
|
|
NVML_ERROR_UNINITIALIZED = 1, //!< NVML was not first initialized with nvmlInit()
|
|
NVML_ERROR_INVALID_ARGUMENT = 2, //!< A supplied argument is invalid
|
|
NVML_ERROR_NOT_SUPPORTED = 3, //!< The requested operation is not available on target device
|
|
NVML_ERROR_NO_PERMISSION = 4, //!< The current user does not have permission for operation
|
|
NVML_ERROR_ALREADY_INITIALIZED = 5, //!< Deprecated: Multiple initializations are now allowed through ref counting
|
|
NVML_ERROR_NOT_FOUND = 6, //!< A query to find an object was unsuccessful
|
|
NVML_ERROR_INSUFFICIENT_SIZE = 7, //!< An input argument is not large enough
|
|
NVML_ERROR_INSUFFICIENT_POWER = 8, //!< A device's external power cables are not properly attached
|
|
NVML_ERROR_DRIVER_NOT_LOADED = 9, //!< NVIDIA driver is not loaded
|
|
NVML_ERROR_TIMEOUT = 10, //!< User provided timeout passed
|
|
NVML_ERROR_IRQ_ISSUE = 11, //!< NVIDIA Kernel detected an interrupt issue with a GPU
|
|
NVML_ERROR_LIBRARY_NOT_FOUND = 12, //!< NVML Shared Library couldn't be found or loaded
|
|
NVML_ERROR_FUNCTION_NOT_FOUND = 13, //!< Local version of NVML doesn't implement this function
|
|
NVML_ERROR_CORRUPTED_INFOROM = 14, //!< infoROM is corrupted
|
|
NVML_ERROR_GPU_IS_LOST = 15, //!< The GPU has fallen off the bus or has otherwise become inaccessible
|
|
NVML_ERROR_RESET_REQUIRED = 16, //!< The GPU requires a reset before it can be used again
|
|
NVML_ERROR_OPERATING_SYSTEM = 17, //!< The GPU control device has been blocked by the operating system/cgroups
|
|
NVML_ERROR_LIB_RM_VERSION_MISMATCH = 18, //!< RM detects a driver/library version mismatch
|
|
NVML_ERROR_IN_USE = 19, //!< An operation cannot be performed because the GPU is currently in use
|
|
NVML_ERROR_UNKNOWN = 999 //!< An internal driver error occurred
|
|
} nvmlReturn_t;
|
|
|
|
typedef struct nvmlPciInfo_st
|
|
{
|
|
char busId[NVML_DEVICE_PCI_BUS_ID_BUFFER_SIZE]; //!< The tuple domain:bus:device.function PCI identifier (& NULL terminator)
|
|
unsigned int domain; //!< The PCI domain on which the device's bus resides, 0 to 0xffff
|
|
unsigned int bus; //!< The bus on which the device resides, 0 to 0xff
|
|
unsigned int device; //!< The device's id on the bus, 0 to 31
|
|
unsigned int pciDeviceId; //!< The combined 16-bit device id and 16-bit vendor id
|
|
|
|
// Added in NVML 2.285 API
|
|
unsigned int pciSubSystemId; //!< The 32-bit Sub System Device ID
|
|
|
|
// NVIDIA reserved for internal use only
|
|
unsigned int reserved0;
|
|
unsigned int reserved1;
|
|
unsigned int reserved2;
|
|
unsigned int reserved3;
|
|
} nvmlPciInfo_t;
|
|
|
|
/* P2P Capability Index Status*/
|
|
typedef enum nvmlGpuP2PStatus_enum
|
|
{
|
|
NVML_P2P_STATUS_OK = 0,
|
|
NVML_P2P_STATUS_CHIPSET_NOT_SUPPORED,
|
|
NVML_P2P_STATUS_GPU_NOT_SUPPORTED,
|
|
NVML_P2P_STATUS_IOH_TOPOLOGY_NOT_SUPPORTED,
|
|
NVML_P2P_STATUS_DISABLED_BY_REGKEY,
|
|
NVML_P2P_STATUS_NOT_SUPPORTED,
|
|
NVML_P2P_STATUS_UNKNOWN
|
|
} nvmlGpuP2PStatus_t;
|
|
|
|
/* P2P Capability Index*/
|
|
typedef enum nvmlGpuP2PCapsIndex_enum
|
|
{
|
|
NVML_P2P_CAPS_INDEX_READ = 0,
|
|
NVML_P2P_CAPS_INDEX_WRITE,
|
|
NVML_P2P_CAPS_INDEX_NVLINK,
|
|
NVML_P2P_CAPS_INDEX_ATOMICS,
|
|
NVML_P2P_CAPS_INDEX_PROP,
|
|
NVML_P2P_CAPS_INDEX_UNKNOWN
|
|
} nvmlGpuP2PCapsIndex_t;
|
|
|
|
/**
|
|
* Represents the type for sample value returned
|
|
*/
|
|
typedef enum nvmlValueType_enum
|
|
{
|
|
NVML_VALUE_TYPE_DOUBLE = 0,
|
|
NVML_VALUE_TYPE_UNSIGNED_INT = 1,
|
|
NVML_VALUE_TYPE_UNSIGNED_LONG = 2,
|
|
NVML_VALUE_TYPE_UNSIGNED_LONG_LONG = 3,
|
|
NVML_VALUE_TYPE_SIGNED_LONG_LONG = 4,
|
|
|
|
// Keep this last
|
|
NVML_VALUE_TYPE_COUNT
|
|
}nvmlValueType_t;
|
|
|
|
|
|
/**
|
|
* Union to represent different types of Value
|
|
*/
|
|
typedef union nvmlValue_st
|
|
{
|
|
double dVal; //!< If the value is double
|
|
unsigned int uiVal; //!< If the value is unsigned int
|
|
unsigned long ulVal; //!< If the value is unsigned long
|
|
unsigned long long ullVal; //!< If the value is unsigned long long
|
|
signed long long sllVal; //!< If the value is signed long long
|
|
}nvmlValue_t;
|
|
|
|
/**
|
|
* Field Identifiers.
|
|
*
|
|
* All Identifiers pertain to a device. Each ID is only used once and is guaranteed never to change.
|
|
*/
|
|
|
|
/* NVLink Speed */
|
|
#define NVML_FI_DEV_NVLINK_SPEED_MBPS_COMMON 90 //!< Common NVLink Speed in MBps for active links
|
|
#define NVML_FI_DEV_NVLINK_LINK_COUNT 91 //!< Number of NVLinks present on the device
|
|
|
|
/**
|
|
* Remote device NVLink ID
|
|
*
|
|
* Link ID needs to be specified in the scopeId field in nvmlFieldValue_t.
|
|
*/
|
|
#define NVML_FI_DEV_NVLINK_REMOTE_NVLINK_ID 146 //!< Remote device NVLink ID
|
|
|
|
/**
|
|
* NVSwitch: connected NVLink count
|
|
*/
|
|
#define NVML_FI_DEV_NVSWITCH_CONNECTED_LINK_COUNT 147 //!< Number of NVLinks connected to NVSwitch
|
|
|
|
#define NVML_FI_DEV_NVLINK_GET_SPEED 164
|
|
#define NVML_FI_DEV_NVLINK_GET_STATE 165
|
|
#define NVML_FI_DEV_NVLINK_GET_VERSION 166
|
|
|
|
#define NVML_FI_DEV_C2C_LINK_COUNT 170 //!< Number of C2C Links present on the device
|
|
#define NVML_FI_DEV_C2C_LINK_GET_STATUS 171 //!< C2C Link Status 0=INACTIVE 1=ACTIVE
|
|
#define NVML_FI_DEV_C2C_LINK_GET_MAX_BW 172 //!< C2C Link Speed in MBps for active links
|
|
|
|
#define NVML_FI_MAX 173 //!< One greater than the largest field ID defined above
|
|
|
|
/**
|
|
* Information for a Field Value Sample
|
|
*/
|
|
typedef struct nvmlFieldValue_st
|
|
{
|
|
unsigned int fieldId; //!< ID of the NVML field to retrieve. This must be set before any call that uses this struct. See the constants starting with NVML_FI_ above.
|
|
unsigned int scopeId; //!< Scope ID can represent data used by NVML depending on fieldId's context. For example, for NVLink throughput counter data, scopeId can represent linkId.
|
|
long long timestamp; //!< CPU Timestamp of this value in microseconds since 1970
|
|
long long latencyUsec; //!< How long this field value took to update (in usec) within NVML. This may be averaged across several fields that are serviced by the same driver call.
|
|
nvmlValueType_t valueType; //!< Type of the value stored in value
|
|
nvmlReturn_t nvmlReturn; //!< Return code for retrieving this value. This must be checked before looking at value, as value is undefined if nvmlReturn != NVML_SUCCESS
|
|
nvmlValue_t value; //!< Value for this field. This is only valid if nvmlReturn == NVML_SUCCESS
|
|
} nvmlFieldValue_t;
|
|
|
|
|
|
#define NVML_GPU_FABRIC_UUID_LEN 16
|
|
|
|
#define NVML_GPU_FABRIC_STATE_NOT_SUPPORTED 0
|
|
#define NVML_GPU_FABRIC_STATE_NOT_STARTED 1
|
|
#define NVML_GPU_FABRIC_STATE_IN_PROGRESS 2
|
|
#define NVML_GPU_FABRIC_STATE_COMPLETED 3
|
|
|
|
typedef unsigned char nvmlGpuFabricState_t;
|
|
|
|
typedef struct {
|
|
unsigned char clusterUuid[NVML_GPU_FABRIC_UUID_LEN]; //!< Uuid of the cluster to which this GPU belongs
|
|
nvmlReturn_t status; //!< Error status, if any. Must be checked only if state returns "complete".
|
|
unsigned int cliqueId; //!< ID of the fabric clique to which this GPU belongs
|
|
nvmlGpuFabricState_t state; //!< Current state of GPU registration process
|
|
} nvmlGpuFabricInfo_t;
|
|
|
|
#define NVML_GPU_FABRIC_HEALTH_MASK_DEGRADED_BW_NOT_SUPPORTED 0
|
|
#define NVML_GPU_FABRIC_HEALTH_MASK_DEGRADED_BW_TRUE 1
|
|
#define NVML_GPU_FABRIC_HEALTH_MASK_DEGRADED_BW_FALSE 2
|
|
|
|
#define NVML_GPU_FABRIC_HEALTH_MASK_SHIFT_DEGRADED_BW 0
|
|
#define NVML_GPU_FABRIC_HEALTH_MASK_WIDTH_DEGRADED_BW 0x11
|
|
|
|
/**
|
|
* GPU Fabric Health Status Mask for various fields can be obtained
|
|
* using the below macro.
|
|
* Ex - NVML_GPU_FABRIC_HEALTH_GET(var, _DEGRADED_BW)
|
|
*/
|
|
#define NVML_GPU_FABRIC_HEALTH_GET(var, type) \
|
|
(((var) >> NVML_GPU_FABRIC_HEALTH_MASK_SHIFT##type) & \
|
|
(NVML_GPU_FABRIC_HEALTH_MASK_WIDTH##type))
|
|
|
|
/**
|
|
* GPU Fabric Health Status Mask for various fields can be tested
|
|
* using the below macro.
|
|
* Ex - NVML_GPU_FABRIC_HEALTH_TEST(var, _DEGRADED_BW, _TRUE)
|
|
*/
|
|
#define NVML_GPU_FABRIC_HEALTH_TEST(var, type, val) \
|
|
(NVML_GPU_FABRIC_HEALTH_GET(var, type) == \
|
|
NVML_GPU_FABRIC_HEALTH_MASK##type##val)
|
|
|
|
/**
|
|
* GPU Fabric information (v2).
|
|
*
|
|
* Version 2 adds the \ref nvmlGpuFabricInfo_v2_t.version field
|
|
* to the start of the structure, and the \ref nvmlGpuFabricInfo_v2_t.healthMask
|
|
* field to the end. This structure is not backwards-compatible with
|
|
* \ref nvmlGpuFabricInfo_t.
|
|
*/
|
|
typedef struct {
|
|
unsigned int version; //!< Structure version identifier (set to \ref nvmlGpuFabricInfo_v2)
|
|
unsigned char clusterUuid[NVML_GPU_FABRIC_UUID_LEN]; //!< Uuid of the cluster to which this GPU belongs
|
|
nvmlReturn_t status; //!< Error status, if any. Must be checked only if state returns "complete".
|
|
unsigned int cliqueId; //!< ID of the fabric clique to which this GPU belongs
|
|
nvmlGpuFabricState_t state; //!< Current state of GPU registration process
|
|
unsigned int healthMask; //!< GPU Fabric health Status Mask
|
|
} nvmlGpuFabricInfo_v2_t;
|
|
|
|
typedef nvmlGpuFabricInfo_v2_t nvmlGpuFabricInfoV_t;
|
|
|
|
/**
|
|
* Version identifier value for \ref nvmlGpuFabricInfo_v2_t.version.
|
|
*/
|
|
#define nvmlGpuFabricInfo_v2 NVML_STRUCT_VERSION(GpuFabricInfo, 2)
|
|
|
|
/**
|
|
* Structure to store platform information (v2)
|
|
*/
|
|
typedef struct
|
|
{
|
|
unsigned int version; //!< the API version number
|
|
unsigned char ibGuid[16]; //!< Infiniband GUID reported by platform (for Blackwell, ibGuid is 8 bytes so indices 8-15 are zero)
|
|
unsigned char chassisSerialNumber[16]; //!< Serial number of the chassis containing this GPU (for Blackwell it is 13 bytes so indices 13-15 are zero)
|
|
unsigned char slotNumber; //!< The slot number in the chassis containing this GPU (includes switches)
|
|
unsigned char trayIndex; //!< The tray index within the compute slots in the chassis containing this GPU (does not include switches)
|
|
unsigned char hostId; //!< Index of the node within the slot containing this GPU
|
|
unsigned char peerType; //!< Platform indicated NVLink-peer type (e.g. switch present or not)
|
|
unsigned char moduleId; //!< ID of this GPU within the node
|
|
} nvmlPlatformInfo_v2_t;
|
|
|
|
typedef nvmlPlatformInfo_v2_t nvmlPlatformInfo_t;
|
|
#define nvmlPlatformInfo_v2 NVML_STRUCT_VERSION(PlatformInfo, 2)
|
|
|
|
/**
|
|
* Confidential Compute Feature Status values
|
|
*/
|
|
#define NVML_CC_SYSTEM_FEATURE_DISABLED 0
|
|
#define NVML_CC_SYSTEM_FEATURE_ENABLED 1
|
|
|
|
typedef struct nvmlConfComputeSystemState_st {
|
|
unsigned int environment;
|
|
unsigned int ccFeature;
|
|
unsigned int devToolsMode;
|
|
} nvmlConfComputeSystemState_t;
|
|
|
|
/**
|
|
* Confidential Compute Multigpu mode values
|
|
*/
|
|
#define NVML_CC_SYSTEM_MULTIGPU_NONE 0
|
|
#define NVML_CC_SYSTEM_MULTIGPU_PROTECTED_PCIE 1
|
|
#define NVML_CC_SYSTEM_MULTIGPU_NVLE 2
|
|
|
|
/**
|
|
* Confidential Compute System settings
|
|
*/
|
|
typedef struct {
|
|
unsigned int version;
|
|
unsigned int environment;
|
|
unsigned int ccFeature;
|
|
unsigned int devToolsMode;
|
|
unsigned int multiGpuMode;
|
|
} nvmlSystemConfComputeSettings_v1_t;
|
|
|
|
typedef nvmlSystemConfComputeSettings_v1_t nvmlSystemConfComputeSettings_t;
|
|
#define nvmlSystemConfComputeSettings_v1 NVML_STRUCT_VERSION(SystemConfComputeSettings, 1)
|
|
|
|
/* End of nvml.h */
|
|
#endif // NCCL_NVML_DIRECT
|
|
|
|
constexpr int ncclNvmlMaxDevices = 32;
|
|
struct ncclNvmlDeviceInfo {
|
|
nvmlDevice_t handle;
|
|
int computeCapabilityMajor, computeCapabilityMinor;
|
|
};
|
|
struct ncclNvmlDevicePairInfo {
|
|
nvmlGpuP2PStatus_t p2pStatusRead, p2pStatusWrite;
|
|
};
|
|
extern int ncclNvmlDeviceCount;
|
|
extern ncclNvmlDeviceInfo ncclNvmlDevices[ncclNvmlMaxDevices];
|
|
extern ncclNvmlDevicePairInfo ncclNvmlDevicePairs[ncclNvmlMaxDevices][ncclNvmlMaxDevices];
|
|
|
|
struct ncclNvmlCCStatus {
|
|
bool CCEnabled;
|
|
bool multiGpuProtectedPCIE;
|
|
bool multiGpuNVLE;
|
|
};
|
|
|
|
// All ncclNvmlFoo() functions call ncclNvmlEnsureInitialized() implicitly.
|
|
// Outsiders need only call it if they want to inspect the ncclNvml global
|
|
// tables above.
|
|
ncclResult_t ncclNvmlEnsureInitialized();
|
|
|
|
ncclResult_t ncclNvmlDeviceGetHandleByPciBusId(const char* pciBusId, nvmlDevice_t* device);
|
|
ncclResult_t ncclNvmlDeviceGetIndex(nvmlDevice_t device, unsigned* index);
|
|
ncclResult_t ncclNvmlDeviceGetHandleByIndex(unsigned int index, nvmlDevice_t *device);
|
|
ncclResult_t ncclNvmlDeviceGetNvLinkState(nvmlDevice_t device, unsigned int link, nvmlEnableState_t *isActive);
|
|
ncclResult_t ncclNvmlDeviceGetNvLinkRemotePciInfo(nvmlDevice_t device, unsigned int link, nvmlPciInfo_t *pci);
|
|
ncclResult_t ncclNvmlDeviceGetNvLinkCapability(nvmlDevice_t device, unsigned int link, nvmlNvLinkCapability_t capability, unsigned int *capResult);
|
|
ncclResult_t ncclNvmlDeviceGetCudaComputeCapability(nvmlDevice_t device, int* major, int* minor);
|
|
ncclResult_t ncclNvmlDeviceGetP2PStatus(nvmlDevice_t device1, nvmlDevice_t device2, nvmlGpuP2PCapsIndex_t p2pIndex, nvmlGpuP2PStatus_t* p2pStatus);
|
|
ncclResult_t ncclNvmlDeviceGetFieldValues(nvmlDevice_t device, int valuesCount, nvmlFieldValue_t *values);
|
|
ncclResult_t ncclNvmlDeviceGetGpuFabricInfoV(nvmlDevice_t device, nvmlGpuFabricInfoV_t *gpuFabricInfo);
|
|
ncclResult_t ncclNvmlDeviceGetPlatformInfo(nvmlDevice_t device, nvmlPlatformInfo_t *plaformInfo);
|
|
ncclResult_t ncclNvmlGetCCStatus(struct ncclNvmlCCStatus *status);
|
|
|
|
#endif // End include guard
|