diff --git a/projects/clr/hipamd/src/hip_device_runtime.cpp b/projects/clr/hipamd/src/hip_device_runtime.cpp index a735d2039a..c453820f66 100644 --- a/projects/clr/hipamd/src/hip_device_runtime.cpp +++ b/projects/clr/hipamd/src/hip_device_runtime.cpp @@ -462,10 +462,12 @@ hipError_t hipDeviceGetByPCIBusId(int* device, const char* pciBusIdstr) { int pciBusID = -1; int pciDeviceID = -1; int pciDomainID = -1; + int pciFunction = -1; bool found = false; - if (sscanf(pciBusIdstr, "%04x:%02x:%02x", reinterpret_cast(&pciDomainID), + if (sscanf(pciBusIdstr, "%04x:%02x:%02x.%01x", reinterpret_cast(&pciDomainID), reinterpret_cast(&pciBusID), - reinterpret_cast(&pciDeviceID)) == 0x3) { + reinterpret_cast(&pciDeviceID), + reinterpret_cast(&pciFunction)) == 0x4) { int count = 0; HIP_RETURN_ONFAIL(ihipDeviceGetCount(&count)); for (cl_int i = 0; i < count; i++) { @@ -473,9 +475,11 @@ hipError_t hipDeviceGetByPCIBusId(int* device, const char* pciBusIdstr) { hipDeviceProp_tR0600 prop; HIP_RETURN_ONFAIL(ihipDeviceGet(&dev, i)); HIP_RETURN_ONFAIL(ihipGetDeviceProperties(&prop, dev)); + auto* deviceHandle = g_devices[dev]->devices()[0]; if ((pciBusID == prop.pciBusID) && (pciDomainID == prop.pciDomainID) && - (pciDeviceID == prop.pciDeviceID)) { + (pciDeviceID == prop.pciDeviceID) && + (pciFunction == deviceHandle->info().deviceTopology_.pcie.function)) { *device = i; found = true; break; diff --git a/projects/clr/rocclr/device/rocm/rocdevice.cpp b/projects/clr/rocclr/device/rocm/rocdevice.cpp index 05e7ff169d..57438e6f1f 100644 --- a/projects/clr/rocclr/device/rocm/rocdevice.cpp +++ b/projects/clr/rocclr/device/rocm/rocdevice.cpp @@ -3356,7 +3356,7 @@ bool Device::findLinkInfo(const hsa_amd_memory_pool_t& pool, distance += link_info[hop_idx].numa_distance; } uint32_t oneHopDistance - = (link_info[0].link_type == HSA_AMD_LINK_INFO_TYPE_XGMI) ? 15 : 20; + = (link_info[0].link_type == HSA_AMD_LINK_INFO_TYPE_XGMI) ? 13 : 20; link_attr.second = static_cast(distance/oneHopDistance); break; }