2010-04-11 2 views
3

J'écris un programme en C sur Windows qui doit exécuter autant de threads que de cœurs disponibles. Mais je ne sais pas comment obtenir le nombre de cœurs. Des idées?Comment obtenir le nombre de cœurs dans Win32?

+3

Comme souvent, "Comment obtenir le nombre de cœurs dans WINDOWS/using Windows API" est un meilleur titre que "Comment obtenir le nombre de cœurs dans C". Cela dépend des API disponibles (et de la plateforme), pas du langage de programmation. –

+0

Pour les informations sur le portable, voir également: [Recherche par programme le nombre de cœurs sur une machine] (http://stackoverflow.com/q/150355/269126). – Lumi

+0

copie exacte: [uni processeur ou multiprocesseur] (http://stackoverflow.com/questions/1699641/uniprocessor-or-multiprocessor/1700095#1700095) – Vijay

Répondre

6

Vous pouvez appeler la fonction WinAPI GetSystemInfo; il renvoie une struct SYSTEM_INFO, qui a le nombre de processeurs (qui est le nombre de cœurs sur un système avec plusieurs processeurs principaux).

+0

Qu'en est-il des systèmes avec plusieurs processeurs multi-cœurs? Je suis à peu près certain que Windows se concentre sur ce détail quelque part, même si je ne sais pas si c'est important ici. –

+0

dwNumberOfProcessors est le nombre de processeurs logiques, pas les cœurs. –

5

Vous pouvez lire la variable d'environnement NUMBER_OF_PROCESSORS.

+7

Il est généralement préférable d'appeler une fonction API plutôt que de s'appuyer sur une variable d'environnement secondaire (qui peut être modifiée par autre chose avant d'exécuter votre programme). –

+2

Selon le but de la question, cela pourrait être la meilleure réponse. Si vous voulez savoir comment le nombre de cœurs pour décider du nombre de threads à démarrer, alors cette variable d'environnement devrait être considérée car un parent sur un quad core pourrait commencer à traiter et lui passer une valeur de 2 au lieu de 4 Dans 90% des cas, c'est exactement ce que l'on veut (à moins que les développeurs réalisent que seuls les pools de threads contrôlés par le système d'exploitation doivent être utilisés, peut-être dans 5 à 10 ans. – Lothar

0

Tapez "cmd" au démarrage de Windows et ouvrez "cmd.exe". Maintenant, tapez la commande suivante:

WMIC CPU Get /Format:List 

Vous trouverez les entrées comme - « NumberOfCores » et « NumberOfLogicalProcessors ». Typiquement, les processeurs logiques sont obtenus par threading. Donc la relation irait typiquement comme;

NumberOfLogicalProcessors = NumberOfCores * Nombre de threads par cœur.

Étant donné que chaque cœur sert d'unité de traitement, l'unité de traitement logique est donc réalisée dans l'espace réel.

Plus d'infos here.

Questions connexes