2009-11-30 2 views
0

Je sais comment obtenir le type de processeur, peut-être que c'est le seul moyen, mais je cherche un moyen de déterminer à partir d'une application si elle fonctionne sur un processeur multi-core ou sur un single-threading processeur principal. (Background: les hébergeurs de certains de mes clients sont très vagues sur les ressources qu'ils mettent à disposition via les images VMWare.) Cette application est supposée fonctionner sur plusieurs cœurs, mais a connu des performances préjudiciables depuis son dernier "move" Normalement, sur un multicœur, un noyau de pointe sur un thread, et pas l'autre.Pour ce "multi-core", les deux processeurs dopent, même sur des applications monothread.)Comment puis-je déterminer par programme si multi-core, hyperthreading ou multi-processeur?

Répondre

4

System.Environment.ProcessorCount comprendra également les processeurs hyperthreaded. Quel Vmware peut ou ne peut pas exposer. Les chances sont plus élevées qu'il sera exposé si le processeur est activé VT ET que vous utilisez une technologie d'hyperviseur activée par baremetal.

Si vous avez XP SP3/WIN2K3 ou au-dessus Vous pouvez utiliser WMI pour sortir:

Win32_ComputerSystem.NumberOfProcessors returns physical count 

Win32_ComputerSystem.NumberOfLogicalProcessors returns logical count 

Si les valeurs sont les mêmes, alors les chances sont que votre système ne dispose pas HT ou ne l'a pas permis .

Vous pouvez commencer à explorer comment extraire les informations WMI dans .NET à partir du this tutorial.

+0

Je connais WMI, merci. Je vais essayer ça, ça peut marcher. Aussi étrange que cela soit, taskmgr et CPU-Z donnent le même nombre de processeurs. Mais CPU-Z montre un noyau par processeur et je suis certain que le type est à l'origine (physiquement) un quadcore. Cela peut être difficile à obtenir. – Abel

+0

donner à ce regard: http://software.intel.com/en-us/articles/hyper-threading-technology-and-multi-core-processor-detection/ Je nai regardé les vidéos. Je soupçonne que vous utilisez un logiciel vmware ou une version qui n'est pas compatible VT, ou il est désactivé dans le BIOS. dans ce cas, il s'agit simplement de programmer artificiellement votre VM sur deux cœurs. –

+0

http://communities.vmware.com/docs/DOC-5101 une discussion sur l'hyperthreading et ESX si vous l'utilisez comme hyperviseur baremetal, montrant qu'ESX peut programmer des VM sur des cœurs virtuels. Il est mentionné que les cœurs virtuels ne sont pas utilisés jusqu'à ce que la demande excède les cœurs disponibles. Je me demande comment les choses fonctionneraient sur les processeurs compatibles VT, hmm. Si je me souviens bien, vous pouvez lier des machines virtuelles dans ESX à des processeurs spécifiques. –

Questions connexes