2010-04-04 10 views
6

मुझे यह पता लगाने के लिए एक विश्वसनीय तरीका चाहिए कि कंप्यूटर पर कितने CPU कोर हैं। मैं संख्यात्मक रूप से तीव्र अनुकरण सी # अनुप्रयोग बना रहा हूं और कोर के रूप में चलने वाले धागे की अधिकतम संख्या बनाना चाहता हूं। मैंने इंटरनेट के आसपास सुझाए गए कई तरीकों की कोशिश की है जैसे पर्यावरण। प्रोसेसर काउंटर, डब्लूएमआई का उपयोग करके, यह कोड: http://blogs.adamsoftware.net/Engine/DeterminingthenumberofphysicalCPUsonWindows.aspx उनमें से कोई भी नहीं लगता कि एएमडी एक्स 2 में दो कोर हैं। कोई विचार?क्या सीपीयू कोर की कुल संख्या को विश्वसनीय रूप से पहचानने का कोई तरीका है?

संपादित करें: ऐसा प्रतीत होता है कि पर्यावरण। प्रोसेसर काउंटर सही संख्या लौटा रहा है। यह इंटेल सीपीयू पर हाइपरथ्रेडिंग के साथ है जो गलत नंबर लौटा रहा है। हाइपरथ्रेडिंग के साथ एक सिग्नल कोर 2 लौटा रहा है, जब यह केवल 1 होना चाहिए।

+0

आपका लिंक एटीएम पर काम नहीं कर रहा है ... – ChristopheD

+0

Taskmgr.exe, प्रदर्शन टैब में आप कितने प्रोसेसर देखते हैं? –

+0

लिंक दूसरे दिन काम कर रहा था। –

उत्तर

6

जो मैं बता सकता हूं, Environment.ProcessorCount WOW64 के तहत चलते समय एक गलत मान लौटा सकता है (64-बिट ओएस पर 32-बिट प्रक्रिया के रूप में) क्योंकि पी/हस्ताक्षर हस्ताक्षर यह GetNativeSystemInfo के बजाय GetSystemInfo उपयोग पर निर्भर करता है। यह एक स्पष्ट समस्या जैसा लगता है, इसलिए मुझे यकीन नहीं है कि यह इस बिंदु से क्यों हल नहीं किया गया होगा।

इस प्रयास करें और देखें कि क्या इससे समस्या का समाधान:

private static class NativeMethods 
{ 
    [StructLayout(LayoutKind.Sequential)] 
    internal struct SYSTEM_INFO 
    { 
     public ushort wProcessorArchitecture; 
     public ushort wReserved; 
     public uint dwPageSize; 
     public IntPtr lpMinimumApplicationAddress; 
     public IntPtr lpMaximumApplicationAddress; 
     public UIntPtr dwActiveProcessorMask; 
     public uint dwNumberOfProcessors; 
     public uint dwProcessorType; 
     public uint dwAllocationGranularity; 
     public ushort wProcessorLevel; 
     public ushort wProcessorRevision; 
    } 

    [DllImport("kernel32.dll", CharSet = CharSet.Auto, ExactSpelling = true)] 
    internal static extern void GetNativeSystemInfo(ref SYSTEM_INFO lpSystemInfo); 
} 

public static int ProcessorCount 
{ 
    get 
    { 
     NativeMethods.SYSTEM_INFO lpSystemInfo = new NativeMethods.SYSTEM_INFO(); 
     NativeMethods.GetNativeSystemInfo(ref lpSystemInfo); 
     return (int)lpSystemInfo.dwNumberOfProcessors; 
    } 
} 
-1

आप NUMBER_OF_PROCESSORS वातावरण चर जांच की है?

+0

यह मेरे i7 पर 8 दिखाता है, इसलिए वहां हाइपरथ्रेडिंग कोर गिना जाता है –

2

आपको सही प्रोसेसर गिनती मिल रही है, एएमडी एक्स 2 एक वास्तविक बहु-कोर प्रोसेसर है। इंटेल हाइपरथ्रेडेड कोर को विंडोज द्वारा म्यूट-कोर सीपीयू के रूप में माना जाता है। आप यह पता लगा सकते हैं कि हाइपरथ्रेडिंग का उपयोग WMI, Win32_Processor, संख्याऑफकोर बनाम संख्याऑफ्लोगिकल प्रोसेसर के साथ किया जाता है या नहीं।

संबंधित मुद्दे