कार्यक्रमों को समाप्त करने के लिए कंपाइलरों का पूरी तरह से अनुकूलन करना मौजूद है?


20

एंड्रयू डब्ल्यू। एपेल की पुस्तक, मॉडर्न कम्पाइलर इंप्लीमेंट इन एमएल , वे अध्याय 17 के तहत कहते हैं कि कम्प्यूटेबिलिटी थ्योरी से पता चलता है कि नए अनुकूलन परिवर्तनों का आविष्कार करना हमेशा संभव होगा और यह साबित करने के लिए आगे बढ़ना होगा कि पूरी तरह से अनुकूलन कंपाइलर हॉल्टिंग समस्या को हल करेगा: एक कार्यक्रम क्यू जो कोई उत्पादन नहीं करता है और कभी भी हाट को आसानी से अपने इष्टतम प्रतिनिधित्व, ऑप्ट (Q) द्वारा प्रतिस्थापित नहीं किया जा सकता है , "L: goto L" होने के नाते। इसलिए पूरी तरह से अनुकूलन करने वाला कंपाइलिंग रुकने की समस्या को हल कर सकता है।

तो मेरा सवाल यह है: क्या कार्यक्रम को समाप्त करने के लिए पूरी तरह से अनुकूलन कंपाइलर मौजूद है? मेरे केवल विचार निम्नलिखित हैं: भले ही किसी कार्यक्रम को समाप्त करने की गारंटी दी जाती है, यह अभी भी मनमाने ढंग से जटिल हो सकता है, और किसी भी ठोस अनुकूलन कंपाइलर, सी के लिए, कोई शायद एक ऐसे प्रोग्राम का निर्माण कर सकता है जो सी को इनपुट के रूप में लेता है और किसी भी तरह एक बदतर प्रोग्राम का उत्पादन करता है। किसी तरह का कोना मामला।

इसके अलावा, खुद को समाप्त करने वाले कार्यक्रमों तक सीमित रखने के क्या निहितार्थ हैं?


2
यहां तक ​​कि किसी भी नियंत्रण प्रवाह के साथ कोड के एकल ब्लॉक के लिए इष्टतम निर्देश अनुक्रम ढूंढना कठिन है। Superoptimization विकिपीडिया पर लेख एक अच्छा परिचय देता है (प्रशंसा पत्र के साथ।)
भटक तर्क

विकिपीडिया के लेख में उल्लेख किया गया है कि सुपरोप्टिमाइज़ेशन निर्देशों के लूप-मुक्त दृश्यों को देखता है। मेरे पास कोई लूप नहीं है, मुझे लगता है कि यह कहने का एक और तरीका है कि यह समाप्त हो गया है। उपलब्ध संदर्भों को संक्षेप में देखने से, यह संभव है लेकिन बेहद महंगा प्रतीत होता है।
सिमोन ने 'मोनिका' शाइन

2
यहाँ "अनुकूलन" का क्या अर्थ है? छोटे क्रम? यदि ऐसा है, तो: सबसे खराब स्थिति, औसत-मामला, हर मामला, कुछ-मामला, ...?
राफेल

जवाबों:


16

मुझे लगता है कि आप रनटाइम के अनुकूलन में रुचि रखते हैं। जैसा कि मैंने अपनी टिप्पणी में लिखा है, जो लक्ष्य को पर्याप्त रूप से निर्दिष्ट नहीं करता है: क्या कोई अनुकूलन किसी इनपुट, प्रत्येक इनपुट, सभी खराब-केस इनपुट या औसतन भी रनटाइम को कम करता है ?

मैं दिखाऊंगा कि ये सब असंभव है। सबूत कार्यक्रम की लंबाई का अनुकूलन करने के लिए फैली हुई है।

याद रखें कि निम्न समस्या कम्प्यूटेशनल नहीं है:

टर्मिनल वर्णमाला साथ एक संदर्भ-मुक्त व्याकरण को देखते हुए , तय करें कि क्या ।Σ एल ( जी ) = Σ *GΣL(G)=Σ

ध्यान दें कि एक संदर्भ-मुक्त व्याकरण , हम उस एक व्याकरण के लिए CYK एल्गोरिदम को हार्डकोड, कह सकते हैं; इस एल्गोरिथम को द्वारा निरूपित करें । हम उस को सभी इनपुट ( ) के लिए समाप्त करते हैं ।सी वाई कश्मीर जी सी वाई कश्मीर जी Σ *GCYKGCYKGΣ

अब मान लें कि एक ऑप्टिमाइज़र , जो कि हमेशा समाप्ति एल्गोरिथ्म दिया जाता है , परिणाम-समतुल्य एल्गोरिदम को आउटपुट करता है जो रनटाइम के संबंध में इष्टतम है। स्पष्ट रूप से,OptA

Opt(CYKG)='return true;'L(G)=Σ*

और हमने इस प्रकार एक विवादित समस्या के लिए एक डिक्रैडर का निर्माण किया है, जो धारणा के विपरीत है।


इस तर्क के लिए धन्यवाद। कुछ स्पष्ट प्रश्न: क्या है ? मेरा मानना ​​है कि व्याकरण द्वारा उत्पन्न भाषा है । एल ( जी ) जीΣ*एल(जी)जी
साइमन 'मोनिका' शाइन

3
@Simon: सभी शब्दों का समूह है। राफेल: अच्छा सबूत। वास्तव में आपको संदर्भ-मुक्त व्याकरण की आवश्यकता नहीं है; इसके बजाय, एक ट्यूरिंग मशीन आप एक प्रोग्राम बना सकते हैं जो कि स्टेप्स के लिए अनुकरण करता है और यदि मशीन एक स्वीकृत स्थिति में पहुँचती है तो यह सही है। तब होगा iff नहीं है। Σ*पी(मैं)मैंऑप्ट(पी)'आरटीयूआरn एलरों;'
sdcvvc
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.