GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie können Sie die Prozessornummer finden, auf der ein Thread läuft?

Für XP ergab eine schnelle Google-Suche Folgendes:

https://www.cs.tcd.ie/Jeremy.Jones/GetCurrentProcessorNumberXP.htm Hilft das?


Wenn Sie lediglich Konflikte vermeiden möchten, müssen Sie die aktuelle CPU nicht kennen. Sie könnten einfach zufällig einen Haufen auswählen. Oder Sie könnten einen Haufen pro Thread haben. Obwohl Sie auf diese Weise mehr oder weniger Konflikte bekommen können, würden Sie den Overhead des Abfragens der aktuellen CPU vermeiden, der erheblich sein kann oder auch nicht. Sehen Sie sich auch den Scalable_allocator des Intel Thread Building Blocks an, der dieses Problem möglicherweise bereits besser gelöst hat, als Sie es wollen.


Aus der Ausgabe von man sched_getcpu :

NAME
       sched_getcpu - determine CPU on which the calling thread is running

SYNOPSIS
       #define _GNU_SOURCE
       #include <utmpx.h>

       int sched_getcpu(void);

DESCRIPTION
   sched_getcpu() returns the number of the CPU
   on which the calling thread is currently executing.

RETURN VALUE
   On success, sched_getcpu() returns a non-negative CPU number.
   On error, -1 is returned and errno is set to indicate the error.

SEE ALSO
   getcpu(2)

Leider ist dies Linux-spezifisch. Ich bezweifle, dass es dafür einen portablen Weg gibt.


Zusätzlich zu Antony Vennards Antwort und dem Code auf der zitierten Seite ist hier Code, der auch für Visual C++ x64 funktioniert (kein Inline-Assembler):

DWORD GetCurrentProcessorNumberXP() {
   int CPUInfo[4];   
   __cpuid(CPUInfo, 1);
   // CPUInfo[1] is EBX, bits 24-31 are APIC ID
   if ((CPUInfo[3] & (1 << 9)) == 0) return -1;  // no APIC on chip
   return (unsigned)CPUInfo[1] >> 24;
}

Ein kurzer Blick auf die Implementierung von GetCurrentProcessorNumber() auf Win7 x64 zeigt, dass sie einen anderen Mechanismus verwenden, um die Prozessornummer zu erhalten, aber in meinen (wenigen) Tests waren die Ergebnisse für meine selbstgebaute und die offizielle Funktion gleich. P>

Linux
  1. So finden Sie die Anzahl der CPU-Sockets auf einem CentOS/RHEL-System

  2. Wie können Sie installierte Versionen der glibc-Bibliotheken ermitteln?

  3. Wie kann ich sehen, in welchem ​​CPU-Kern ein Thread läuft?

  4. Kann die Thread-ID eines Multithread-Prozesses mit der Prozess-ID eines anderen laufenden Prozesses identisch sein?

  5. Wie kann ich den absoluten Pfad eines laufenden Prozesses erfahren?

So finden Sie die Portnummer eines Dienstes in Linux

So finden Sie die Anzahl der CPU-Kerne über die Befehlszeile in Linux

So finden Sie die Top 10 der laufenden Prozesse nach Speicher- und CPU-Auslastung

So finden Sie CPU-Informationen in Linux über die Befehlszeile

Wie man die CPU-Auslastung findet, was das System zum Hängen bringt

So finden Sie heraus, welche Linux-Version Sie ausführen