2012-06-07 12 views
7

मैंने देखा है कि यदि मैं BIOS में हाइपर-थ्रेडिंग अक्षम करता हूं तो मेरी कई बहु-थ्रेडेड गणनाएं तेजी से चलती हैं।हाइपरथ्रेडिंग बनाम प्रोसेसरएफ़िनिटी को बदलना अक्षम करें?

मैं भी सीख लिया है कि मैं प्रोग्राम के रूप में निष्क्रिय कर सकते हैं (तार्किक) CPU: मौजूदा प्रक्रिया के लिए प्रोसेसर आत्मीयता को संशोधित करके, इस तरह सी # में उदाहरण के लिए:

// using System.Diagnostics; 
var current = Process.GetCurrentProcess(); 
var affinity = current.ProcessorAffinity.ToInt32(); 
current.ProcessorAffinity = new IntPtr(affinity & 0x5555); 

कम से कम एक प्रदर्शन बिंदु से देखने के लिए, प्रोसेसर एफ़िनिटी को बदलकर हर दूसरे (लॉजिकल) सीपीयू को अक्षम करने से ही हाइपरथ्रेडिंग को अक्षम करने के समान प्रभाव पड़ता है?

+1

हम्म, मुख्य मुद्दा यह है: क्या आप अपने देव मशीन को अपने सॉफ़्टवेयर के साथ शिप करने जा रहे हैं? –

+2

एक और विचार ऑपरेटिंग सिस्टम प्रक्रियाओं हो सकता है। यदि आप BIOS में हाइपरथ्रेडिंग अक्षम करते हैं और आपका सॉफ़्टवेयर सभी कोर का उपयोग करने का प्रयास करता है, तो जब एक ऑपरेटिंग सिस्टम (या अन्य पृष्ठभूमि) प्रक्रिया चलाने की कोशिश करती है, तो यह प्रोसेसर एक्सेस के लिए आपके सॉफ़्टवेयर के साथ प्रतिस्पर्धा करेगी। सर्वोत्तम शर्त केवल दोनों विकल्पों को आज़माकर बेंचमार्क करना और प्रक्रिया के समय में आपको क्या अंतर मिलते हैं; अंतर हाइपरथ्रेडिंग को अक्षम करने की आसानी के लिए अनुमति देने के लिए अपरिहार्य हो सकता है। नोट: यदि आपके पास हार्डवेयर नियंत्रण नहीं है, तो एएमडी प्रोसेसर की जांच करें जिनके पास हाइपरथ्रेडिंग के बिना समर्पित कोर हैं। –

+0

धन्यवाद, क्रिस, एक बहुत ही उपयोगी उत्तर। मैं यह देखने के लिए कुछ और बेंचमार्किंग करूँगा कि कोई भी विकल्प नियमित उपयोगकर्ता वातावरण में एक वास्तविक अंतर करेगा या नहीं। –

उत्तर

2

आप NUMA एपीआई का उपयोग करने का प्रयास कर सकते हैं, या सीपीयूआईडी निर्देश के साथ मैन्युअल रूप से सीपीयू टोपोलॉजी खोज सकते हैं ... लेकिन IMHO सबसे अच्छा समाधान कुछ सैन डिफ़ॉल्ट कर रहा है, और अंत उपयोगकर्ता को थ्रेडिंग सेटिंग्स को ट्वीक करने दें। जब तक आपके पास कोई विशिष्ट हार्डवेयर लक्ष्य न हो, तब तक संभावित परिदृश्यों का एक उचित amou टी है - लॉजिकल बनाम भौतिक कोर, हाइपर-थ्रेडिंग या नहीं, एकल-बनाम बहु-सॉकेट सिस्टम, कैश और मेमोरी टोपोलॉजी।

+0

धन्यवाद, snemarch। [NUMA] (http://en.wikipedia.org/wiki/Non-Uniform_Memory_Access) के बारे में जानना दिलचस्प है, यह मेरे लिए नया था। आप निश्चित रूप से सही हैं, सामान्य समाधान प्रदान करना संभव है और अंत उपयोगकर्ता को प्रदर्शन tweaking छोड़ दें। हालांकि, एक मूल बिंदु से, क्या आप कहेंगे कि _is_ नहीं मेरे मूल प्रश्न का उत्तर "हाँ या नहीं"? –

+0

यह आपके कोड की प्रकृति के साथ-साथ हार्डवेयर पर चलता है :) - यदि आपका कोड निष्पादन इकाइयों के लिए लड़ता है, तो एचटी कोर पर नहीं चल रहा है (जो * आवश्यक नहीं है * हर 2 होना चाहिए) मदद कर सकता है । लेकिन पी 4, कोर 2 और एएमडी क्या कर रहे हैं के बीच काफी अंतर है। – snemarch

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