Perform busIdToInt64 on the stack.

I noticed when I enabled `NCCL_DEBUG_SUBSYS=ALLOC` that this function is
called thousands of times, making the log output unintelligible.
Fortunately, this function can be implemented without heap allocations.
This commit is contained in:
Chris Jones 2021-11-18 14:21:05 +00:00 committed by Sylvain Jeaugey
parent 30ca3fcacf
commit 8cf7325d69

View File

@ -25,11 +25,9 @@ ncclResult_t int64ToBusId(int64_t id, char* busId) {
} }
ncclResult_t busIdToInt64(const char* busId, int64_t* id) { ncclResult_t busIdToInt64(const char* busId, int64_t* id) {
const int size = strlen(busId); char hexStr[17]; // Longest possible int64 hex string + null terminator.
char* hexStr;
NCCLCHECK(ncclCalloc(&hexStr, size));
int hexOffset = 0; int hexOffset = 0;
for (int i=0; i<size; i++) { for (int i = 0; hexOffset < sizeof(hexStr) - 1; i++) {
char c = busId[i]; char c = busId[i];
if (c == '.' || c == ':') continue; if (c == '.' || c == ':') continue;
if ((c >= '0' && c <= '9') || if ((c >= '0' && c <= '9') ||
@ -40,7 +38,6 @@ ncclResult_t busIdToInt64(const char* busId, int64_t* id) {
} }
hexStr[hexOffset] = '\0'; hexStr[hexOffset] = '\0';
*id = strtol(hexStr, NULL, 16); *id = strtol(hexStr, NULL, 16);
free(hexStr);
return ncclSuccess; return ncclSuccess;
} }