port: updated PhysicalCoreID()

Summary: Checked the return value of __get_cpuid(). Implemented the else case where the arch is different from i386 and x86_64.

Pulled By: ajkr

Differential Revision: D4973496

fbshipit-source-id: c40fdef5840364c2a79b1d11df0db5d4ec3d6a4a
This commit is contained in:
Jos Collin 2017-05-03 12:48:23 -07:00 committed by Facebook Github Bot
parent b551104e04
commit 60847a3b08
1 changed files with 10 additions and 3 deletions

View File

@ -142,11 +142,18 @@ int PhysicalCoreID() {
// if you ever find that this function is hot on Linux, you can go from
// ~200 nanos to ~20 nanos by adding the machinery to use __vdso_getcpu
unsigned eax, ebx = 0, ecx, edx;
__get_cpuid(1, &eax, &ebx, &ecx, &edx);
if (!__get_cpuid(1, &eax, &ebx, &ecx, &edx)) {
return -1;
}
return ebx >> 24;
#else
// getcpu or sched_getcpu could work here
return -1;
int cpuno = sched_getcpu();
if (cpuno < 0) {
return -1;
}
else {
return cpuno;
}
#endif
}