5

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

मेरा सवाल है, कोई इन पैटर्न को कैसे खोजता है? (मान लीजिए कि आपका प्लेटफॉर्म एक वीएम है जो शॉकन हैक जैसे एक निर्मित कंप्यूटर के लिए असेंबली कोड आउटपुट करता है)।

क्या लोग वास्तव में मैन्युअल रूप से कोड का निरीक्षण करते हैं (नियंत्रण प्रवाह ग्राफ या डीएजी या जो भी हो) का उपयोग करते हैं और फिर पहचान किए गए सभी पैटर्न इकट्ठा करते हैं और उन्हें ऑप्टिमाइज़र में कोड करते हैं? या कोई स्वचालित तरीका है।

उदाहरण के लिए, आप एक विश्लेषक में कोड-टू-ए-अनुकूलित अनुकूलित करते हैं, और यह पैटर्न बताते हैं। यदि हां, तो कोई एक लिखना शुरू कर सकता है?

+0

मुझे लगता है कि इसे आम तौर पर 'इनलाइन कैशिंग' कहा जाता है। रनटाइम पर इस तकनीक का उपयोग करके आपको हालिया जावास्क्रिप्ट इंजनों के लिए बहुत साहित्य मिलेगा। Http://wingolog.org/archives/2012/05/29/inline-cache-applications-in-checheme देखें। – leppie

+0

यह दिलचस्प है, पहली बार मैं इसमें टक्कर लगी। मैं आमतौर पर ताकत में कमी, निरंतर मूल्यांकन, नियंत्रण प्रवाह विकल्प इत्यादि जैसे संचालन के लिए सोच रहा था .. – gfountis

+0

ऐसा लगता है कि 'रनटाइम' हां पर लक्षित किया गया है? या यह अधिक तंग असेंबली कोड उत्पन्न करने के लिए प्रयोग किया जाता है? – gfountis

उत्तर

3

क्लासिक पेफोल ऑप्टिमाइज़ेशन ताकत में कमी और अन्य चीजों के बारे में नहीं हैं जिन्हें आप नाम देते हैं। वे की तरह 2-3 अनुदेश दृश्यों हैं, उदाहरण के

BRANCH FALSE $1 
BRANCH $2 
$1: 

जो इस तरह के एक-पास compilers कि नहीं है के साथ आते हैं के रूप में इस तरह

BRANCH TRUE $2 

दृश्यों को कम किया जा सकता अनुभवहीन कोड जनरेटर में पैदा कर सकते के लिए एएसटी उत्पन्न करें, जैसे कुछ कोबोल कंपाइलर्स मैंने काम किया है।

+0

मैं देखता हूं, लेकिन इन अनुक्रमों को कैसे खोज सकता है? क्या कहीं प्रकाशित पैटर्न की एक सूची है? क्या लोग यादृच्छिक कोड संकलित करते हैं और फिर स्वयं को खोजना शुरू करते हैं? – gfountis

+0

इसके अलावा, क्या नियंत्रण प्रवाह अनुकूलन उदाहरण नहीं था?=) – gfountis

+1

@gfountis निश्चित रूप से यह था कि संकलक जो मैं बोल रहा हूं प्रवाह प्रवाह नहीं करता हूं। पेफोल दृश्य किसी भी सभ्य असेंबली प्रोग्रामर के लिए स्पष्ट होंगे, अगर उनमें से कोई भी बचा है। आप बस आउटपुट का निरीक्षण करते हैं और 'हम्म ...' सोचते हैं। यह सब सामान्य किताबों में है। – EJP

1

यह आपके पर निर्भर करता है कि क्या आप अपना खुद का विश्लेषक लिखना चाहते हैं या मौजूदा लोगों का उपयोग करना चाहते हैं। किसी भी मामले में आपका विश्लेषक तब तक कोड की जांच करता रहता है जब तक कि यह अधिक अनुकूल न हो। यदि आप GCC का उदाहरण लेते हैं, तो इसमें अनुकूलन के लिए विशिष्ट पास हैं। आपके कार्यक्रम का इंटरमीडिएट कोड इन पासों को दिया जाता है जो एक के बाद एक निष्पादित करते हैं और आपके कोड को अनुकूलित करते हैं। इसके अलावा कोई भी पास एक से अधिक बार निष्पादित कर सकता है।
यदि आप वास्तव में इन अनुकूलन को लिखना चाहते हैं, तो passes.hफ़ाइल में GCC पर जाएं।

+0

तो, गैर-x86 कोड जनरेशन (खिलौना मंच के लिए) के अनुकूलन के मामले में, एकमात्र तरीका है कि आप अपना खुद का विश्लेषक लिखें, या इसे "हाथ" से सही करें? – gfountis

+0

प्रश्न पेफोल अनुकूलन के बारे में है, और आपने इसका उत्तर नहीं दिया है। – EJP