GNU/Linux >> Tutoriels Linux >  >> Linux

Comment pouvez-vous trouver le numéro de processeur sur lequel un thread s'exécute ?

Pour XP, un petit coup de google me révèle ceci :

https://www.cs.tcd.ie/Jeremy.Jones/GetCurrentProcessorNumberXP.htm Est-ce que cela aide ?


Si tout ce que vous voulez faire est d'éviter les conflits, vous n'avez pas besoin de connaître le processeur actuel. Vous pouvez simplement choisir un tas au hasard. Ou vous pourriez avoir un tas par thread. Bien que vous puissiez obtenir plus ou moins de conflits de cette façon, vous éviterez la surcharge d'interrogation du processeur actuel, qui peut être significative ou non. Consultez également le scalable_allocator d'Intel Thread Building Block, qui a peut-être déjà résolu ce problème mieux que vous.


À partir de la sortie de 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)

Malheureusement, ceci est spécifique à Linux. Je doute qu'il existe un moyen portable de le faire.


En plus de la réponse d'Antony Vennard et du code sur le site cité, voici un code qui fonctionnera également pour Visual C++ x64 (pas d'assembleur en ligne) :

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;
}

Un bref aperçu de l'implémentation de GetCurrentProcessorNumber() sur Win7 x64 montre qu'ils utilisent un mécanisme différent pour obtenir le numéro de processeur, mais dans mes (quelques) tests, les résultats étaient les mêmes pour mon brassage maison et la fonction officielle.


Linux
  1. Comment pouvez-vous déterminer les versions installées des bibliothèques glibc ?

  2. L'ID de thread d'un processus multithread peut-il être le même que l'ID de processus d'un autre processus en cours d'exécution ?

  3. Comment puis-je compter le nombre de caractères dans une variable Bash

  4. Comment puis-je connaître le chemin absolu d'un processus en cours d'exécution ?

  5. Comment puis-je trouver le fichier le plus ancien dans une arborescence de répertoires

Comment trouver le numéro de port d'un service sous Linux

Comment trouver le nombre de cœurs de processeur à partir de la ligne de commande sous Linux

Comment trouver les 10 principaux processus en cours d'exécution par utilisation de la mémoire et du processeur

Comment trouver des informations sur le processeur sous Linux à l'aide de la ligne de commande

Comment trouver l'utilisation du processeur, ce qui fait que le système se bloque

Comment trouver la version de Linux que vous utilisez