Merge remote-tracking branch 'nccl/v2.19' into develop
This commit is contained in:
+41
-2
@@ -257,13 +257,17 @@ ncclResult_t ncclTopoXmlLoadNvlink(FILE* file, struct ncclXml* xml, struct ncclX
|
||||
return ncclSuccess;
|
||||
}
|
||||
|
||||
ncclResult_t ncclTopoXmlLoadC2c(FILE* file, struct ncclXml* xml, struct ncclXmlNode* head) {
|
||||
NCCLCHECK(xmlLoadSub(file, xml, head, NULL, 0));
|
||||
return ncclSuccess;
|
||||
}
|
||||
ncclResult_t ncclTopoXmlLoadGpu(FILE* file, struct ncclXml* xml, struct ncclXmlNode* head) {
|
||||
#if defined(__HIP_PLATFORM_HCC__) || defined(__HCC__) || defined(__HIPCC__)
|
||||
struct xmlHandler handlers[] = { { "xgmi", ncclTopoXmlLoadNvlink } };
|
||||
#else
|
||||
struct xmlHandler handlers[] = { { "nvlink", ncclTopoXmlLoadNvlink } };
|
||||
struct xmlHandler handlers[] = { { "nvlink", ncclTopoXmlLoadNvlink }, { "c2c", ncclTopoXmlLoadC2c } };
|
||||
#endif
|
||||
NCCLCHECK(xmlLoadSub(file, xml, head, handlers, 1));
|
||||
NCCLCHECK(xmlLoadSub(file, xml, head, handlers, 2));
|
||||
return ncclSuccess;
|
||||
}
|
||||
|
||||
@@ -751,6 +755,41 @@ ncclResult_t ncclTopoGetXmlFromGpu(struct ncclXmlNode* pciNode, uint32_t rocmDev
|
||||
}
|
||||
#endif
|
||||
}
|
||||
#if CUDART_VERSION >= 11080
|
||||
struct ncclXmlNode* c2cNode = NULL;
|
||||
NCCLCHECK(xmlGetSub(gpuNode, "c2c", &c2cNode));
|
||||
if (c2cNode == NULL) {
|
||||
if (sm >= 90) {
|
||||
int c2cLinksCount = 0;
|
||||
nvmlFieldValue_t fv;
|
||||
fv.fieldId = NVML_FI_DEV_C2C_LINK_COUNT;
|
||||
if ((ncclNvmlDeviceGetFieldValues(nvmlDev, 1, &fv) == ncclSuccess) && (fv.nvmlReturn == NVML_SUCCESS)) {
|
||||
c2cLinksCount = fv.value.uiVal;
|
||||
int bw = 0;
|
||||
int count = 0;
|
||||
for (int l=0; l<c2cLinksCount; l++) {
|
||||
nvmlFieldValue_t fvs[2];
|
||||
fvs[0].fieldId = NVML_FI_DEV_C2C_LINK_GET_STATUS;
|
||||
fvs[0].scopeId = l;
|
||||
fvs[1].fieldId = NVML_FI_DEV_C2C_LINK_GET_MAX_BW;
|
||||
fvs[1].scopeId = l;
|
||||
if ((ncclNvmlDeviceGetFieldValues(nvmlDev, 2, fvs) == ncclSuccess) &&
|
||||
(fvs[0].nvmlReturn == NVML_SUCCESS) &&
|
||||
(fvs[0].value.uiVal == 1) &&
|
||||
(fvs[1].nvmlReturn == NVML_SUCCESS)) {
|
||||
bw = fvs[1].value.uiVal;
|
||||
count++;
|
||||
}
|
||||
}
|
||||
if (count > 0) {
|
||||
NCCLCHECK(xmlAddNode(xml, gpuNode, "c2c", &c2cNode));
|
||||
NCCLCHECK(xmlSetAttrInt(c2cNode, "bw", bw));
|
||||
NCCLCHECK(xmlSetAttrInt(c2cNode, "count", count));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
// Fill target classes
|
||||
for (int s=0; s<gpuNode->nSubs; s++) {
|
||||
struct ncclXmlNode* sub = gpuNode->subs[s];
|
||||
|
||||
Reference in New Issue
Block a user