मैंने देखा है कि यदि मैं BIOS में हाइपर-थ्रेडिंग अक्षम करता हूं तो मेरी कई बहु-थ्रेडेड गणनाएं तेजी से चलती हैं।हाइपरथ्रेडिंग बनाम प्रोसेसरएफ़िनिटी को बदलना अक्षम करें?
मैं भी सीख लिया है कि मैं प्रोग्राम के रूप में निष्क्रिय कर सकते हैं (तार्किक) CPU: मौजूदा प्रक्रिया के लिए प्रोसेसर आत्मीयता को संशोधित करके, इस तरह सी # में उदाहरण के लिए:
// using System.Diagnostics;
var current = Process.GetCurrentProcess();
var affinity = current.ProcessorAffinity.ToInt32();
current.ProcessorAffinity = new IntPtr(affinity & 0x5555);
कम से कम एक प्रदर्शन बिंदु से देखने के लिए, प्रोसेसर एफ़िनिटी को बदलकर हर दूसरे (लॉजिकल) सीपीयू को अक्षम करने से ही हाइपरथ्रेडिंग को अक्षम करने के समान प्रभाव पड़ता है?
हम्म, मुख्य मुद्दा यह है: क्या आप अपने देव मशीन को अपने सॉफ़्टवेयर के साथ शिप करने जा रहे हैं? –
एक और विचार ऑपरेटिंग सिस्टम प्रक्रियाओं हो सकता है। यदि आप BIOS में हाइपरथ्रेडिंग अक्षम करते हैं और आपका सॉफ़्टवेयर सभी कोर का उपयोग करने का प्रयास करता है, तो जब एक ऑपरेटिंग सिस्टम (या अन्य पृष्ठभूमि) प्रक्रिया चलाने की कोशिश करती है, तो यह प्रोसेसर एक्सेस के लिए आपके सॉफ़्टवेयर के साथ प्रतिस्पर्धा करेगी। सर्वोत्तम शर्त केवल दोनों विकल्पों को आज़माकर बेंचमार्क करना और प्रक्रिया के समय में आपको क्या अंतर मिलते हैं; अंतर हाइपरथ्रेडिंग को अक्षम करने की आसानी के लिए अनुमति देने के लिए अपरिहार्य हो सकता है। नोट: यदि आपके पास हार्डवेयर नियंत्रण नहीं है, तो एएमडी प्रोसेसर की जांच करें जिनके पास हाइपरथ्रेडिंग के बिना समर्पित कोर हैं। –
धन्यवाद, क्रिस, एक बहुत ही उपयोगी उत्तर। मैं यह देखने के लिए कुछ और बेंचमार्किंग करूँगा कि कोई भी विकल्प नियमित उपयोगकर्ता वातावरण में एक वास्तविक अंतर करेगा या नहीं। –