2010-01-06 11 views
20

कहें कि हम जितनी जल्दी हो सके एक बड़ी परियोजना (जीसीसी या लिनक्स कर्नेल कहें) संकलित करना चाहते हैं। क्या हाइपरथ्रेडिंग क्षमता वाला एक सीपीयू (इंटेल कोर i7 कहता है) हाइपरथ्रेडिंग सक्षम या अक्षम के साथ कंपाइलर को तेज़ी से चलाता है? क्या कोई प्रकाशित बेंचमार्क है जो इसका परीक्षण करता है?कंपाइलर प्रदर्शन पर हाइपरथ्रेडिंग का प्रभाव?

हाइपरथ्रेडिंग की मेरी समझ यह है कि प्रत्येक कोर दो (या अधिक प्रक्रियाओं) से निर्देशों का चयन कर सकता है। यह आमतौर पर कोर को और अधिक कुशल बनाता है क्योंकि यह कम संभावना है कि कार्यात्मक इकाइयां निष्क्रिय होंगी। हालांकि, प्रदर्शन के जुर्माना की संभावना है क्योंकि कैश जैसे कोर शेयर संसाधनों पर चल रही प्रक्रियाएं और एक दूसरे के साथ हस्तक्षेप कर सकती हैं। प्रदर्शन वास्तव में बढ़ता है या नहीं, वर्कलोड पर निर्भर करता है।

तो एक कंपाइलर वर्कलोड के लिए, प्रदर्शन में वृद्धि होती है? अगर ऐसा तो कितने तक?

+0

मैं इस के साथ कोई हाल के अनुभव है, लेकिन संकलन आई/ओ बाध्य हो जाते हैं नहीं करता है? – Ken

+0

"मेक-एन एन" के साथ खेलो और विभिन्न एन के लिए सिस्टम संसाधनों को मापें? –

+0

@ निकोलई, अगर मैं एक हाइपरथ्रेड सीपीयू के साथ खेलने के लिए था। मैं यह पूछ रहा हूं इसलिए मुझे पता है कि एक खरीदना सार्थक है या नहीं। –

उत्तर

26

संकलन coreutils-8.4 Ubuntu पर 8.04 86

इंटेल एटॉम हिंदुस्तान टाइम्स के साथ 1.6 GHz सक्षम:

~/coreutils-8.4$ make clean > /dev/null 
~/coreutils-8.4$ time make > /dev/null 

real 2m33.375s 
user 2m22.873s 
sys  0m10.541s 
~/coreutils-8.4$ make clean > /dev/null 
~/coreutils-8.4$ time make -j2 > /dev/null 

real 1m54.707s 
user 3m26.121s 
sys  0m13.821s 
~/coreutils-8.4$ make clean > /dev/null 
~/coreutils-8.4$ time make > /dev/null 

real 2m33.372s 
user 2m22.753s 
sys  0m10.657s 
~/coreutils-8.4$ make clean > /dev/null 
~/coreutils-8.4$ time make -j2 > /dev/null 

real 1m54.851s 
user 3m26.145s 
sys  0m13.685s 
~/coreutils-8.4$ 

तो हाइपर-थ्रेडिंग 75% है, जो 33% के बराबर है करने के लिए रन टाइम कम कर देता है अधिक प्रसंस्करण शक्ति। यहाँ एक नियंत्रण प्रयोग को दिखाने के लिए किया जाता है कि अकेले make -j2 Ubuntu 8.04 x86 पर coreutils-8.4 संकलन के लिए गति में सुधार नहीं करता है (मैं उन्हें दो बार यह सुनिश्चित करें कि सब कुछ स्मृति कैश में है भाग गया।)

और

एकल कोर कोर 2 Quad 2.5 GHz वी एम (कोई एच टी):

~/coreutils-8.4$ make clean > /dev/null 
~/coreutils-8.4$ time make > /dev/null 

real 0m44.453s 
user 0m38.870s 
sys  0m5.500s 
~/coreutils-8.4$ make clean > /dev/null 
~/coreutils-8.4$ time make -j2 > /dev/null 

real 0m45.131s 
user 0m40.450s 
sys  0m4.580s 
~/coreutils-8.4$ make clean > /dev/null 
~/coreutils-8.4$ time make > /dev/null 

real 0m44.621s 
user 0m39.090s 
sys  0m5.340s 
~/coreutils-8.4$ make clean > /dev/null 
~/coreutils-8.4$ time make -j2 > /dev/null 

real 0m45.165s 
user 0m40.390s 
sys  0m4.610s 
~/coreutils-8.4$ 
+0

यह बहुत अच्छा है। नियंत्रण प्रयोग से पता चलता है कि यह वास्तव में एक फर्क पड़ता है। धन्यवाद। –

+2

मुझे एटम पर एचटी अक्षम के साथ दोहराए गए माप को देखना पसंद होगा, यह मानते हुए कि पूरा करना संभव है। इसके अलावा, स्मृति उपयोग पर एक नोट अच्छा होगा, क्योंकि एटम विशेष रूप से -जे 2 मामले में कैश को स्वैपिंग या ड्रॉप करना शुरू कर सकता है। – Eroen

+0

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

0

यह सब इस बात पर निर्भर करता है कि संकलक बहु-थ्रेडेड होने के लिए लिखा गया है या नहीं। यदि यह है, तो निश्चित रूप से हाइपरथ्रेडिंग कुछ चीजों को गति देता है तब से ओएस विभिन्न कोर पर कंपाइलर के धागे के विभिन्न हिस्सों को शेड्यूल कर सकता है। मैं केन से सहमत हूं कि संकलन आमतौर पर गहन प्रसंस्करण की तुलना में अधिक I/O बाध्य होते हैं, इसलिए 100 हार्ड के साथ एक तेज प्रोसेसर की तुलना में एक तेज हार्ड ड्राइव की आवश्यकता अधिक होती है।

+0

कैसे कंपाइलर मेक-जे एन (एन लॉजिकल प्रोसेसर की संख्या होने के साथ) के साथ आक्रमण किया जाता है? मुझे चिंतित है कि चूंकि अलग संकलक प्रक्रियाएं किसी भी डेटा को साझा नहीं करती हैं, इसलिए वे वास्तव में प्रदर्शन को कम करते हैं। –

+2

1) संकलन (वैसे भी लिनक्स पर) हमेशा गैर-बाध्य बना दिया जा सकता है, बशर्ते पर्याप्त भौतिक स्मृति मौजूद हो। 2) लोकप्रिय बिल्ड सिस्टम समानांतर में कई कंपाइलर प्रक्रियाओं का आह्वान कर सकते हैं, बहु-थ्रेडेड कंपाइलर्स को एक गैर-समस्या बनाते हैं। (लिंकर्स के लिए कम, हालांकि) – Eroen

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