blob: d0245fe545221d8010ee9feb5366b845cbcea6f0 [file] [log] [blame]
#include <c10d/NCCLUtils.hpp>
#include <mutex>
namespace c10d {
std::string getNcclVersion() {
static std::once_flag ncclGetVersionFlag;
static std::string versionString;
std::call_once(ncclGetVersionFlag, []() {
int version;
ncclResult_t status = ncclGetVersion(&version);
// can't compute the version if call did not return successfully or version
// code < 100 (corresponding to 0.1.0)
if (status != ncclSuccess || version < 100) {
versionString = "Unknown NCCL version";
} else {
auto ncclMajor = version / 1000;
auto ncclMinor = (version % 1000) / 100;
auto ncclPatch = version % (ncclMajor * 1000 + ncclMinor * 100);
versionString = std::to_string(ncclMajor) + "." +
std::to_string(ncclMinor) + "." + std::to_string(ncclPatch);
}
});
return versionString;
}
std::string ncclGetErrorWithVersion(ncclResult_t error) {
return std::string(ncclGetErrorString(error)) + ", NCCL version " +
getNcclVersion();
}
} // namespace c10d