2011-07-29 17 views
17

मैं इस ऑनलाइन पर किसी भी जानकारी नहीं मिल सकता है ... मैं भी Prolog के लिए नया हूँ ...प्रोलॉगेंट कितना समकक्ष है?

यह Prolog अत्यधिक समवर्ती हो सकता है, शायद कई संभावनाएं कोशिश कर एक ही बार में जब की कोशिश कर मुझे लगता है एक नियम से मेल खाते हैं। आधुनिक प्रोलॉग कंपाइलर्स/दुभाषिया स्वाभाविक रूप से * समवर्ती हैं? कौन सा? डिफ़ॉल्ट रूप से समवर्ती है? क्या मुझे इसे किसी भी तरह सक्षम करने की ज़रूरत है?

* मुझे बहु-थ्रेडिंग, केवल अंतर्निहित सहमति में रूचि नहीं है।

उत्तर

11

सिद्धांत में जो आकर्षक लगता है, लेकिन ऐसी कई समस्याएं हैं जो इस तरह के कार्यान्वयन को मूर्खतापूर्ण लगती हैं।

  • बेहतर या बदतर के लिए, लोगों को बाएँ से सही और ऊपर से नीचे को क्रियान्वित करने, तब भी जब Prolog में प्रोग्रामिंग के रूप में उनके कार्यक्रमों के बारे में सोच करने के लिए इस्तेमाल कर रहे हैं। खंड के भीतर एक अनुमान और शर्तों के लिए क्लॉज के क्रम दोनों मानक प्रोलॉग में अर्थपूर्ण रूप से सार्थक हैं। उन्हें समानांतर करने के लिए लोकप्रिय बनने के लिए बहुत अधिक बढ़ते कोड का व्यवहार बदल जाएगा।

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

  • सभी मौजूदा समानांतर समाधान इंटर-थ्रेड संचार के लिए कम से कम कुछ प्रदर्शन ओवरहेड होते हैं।

  • Prolog आम तौर पर एक आधुनिक मशीनों पर उच्च स्तरीय, इस तरह के ग्राफ ट्रेवर्सल के रूप में गहरा पुनरावर्ती समस्याओं, प्रमेय साबित आदि बनता है के लिए प्रयोग किया जाता है कर सकते हैं (आदर्श) कुछ निरंतर n के लिए n की एक speedup को प्राप्त है, लेकिन यह एक चालू नहीं कर सकता एक व्यवहार्य एक में व्यवहार्य समाधान विधि, क्योंकि उसे घातीय स्पीडअप की आवश्यकता होगी। इसके विपरीत, फोरट्रान और सी प्रोग्रामर आमतौर पर हल होने वाली संख्यात्मक समस्याएं आम तौर पर गणना की उच्च लेकिन काफी सीमित लागत होती हैं; 10 घंटे की नौकरी को 1 घंटे की नौकरी में बदलने के लिए समांतरता के प्रयास के लायक है। इसके विपरीत, एक प्रोग्राम को चालू करना जो लगभग 6 चालों को आगे बढ़ा सकता है जो औसत (औसत पर) देख सकते हैं, आगे बढ़कर 6.5 आगे बढ़ते हैं।

+1

+1 एक विचारशील उत्तर देने के लिए यह मानते हुए कि मानक प्रोलॉग कार्यान्वयन डिजाइन द्वारा अंतर्निहित समांतरता के अर्थ में समवर्ती नहीं हैं। इस सिक्का के नकारात्मक पक्ष से तुम्हारी मांसपेशियों को शायद दूसरी तरफ थोड़ा संतुलन मिल जाए, तो शायद मैं उस पर अपना हाथ कोशिश करूंगा। – hardmath

+0

हां, मुझे दूसरी तरफ सुनना अच्छा लगेगा। मैं इसे उत्तर के रूप में स्वीकार कर रहा हूं, हालांकि, यह कहकर कि समांतरता बहुत मुश्किल है, एक पुलिस-आउट है। महान जवाब, यद्यपि। – alejandro5042

+0

वहां टकराव नहीं लगाना चाहते हैं, उत्तर के लिए धन्यवाद :) – alejandro5042

3

एक त्वरित गूगल खोज से ऐसा लगता है कि समवर्ती तर्क प्रोग्रामिंग प्रतिमान केवल कुछ अनुसंधान भाषाओं के लिए आधार दिया है और अब सक्रिय रूप से विकसित है। मैंने दावा देखा है कि मोजार्ट/ओज़ सिस्टम में समवर्ती तर्क करना आसान है।

10

आधुनिक प्रोलॉग कंपाइलर्स/दुभाषिया स्वाभाविक रूप से * समवर्ती हैं? कौन सा? डिफ़ॉल्ट रूप से समवर्ती है?

सं। समवर्ती तर्क प्रोग्रामिंग 1 9 80 के दशक में जापान में 5 वें पीढ़ी के कंप्यूटर कार्यक्रम का मुख्य उद्देश्य था; यह उम्मीद की गई थी कि बड़े पैमाने पर समांतर हार्डवेयर पर प्रोलॉग वेरिएंट "आसानी से" समानांतर होंगे। प्रयास काफी हद तक असफल रहा, क्योंकि स्वचालित सहमति केवल आसान नहीं है। आज, प्रोलॉग कंपाइलर्स इसके बजाए थ्रेडिंग पुस्तकालयों की पेशकश करते हैं, जहां कार्यक्रम को हाथ से समेकन की मात्रा को नियंत्रित करना चाहिए।

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

p(X) :- q(X), r(X). 

का निर्माण करता है और आपके q(X) और समानांतर में r(X) चलाना चाहते हैं चाहते हैं। फिर, क्या होता है यदि q आंशिक रूप से X को एकीकृत करता है, इसे f(Y) पर बाध्य करके कहें। r को इस बाध्यकारी का ज्ञान होना चाहिए, इसलिए या तो आपको इसे संवाद करना होगा, या आपको दोनों संयोजनों को पूरा करने की प्रतीक्षा करनी होगी; तो यदि आप उनमें से एक विफल हो जाते हैं, तो आप बर्बाद हो सकते हैं, जब तक कि आप उन्हें फिर से सिंक्रनाइज़ करने के लिए संवाद न करें। यह ओवरहेड देता है और सही होने में मुश्किल होती है। अब के लिए या:

p(X) :- q(X). 
p(X) :- r(X). 

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

दूसरे शब्दों में, स्वचालित समांतरता हार्ड है। 5 वीं जेन कंप्यूटर प्रोजेक्ट को प्रतिबद्ध-पसंद भाषाओं को डिजाइन करके कुछ मुद्दों के आसपास मिल गया, यानी बैकट्रैकिंग के बिना प्रोल बोलियां। ऐसा करने में, उन्होंने भाषा को भारी रूप से बदल दिया। यह ध्यान दिया जाना चाहिए कि समवर्ती भाषा एरलांग प्रोलॉग का एक शाखा है, और यह भी कुछ ऐसी चीज के लिए बैकट्रैकिंग में कारोबार कर रहा है जो कार्यात्मक प्रोग्रामिंग के करीब है। यह अभी भी उपयोगकर्ता मार्गदर्शन की आवश्यकता है यह जानने के लिए कि किसी प्रोग्राम के कौन से हिस्से सुरक्षित रूप से चल सकते हैं।

+0

हां, एसआईसीस्टस 3 और वाईएपी, उचित रूप से संकलित (ऐसे ऊपरी भाग हैं जिन्हें आप नहीं चाहते हैं अगर समांतर या मल्टीकोर हार्डवेयर पर शोषण न करें)। –

9

प्रोलॉग में समरूपता के दो विचार हैं। एक मल्टीथ्रेडिंग से जुड़ा हुआ है, दूसरा निलंबित लक्ष्य से जुड़ा हुआ है। मुझे यकीन नहीं है कि आप क्या जानना चाहते हैं। तो मैं पहले मल्टीथ्रेडिंग के बारे में थोड़ा सा विस्तार करूंगा:

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

आप Prolog प्रणाली है कि यहाँ थ्रेड कर रहे हैं की एक सूची प्राप्त कर सकते हैं:

Operating system and Web-related features

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

वर्तमान में, एक धागा पुस्तकालय के लिए कोई आईएसओ मानक है, हालांकि एक प्रस्ताव दिया गया है और प्रत्येक Prolog सिस्टम आम तौर पर अमीर पुस्तकालयों कि धागा तुल्यकालन, धागा संचार, धागा डिबगिंग और विदेशी कोड धागे प्रदान करती हैं।प्रोलॉग सिस्टम में कचरा संग्रह में एक निश्चित प्रगति थ्रेड वाले अनुप्रयोगों को अनुमति देने के लिए जरूरी थी, जिनके संभावित रूप से असीमित लंबे समय तक चलने वाले धागे हैं।

कुछ मौजूदा परतें प्रोलॉग सिस्टम स्वतंत्र फैशन में उच्च स्तर समांतरता प्रतिमानों को भी अनुमति देती हैं। उदाहरण के लिए लॉगटॉक में कुछ संरचनाएं हैं जो विभिन्न लक्ष्य प्रोलॉग सिस्टम पर मैप करती हैं।

अब निलंबित लक्ष्यों पर जाएं। पुराने प्रोलॉग सिस्टम से (Prolog II, वास्तव में, 1 9 82 से) हम freeze/2 कमांड या अवरुद्ध निर्देशों को जानते हैं। ये मौजूदा लक्ष्यों द्वारा विस्तारित नहीं होने के लक्ष्य को मजबूर करता है, बल्कि इसके बजाय सोने की सूची डालता है। लक्ष्य बाद में जागृत हो सकता है। के बाद से लक्ष्य के निष्पादन तत्काल नहीं है, लेकिन केवल जब यह उठ रहा है, को निलंबित कर दिया लक्ष्यों कभी कभी समवर्ती लक्ष्यों, लेकिन समानांतरवाद के लिए इस प्रपत्र coroutines होगा के लिए बेहतर धारणा रूप में देखा जाता है।

निलंबित लक्ष्य बाध्यता समाधान प्रणाली को लागू करने के लिए उपयोगी हैं। सबसे सरल मामले में सोने की सूची कुछ परिवर्तनीय विशेषता है। लेकिन बाधा समाधान प्रणाली के लिए एक नया दृष्टिकोण बाधा हैंडलिंग नियम हैं। बाधा प्रबंधन नियमों में जागने की स्थिति को लक्ष्य जोड़ी पैटर्न निलंबित किया जा सकता है। बाधा या तो निलंबित लक्ष्य या बाधा से निपटने के नियमों के माध्यम से सुलझाने की उपलब्धता यहां देखा जा सकता:

Overview of Prolog Systems

बेस्ट सादर

+0

इनमें से कोई भी ओपी क्या पूछ रहा है - जाहिर है बहुसंख्यक नहीं, और निलंबन के माध्यम से भी coroutining नहीं। एसआईसीस्टस और वाईएपी प्रोलॉग कंपाइलर्स में विकल्पों सहित, सिस्टम के आसपास सिस्टम हैं- या या समानांतर निष्पादन स्वचालित रूप से करते हैं। मैंने एसआईसीस्टस या समांतरता का व्यापक रूप से उपयोग किया है। –

+0

वैसे मैं सीएचआर को इंगित कर रहा था, जो मुझे लगता है कि गलत नहीं है, इस नए पेपर से निर्णय लेना: ** समांतरता, कंसूरेंसी और बाधा प्रबंधन नियमों में वितरण: ** एक सर्वेक्षण (ड्राफ्ट) थॉम फ्रूविर्थ https://arxiv.org /abs/1703.10959 –

0

ग्रहण-CLP, "बड़े पैमाने पर Prolog साथ पार्श्व-संगत" एक भाषा, या समर्थन करता है - समानांतरता, भले ही "यह कार्यक्षमता वर्तमान में अन्य प्राथमिकताओं के कारण सक्रिय रूप से बनाए रखा नहीं गया है"।

[1,2] दस्तावेज़ OR- (और AND-) ECLiPSe-CLP में समांतरता।

हालांकि, मैं यह ग्रहण-CLP के भंडार से कोड का उपयोग कर कुछ समय काम कर पाने की कोशिश की, लेकिन मैं इसे हालांकि नहीं मिला।

1

विशेष रूप से 80 के दशक/90 के दशक में बड़ी उम्मीद भाषा में समानांतरवाद बेक करने (इस प्रकार यह "स्वाभाविक" समांतर बनाते हुए) नहीं था, पांचवीं पीढ़ी परियोजना के संदर्भ में। "समानांतर अनुमान मशीन" (पीआईएम) को लागू करने के लिए यहां तक ​​कि विशेष हार्डवेयर संरचनाओं का अध्ययन किया गया था ("कार्यात्मक प्रोग्रामिंग" शिविर में LISP मशीनों के लिए विशेष हार्डवेयर की तरह)। समानांतरवाद कि पारदर्शी लग रहा है और: हार्डवेयर प्रयासों ऑफ-द-शेल्फ CPU और सॉफ्टवेयर प्रयास की लगातार सुधार की वजह से छोड़ दिया गया अत्यधिक संकलक जटिलता, उच्च स्तरीय सुविधाओं और अदायगी की संभावना कमी मुश्किल से लागू के लिए मांग की कमी के कारण छोड़ दिया गया भाषा स्तर पर सुंदर रूप से शोषक होने का मतलब आम तौर पर महंगी इंटर-प्रोसेस संचार और "हुड के तहत लेनदेन लॉकिंग" होता है।

इस बारे में एक अच्छा पढ़ा

"The Deevolution of Concurrent Logic Programming Languages"

इवान टिक द्वारा मार्च 1994 में "तर्क के जर्नल प्रोग्रामिंग, दसवीं वर्षगांठ विशेषांक, 1995" दिखाई है। एल्सेवियर में प्राप्त पीडीएफ के विपरीत, पोस्टस्क्रिप्ट फ़ाइल से जुड़ा हुआ है।

लेखक का कहना है:

समवर्ती तर्क प्रोग्रामिंग के दो मुख्य विचारों और पिछले कई वर्षों में अपनी विकास कर रहे हैं। अधिकांश तर्क प्रोग्रामिंग साहित्य विचार तर्क कार्यक्रमों के व्युत्पन्न या रूप के रूप में समवर्ती तर्क प्रोग्रामिंग भाषाओं, यानी मुख्य अंतर "बैकट्रैकिंग" के बजाय "देखभाल न करें" नोडेटर्मिनिज्म का व्यापक उपयोग होने का व्यापक उपयोग है। nondeterminism। इसलिए नाम पसंद या प्रमुख भाषाएं प्रतिबद्ध है। दूसरा विचार यह है कि समवर्ती तर्क प्रोग्राम समवर्ती, प्रतिक्रियाशील कार्यक्रम हैं, अन्य "पारंपरिक" समवर्ती भाषाओं जैसे 'सी' जैसे स्पष्ट संदेश के साथ नहीं, इस अर्थ में प्रक्रियाएं ऐसी प्रक्रियाएं हैं जो डेटा स्ट्रीम पर को क्रमशः बढ़ाने के लिए संचार करती हैं जवाब उत्पन्न करें। एक निंदक पूर्व दृष्टिकोण अधिक शैक्षिक समृद्धि है कि कह सकते हैं, जबकि बाद दृश्य और अधिक व्यावहारिक जनसंपर्क मूल्य है।

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

मुख्य बिंदु मैं इस लेख में करना चाहते हैं कि समवर्ती तर्क प्रोग्रामिंग भाषाओं निम्नलिखित tatonnement की वजह से उनके स्थापना के बाद से deevolving किया गया है, लगभग दस साल पहले, यह है:

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

इस प्रकार इस लेख में मेरा रुख एक तिहाई ही दृश्य दिखाई देगा: कैसे शुरू में अमीर भाषाओं धीरे-धीरे ", दांत" उनके खो दिया है और कमजोर हो गया, लेकिन अधिक व्यावहारिक कार्यान्वयन, और तेजी से प्रदर्शन हासिल की।

deevolutionary इतिहास समवर्ती Prolog साथ शुरू होता है (गहरी गार्ड, परमाणु unifi-केशन, केवल पढ़ने के लिए तुल्यकालन के लिए एनोटेट चर), और कटौती की एक श्रृंखला के बाद (उदाहरण के लिए: GHC (इनपुट मिलान तुल्यकालन), पार्लॉग (सुरक्षित), FCP (फ्लैट), फ्लेग (नहीं गार्ड), जेनस (प्रतिबंधित संचार), स्ट्रैंड (आउटपुट यूनिफ़ी-कैशन की तुलना में असाइनमेंट)), और अब पीसीएन (फ्लैट गार्ड, गैर-परमाणु के साथ समाप्त होता है) असाइनमेंट इनपुट-मिलान सिंक्रनाइज़ेशन, और स्पष्ट रूप से परिभाषित परिवर्तनीय चर)। यह और अन्य शब्दावली लेख आय के रूप में परिभाषित की जाएगी।

यह दृश्य कुछ पाठकों को नापसंद कर सकता है क्योंकि यह मानता है कि प्रदर्शन मुख्य बाजार भाषा बाजार का बल है; और इसके अलावा तर्कसंगत तर्कों पर समवर्ती तर्क कार्यक्रमों के मुख्य "जोड़ा मान" क्षमता क्षमता प्राप्त करने के लिए स्वाभाविक रूप से समांतरता का शोषण करने की क्षमता है। निश्चित रूप से प्रतिक्रियाशील भाषाओं की प्रकृति भी मूल्य जोड़ती है; उदाहरण के लिए, जटिल ऑब्जेक्ट उन्मुख अनुप्रयोगों के निर्माण में। इस प्रकार कोई तर्क दे सकता है कि डीवोल्यूशन देखा गया है जब प्रतिक्रियाशील क्षमताओं का व्यापार गति के लिए किया जा रहा है।

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