J'écris un programme en C sous Windows qui doit exécuter autant de threads que les noyaux disponibles. Mais je ne sais pas comment obtenir le nombre de cœurs. Des idées? P>
5 Réponses :
Vous pouvez appeler le getSysteminfo code >
fonction Winapi; Il renvoie un System_Info CODE> STRIT, qui comporte le nombre de processeurs (qui correspond au nombre de cœurs sur un système avec plusieurs processeurs centraux). P>
Qu'en est-il des systèmes avec plusieurs processeurs multi-coreaux? Je suis à peu près sûr que Windows explore ce détail quelque part, bien que je ne sache pas si cela compte ici.
DwnumberofProcesseurs est le nombre de processeurs logiques, pas de noyaux.
Ceci est limité à 32 Systèmes 32 bits et 64 sur des systèmes 64 bits, car il ne renvoie que le nombre de processeurs dans le groupe de processeur actuel. Sur les systèmes avec plus de noyaux que cela, il ne retournera pas la valeur correcte. Il ne renvoie également pas la valeur correcte des processus 32 bits exécutés sous WOW64.
Vous pouvez lire numéro_of_processors variable d'environnement. P>
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 pourrait être modifiée par quelque chose d'autre avant d'exécuter votre programme).
Selon le but de la question, cela pourrait être la meilleure réponse. Si vous souhaitez savoir comment le nombre de noyaux de décider combien de threads à démarrer, cette variable d'environnement doit être prise en compte, car un parent sur un noyau quadride pourrait commencer à traiter et transmettre les deux une valeur de 2 au lieu de 4. i Réfléchissez à 90% de tous les cas, c'est exactement ce qui est recherché (si les développeurs ne réalisent que pour que seuls les pools de fil du système d'exploitation du système complet contrôlé par le système d'exploitation devraient être utilisés, peut-être de 5 à 10 ans. Les programmeurs sont retardés).
Même si la question concerne .NET et les vôtres avec C, les réponses de base devraient aider: p>
Tapez "cmd" sur le démarrage de Windows et ouvrez "cmd.exe". Maintenant, tapez la commande suivante:
WMIC CPU Get /Format:List
As @ Changming-Sun mentionné dans un commentaire ci-dessus, GetSInfo renvoie le nombre de processeurs logiques, ce qui n'est pas toujours identique au nombre de cœurs de processeur. Sur des machines prenant en charge HyperThreading (y compris la plupart des processeurs Intel modernes) Plus d'un thread peut fonctionner sur le même noyau (techniquement, plusieurs threads auront le contexte de fil chargé sur le même noyau). Obtenir le nombre de cœurs de processeur nécessite un appel à GetLogicalProcessorInformation et un peu de travail de codage. Fondamentalement, vous récupérez une liste des entrées System_Logical_Processor_Information, et vous devez compter le nombre d'entrées avec RelationProcessorcore Set. Un bon exemple de la manière de coder cela dans la documentation GetLogicalProcessorInformation fournie par Microsoft: https://docs.microsoft.com/ EN-US / WINDOWS / WIN32 / API / SYSINFOAPI / NF-SYSINFOAPI-GETLOGICALPROCESSORINFormation P>
Comme c'est souvent le cas, "Comment obtenir le nombre de noyaux dans Windows / Utilisation de Windows API" est un meilleur titre que "Comment obtenir le nombre de noyaux en C". Cela dépend des API (et de la plate-forme) disponibles et non du langage de programmation.
Dupliqué exact: Uni processeur ou multi-processeur
Pour les informations portables, voir également: Trouvez par programme le nombre de noyaux sur une machine .
@ADCDEFG qui est pour UNIX PAS WIN32.