Comment puis-je savoir si la machine sur laquelle mon programme s'exécute utilise l'hyperthreading ?(C#)

StackOverflow https://stackoverflow.com/questions/543039

  •  23-08-2019
  •  | 
  •  

Question

J'ai du code qui doit savoir combien de cœurs réels sont disponibles sur ma machine particulière et si l'Hyperthreading est activé ou non.

Existe-t-il un moyen de faire cela en C# ?

Mise à jour:Les machines sont un mélange de XP et Vista

Mise à jour:L'accès à « Win32_Processor.NumberOfCores » ou « Win32_Processor.NumberOfLogicalProcessors » génère une exception (une ManagmentException avec le message « Not Found ») sur l'une des machines (mais pas toutes)

Était-ce utile?

La solution

Sur Vista et versions ultérieures, vous pouvez utiliser GetLogicalProcessorInformation via PInvoke pour obtenir le nombre d'unités de processeur logique.

Sous Windows XP, il n'existe aucun moyen via C# de différencier de manière fiable l'hyper-threading des autres configurations multiprocesseurs/cœurs.La solution WMI publiée par quelqu'un classera les processeurs multicœurs comme hyper-threadés.

Avant Vista, le seul moyen fiable était de vérifier le CPUID du processeur.Pour l'utiliser, vous pouvez créer une DLL native qui peut être appelée à partir de votre code managé.Le code Intel suivant échantillon serait un bon point de départ.

Autres conseils

Réponse simple à la première question au moins : Environnement.ProcessorCount devrait renvoyer le nombre de cœurs sur la machine.

Modifier: Iciest une méthode non basée sur WMI pour vérifier si l'Hyperthreading est activé (ce n'est pas nécessairement plus agréable).Regarde aussi ce article.

System.Environment.ProcessorCount vous indiquera combien de cœurs existent sur la machine sur laquelle le code est exécuté.

Vérifiez la propriété Environment.ProcessorCount, elle renverra un entier, en ce qui concerne HyperThreading, je ne suis pas sûr.

Question StackOverflow 188503 a les informations dont vous avez besoin...

Citant la principale réponse à cette question :

System.Environment.ProcessorCount

renvoie le nombre de processeurs logiques (voir MSDN)

Pour faire la distinction entre les cœurs Hyperthreaded et séparés, cela donne l'impression que vous avez besoin d'un peu de WMI.

GetLogicalProcessorInformation est suffisant pour l'aspect HT mais malheureusement il n'est disponible que dans XP SP3, 64bit XP/Vista/Server 2003 (et je crois qu'il est légèrement cassé avant Vista)

Joe Duffy enveloppé cela en c# mais n'a pas encore publié la source, bien que Mark Russinovich ait publié l'outil (Coreinfo) qu'il a créé avec, vous pouvez probablement le décompiler pour voir le code.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top