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?
Répondre
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).
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. –
dwNumberOfProcessors est le nombre de processeurs logiques, pas les cœurs. –
Vous pouvez lire la variable d'environnement NUMBER_OF_PROCESSORS.
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). –
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
Même si la question porte sur avec .NET et le vôtre avec C, les réponses de base devrait aider:
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.
- 1. Obtenir le nombre de cœurs de processeur en JavaScript?
- 2. Comment puis-je interroger le nombre de cœurs disponibles?
- 3. parallèle C# nombre de cœurs utilisés
- 4. Comment obtenir HWND dans win32?
- 5. Comment obtenir le nombre d'énumérations?
- 6. Comment obtenir le nombre d'articles dans Datagrid
- 7. Comment obtenir le nombre d'octets?
- 8. Une manière portable d'obtenir le nombre d'unités de traitement (# cpu, cœurs) dans c?
- 9. comment obtenir le nombre total de lignes
- 10. Comment obtenir le nombre de threads actifs?
- 11. Obtenir le nombre d'éléments dans un nombre de mêmes éléments
- 12. Comment faire pour obtenir le répertoire d'installation de l'API win32
- 13. à obtenir le nombre
- 14. Comment obtenir le nombre de lignes dans JDBC?
- 15. Comment obtenir le nombre de lots dans preparedstatement?
- 16. Comment obtenir le nombre de lignes affectées dans sqlalchemy?
- 17. Comment obtenir le nombre de caractères uniques dans une chaîne
- 18. Découvrez le nombre total de cœurs sur un système de cluster Win Server 2008
- 19. Obtenir le nombre d'applications dans TaskBar
- 20. MSBuild: Comment obtenir le nombre d'avertissements générés?
- 21. CoreData: comment obtenir le nombre total
- 22. Comment obtenir le nombre d'attributs d'un objet?
- 23. Gzip avec tous les cœurs
- 24. Comment obtenir le type et le nombre de contenus .zip
- 25. Win32: Comment obtenir le processus/thread qui possède un mutex?
- 26. obtenir le nom du processus de l'ID de processus (win32)
- 27. Comment obtenir odbcexception nombre
- 28. Obtenir le nombre de sms non lus
- 29. Obtenir l'élément sélectionné dans ListView win32 API
- 30. Facebook Credits: Obtenir le nombre de crédits
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. –
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
copie exacte: [uni processeur ou multiprocesseur] (http://stackoverflow.com/questions/1699641/uniprocessor-or-multiprocessor/1700095#1700095) – Vijay