2009-11-12 13 views
8

को अनुकूलित करने के लिए कैश्रिंड आउटपुट का उपयोग कैसे करें मुझे सिस्टम के थ्रूपुट को बेहतर बनाने की आवश्यकता है।एप्लिकेशन

ऑप्टिमाइज़ेशन का सामान्य चक्र किया गया है और हमने पहले से ही 1.5 एक्स बेहतर थ्रूपुट हासिल कर लिया है।

अब मुझे आश्चर्य है कि क्या मैं सिस्टम के थ्रूपुट को बेहतर बनाने के लिए कैशग्रीड आउटपुट का उपयोग कर सकता हूं।

क्या कोई मुझे इस पर शुरू करने के लिए इंगित कर सकता है?

मुझे क्या समझता है कि हमें यह सुनिश्चित करने की ज़रूरत है कि अक्सर उपयोग किए जाने वाले डेटा को काफी छोटा रखा जाना चाहिए ताकि यह एल 1 कैश में बना रहता है और डेटा का अगला सेट एल 2 में फिट होना चाहिए।

क्या यह सही दिशा है जिसे मैं ले रहा हूं?

उत्तर

6

यह सच है कि कैशग्रीड आउटपुट स्वयं को कोड को अनुकूलित करने के बारे में बहुत अधिक जानकारी नहीं देता है। आपको यह जानने की जरूरत है कि इसकी व्याख्या कैसे करें और एल 1 और एल 2 में डेटा फिटिंग के बारे में आप क्या कह रहे हैं, वास्तव में सही दिशा है।

पूरी तरह से समझने के लिए कि स्मृति पहुंच पैटर्न प्रदर्शन को कैसे प्रभावित करते हैं, मैं जीएनयू libc रखरखाव Ulrich Drepper द्वारा एक उत्कृष्ट पेपर "What Every Programmer Should Know About Memory" पढ़ने की सलाह देता हूं।

+0

धन्यवाद Kaustaurya, यह वास्तव में एक उत्कृष्ट लेख था। मुझे पहले इस लेख के माध्यम से जाना याद है, लेकिन मैं इस समय इंटरेक्ट्रीज़ की सराहना करने में सक्षम था। – rajeshnair

2

the Cachegrind documentation के अनुसार, कैशग्रींड द्वारा आपको दिए गए विवरण आपके कोड के दिए गए हिस्से के लिए कैश मिस की संख्या हैं। आपको पता होना चाहिए कि कैश आपके द्वारा लक्षित आर्किटेक्चर पर कैसे काम करते हैं ताकि आप जानते हैं कि कोड को कैसे ठीक किया जाए। अभ्यास में इसका मतलब डेटा को छोटा करना या कुछ डेटा के एक्सेस पैटर्न को बदलना है ताकि कैश डेटा अभी भी कैश में हो। हालांकि आपको जानकारी पर कार्य करने से पहले अपने प्रोग्राम के डेटा और डेटा पहुंच को समझने की आवश्यकता है। जैसा कि मैनुअल में कहा गया है,

संक्षेप में, कैश्रिंड आपको बता सकता है कि आपके कोड में कुछ बाधाएं कहां हैं, लेकिन यह आपको यह नहीं बता सकती कि उन्हें कैसे ठीक किया जाए। आपको अपने लिए यह काम करना होगा। लेकिन कम से कम आपके पास जानकारी है!

3

यदि आपको कैश्रिंड आउटपुट को पार्स करने में परेशानी हो रही है, तो केसीएचग्रिंड में देखें (यह आपके पसंद के डिस्ट्रो में उपलब्ध होना चाहिए)। मैं इसका इस्तेमाल करता हूं और इसे काफी उपयोगी लगता हूं।

2

1.5x एक अच्छा गति है। इसका मतलब है कि आपको कुछ ऐसा मिला जो उस समय से 33% था जिसे आप छुटकारा पा सकते थे। मैं शर्त लगाता हूं कि आप डेटा मेमोरी कैश जैसे निम्न-स्तरीय मुद्दों तक पहुंचने से पहले भी अधिक कर सकते हैं। This is an example of how. असल में, आपके पास अतिरिक्त प्रदर्शन समस्याएं हो सकती हैं (और गति के अवसर) जो 25% की तरह पहले बड़े नहीं थे। खैर, 1.5x स्पीडअप के साथ, 25% अब 37.5% है, इसलिए यह "इससे अधिक मूल्यवान" है। अक्सर ऐसी समस्या कुछ मध्य-स्टैक फ़ंक्शन कॉल के रूप में होती है जो काम का अनुरोध कर रही है कि, एक बार जब आप जानते हैं कि इसका कितना खर्च होता है, तो आप तय कर सकते हैं कि पूरी तरह से आवश्यक नहीं है। चूंकि kcachegrind वास्तव में इन्हें इंगित नहीं करता है, इसलिए आप महसूस नहीं कर सकते कि यह एक समस्या है।

+0

मैं ज्यादातर सहमत हूं। हालांकि, मैं कैश को निम्न स्तर के मुद्दे पर नहीं मानूंगा। आपके द्वारा लक्षित किए जाने वाले किसी भी प्लेटफ़ॉर्म में कैश होगा (यहां तक ​​कि आधुनिक CUDA कार्ड)। कैश के लिए अनुकूलन में बड़े सुधार भी होने की संभावना है और संकलक से असेंबली आउटपुट को देखे बिना किया जा सकता है। –

+0

@ जोर्जनफोग: दाएं। प्रोसेसर डेवलपर्स ने प्रोसेसिंग समय को अनुकूलित करने के लिए अपने डोमेन में सबकुछ संभव किया है। हम सॉफ्टवेयर डेवलपर्स हमेशा यह सुनिश्चित करके सहारा नहीं देते कि हमारा कोड "दुबला और मतलब" है।मुझे यह हर समय दिखाई देता है। –

+0

यह निश्चित रूप से सच है। मेरा मुद्दा यह है कि कोई अच्छा तरीका नहीं है कि एक अच्छा प्रोसेसर एक अक्षम एल्गोरिदम के लिए बना सकता है। इसमें खराब कैश प्रदर्शन वाले एल्गोरिदम शामिल हैं। कैश दक्षता को बाद में विचार के रूप में जोड़ा नहीं जा सकता है। –

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