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
main
Jos Collin 8 years ago committed by Facebook Github Bot
parent b551104e04
commit 60847a3b08
  1. 13
      port/port_posix.cc

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

Loading…
Cancel
Save