GNU/Linux >> Znalost Linux >  >> Linux

Jak můžete zjistit číslo procesoru, na kterém běží vlákno?

Pro XP, rychlé googlování odhalilo toto:

https://www.cs.tcd.ie/Jeremy.Jones/GetCurrentProcessorNumberXP.htm Pomůže to?


Pokud vše, co chcete udělat, je vyhnout se sporům, nepotřebujete znát aktuální CPU. Mohli jste si náhodně vybrat hromadu. Nebo můžete mít hromadu na vlákno. I když tímto způsobem můžete získat více či méně sporů, vyhnete se režii dotazování aktuálního CPU, což může, ale nemusí být významné. Podívejte se také na scalable_allocator Intel Thread Building Block, který už možná tento problém vyřešil lépe než vy.


Z výstupu 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)

Bohužel je to specifické pro Linux. Pochybuji, že existuje přenosný způsob, jak to udělat.


Kromě odpovědi Antonyho Vennarda a kódu na citovaném webu je zde kód, který bude fungovat také pro Visual C++ x64 (žádný 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;
}

Krátký pohled na implementaci GetCurrentProcessorNumber() na Win7 x64 ukazuje, že používají jiný mechanismus k získání čísla procesoru, ale v mých (několika) testech byly výsledky stejné pro mou domácí i oficiální funkci.


Linux
  1. Jak najít nejběžnější procesy podle využití paměti a CPU

  2. Jak zjistit počet vertikálních linek dostupných v terminálu?

  3. Jak zjistit počet soketů CPU v systému CentOS/RHEL

  1. Jak mohu najít verzi Fedory, kterou používám?

  2. Jak zjistím, ve kterém jádru CPU běží vlákno?

  3. Jak zjistím počet uživatelů online v Linuxu?

  1. Jak můžete určit nainstalované verze knihoven glibc?

  2. Jak mohu spočítat počet složek na jednotce pomocí Linuxu?

  3. Jak mohu nastavit afinitu procesoru k procesu v systému Linux?