निर्णायक के बारे में तर्क करने के लिए कौन से मध्यवर्ती प्रतिनिधित्व का उपयोग किया जा सकता है?


12

मैं बेहतर समझने की कोशिश कर रहा हूं कि प्रोग्रामर की ओर से कंसीलर के बारे में समझदार विकल्प बनाने में सक्षम कंपाइलर के लिए क्या जरूरी होगा। मुझे एहसास है कि उदाहरण के लिए इस समस्या के कई कठिन पहलू हैं:

  • यह सुनिश्चित करना कि कोई दौड़ की स्थिति न हो
  • यह सुनिश्चित करना कि कोड को समवर्ती रूप से चलाने के साइड इफेक्ट्स नहीं होंगे जो कोड के अर्थ अर्थ को प्रभावित करते हैं

  • यह तय करना कि थ्रेड को कताई से ओवरहेड करना सार्थक है कोड में उपलब्ध समानता की डिग्री दी गई है

मेरी समझ यह है कि आधुनिक संकलक में प्रयुक्त दो प्रमुख मध्यवर्ती निरूपण प्रक्रियात्मक और वस्तु उन्मुख भाषाओं के लिए स्थिर एकल असाइनमेंट हैं और कार्यात्मक भाषाओं के लिए शैली गुजरती रहती हैं। ऊपर सूचीबद्ध किसी भी समस्या के बारे में तर्क इन मध्यवर्ती रूपों का उपयोग करना मुश्किल लगता है। यहां तक ​​कि जिन भाषाओं को सिद्धांत में होना चाहिए, वे स्वत: समांतरिकरण का सबसे अच्छा मौका हैं (शुद्ध कार्यात्मक भाषा जैसे हास्केल जैसे बिना किसी दुष्प्रभाव के) ने इस मोर्चे पर सीमित प्रगति की है।

तो मेरा प्रश्न वास्तव में है कि इस समस्या को सुलझाने और उससे निपटने के लिए मध्यवर्ती अभ्यावेदन का क्या उपयोग किया गया है? क्या अन्य अभ्यावेदन हैं जिनका उपयोग अकादमिक शोध में किया गया है कि मुझे इस बात की जानकारी नहीं है कि वे इस कार्य के लिए बेहतर हैं? क्या यह समस्या एक है जिसे मौलिक रूप से संकलक के मध्यवर्ती वृक्ष को जोड़कर संकलक के सामने के छोर से हल किया जाना है, संकलन से पहले एक मध्यवर्ती प्रतिनिधित्व तक पहुँच जाता है?


यदि आप अपना कोड एक कार्यात्मक तरीके से लिखते हैं, तो आपको दौड़ की स्थिति या दुष्प्रभावों के बारे में चिंता करने की आवश्यकता नहीं होगी।
रॉबर्ट हार्वे

4
यह आपके प्रश्न का काफी जवाब नहीं देता है, लेकिन आप प्रोसेस कैल्कुली में दिलचस्पी ले सकते हैं जिसका उपयोग समवर्ती कोड के बारे में तर्क करने के लिए किया जा सकता है। सबसे अच्छा ज्ञात उदाहरण पाई पथरी हो सकता है । हालाँकि, स्वचालित समांतरकरण अभी भी एक काफी हद तक अनसुलझी समस्या है और विशेष रूप से कुछ गारंटी के साथ संकलक प्रदान करने के लिए, या विशेष एनोटेशन का उपयोग करके भाषाओं को डिजाइन करके सबसे अच्छा व्यवहार किया जाता है।
अमन

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

सैद्धांतिक टूल में से एक को "डायनेमिक सिंगल असाइनमेंट (डीएसए)" कहा जाता है, जिसे एसएसए के शीर्ष पर बनाया गया है।
rwong

@rwong: क्या आप एक स्पष्ट संदर्भ प्रदान कर सकते हैं?
इरा बैक्सटर

जवाबों:


5

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

संक्षिप्त रूप से रंगीन पेट्री नेट (सीपीएन) , संगामिति के साथ कार्यक्रमों का प्रतिनिधित्व करने के लिए एक अच्छा विकल्प है। (सीपीएन में टोकन "रंगीन" हैं [एक प्रकार है] और मूल्यों को ले जा सकते हैं; "राज्यों में" संक्रमण आने वाले टोकन पर मनमाने ढंग से अंकगणित प्रदर्शन कर सकते हैं "स्थान" में गणना मूल्य के साथ संभवतः अलग रंग के टोकन का उत्पादन करने के लिए। यदि आप मॉडलिंग ऑपरेटरों के रूप में गणना किए गए परिणाम और बदलाव के रूप में स्थानों के बारे में सोचते हैं (स्मृति को एक्सेस करने के लिए एक विशेष सहित), तो यह आपको डेटा प्रवाह ग्राफ के लिए कौन सी मात्रा में मॉडल कार्यक्रम देता है। आप इसका उपयोग आसानी से क्लासिक संकलक अभ्यावेदन जैसे कि त्रिक [संचालक, इनपुट 1, इनपुट 2, आउटपुट] के लिए एक औपचारिक व्याख्या देने के लिए कर सकते हैं।

ऐसे CPN रेखांकन का विश्लेषण करने के लिए बहुत सारे उपकरण हैं, जिसमें कंप्यूटिंग गुण जैसे गतिरोध-घबराहट, स्थानों में टोकन गणना की सीमा आदि शामिल हैं। Heirarchical CPN आपको मॉडल फ़ंक्शन और प्रक्रियाएं और "कॉल" की धारणा देता है।

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.