अनुक्रम एल: Difference between revisions

From Vigyanwiki
Line 37: Line 37:
परियोजना के प्रमुख शोधकर्ता प्रारंभ में डॉ. डेनियल कुक थे,<ref>{{Cite web |url=http://www.texasmulticoretechnologies.com/about/inventors/ |title=टेक्सास मल्टीकोर टेक्नोलॉजीज में डॉ। डैनियल कुक|access-date=2016-02-24 |archive-url=https://web.archive.org/web/20160304111952/http://www.texasmulticoretechnologies.com/about/inventors/ |archive-date=2016-03-04 |url-status=dead }}</ref> जो जल्द ही डॉ. नेल्सन रशटन (टेक्सास के एक अन्य टेक प्रोफेसर) और बाद में डॉ. ब्रैड नेमनिच (तब कुक के अधीन एक पीएचडी छात्र) से जुड़ गए। एक ऐसी भाषा बनाने का लक्ष्य जो पठनीय होने के लिए पर्याप्त सरल था, लेकिन निष्पादन योग्य होने के लिए पर्याप्त स्पष्ट नहीं था, आविष्कारकों को एक कार्यात्मक प्रोग्रामिंग, [[घोषणात्मक प्रोग्रामिंग]] भाषा दृष्टिकोण पर व्यवस्थित करने के लिए प्रेरित किया, जहां एक प्रोग्रामर उन्हें प्राप्त करने के साधनों के बजाय वांछित परिणामों का वर्णन करता है। भाषा तब समस्या को सबसे कुशल तरीके से हल करने के लिए स्वतंत्र है जो इसे खोज सकती है।
परियोजना के प्रमुख शोधकर्ता प्रारंभ में डॉ. डेनियल कुक थे,<ref>{{Cite web |url=http://www.texasmulticoretechnologies.com/about/inventors/ |title=टेक्सास मल्टीकोर टेक्नोलॉजीज में डॉ। डैनियल कुक|access-date=2016-02-24 |archive-url=https://web.archive.org/web/20160304111952/http://www.texasmulticoretechnologies.com/about/inventors/ |archive-date=2016-03-04 |url-status=dead }}</ref> जो जल्द ही डॉ. नेल्सन रशटन (टेक्सास के एक अन्य टेक प्रोफेसर) और बाद में डॉ. ब्रैड नेमनिच (तब कुक के अधीन एक पीएचडी छात्र) से जुड़ गए। एक ऐसी भाषा बनाने का लक्ष्य जो पठनीय होने के लिए पर्याप्त सरल था, लेकिन निष्पादन योग्य होने के लिए पर्याप्त स्पष्ट नहीं था, आविष्कारकों को एक कार्यात्मक प्रोग्रामिंग, [[घोषणात्मक प्रोग्रामिंग]] भाषा दृष्टिकोण पर व्यवस्थित करने के लिए प्रेरित किया, जहां एक प्रोग्रामर उन्हें प्राप्त करने के साधनों के बजाय वांछित परिणामों का वर्णन करता है। भाषा तब समस्या को सबसे कुशल तरीके से हल करने के लिए स्वतंत्र है जो इसे खोज सकती है।


जैसे-जैसे भाषा विकसित हुई, शोधकर्ताओं ने उपभोग-सरलीकृत-उत्पादन (सीएसपी) सहित नए कम्प्यूटेशनल दृष्टिकोण विकसित किए।<ref>{{Cite web |url=https://texasmulticore.com/wp-content/uploads/2016/05/2004-ttudamp.pdf |title=उपभोग-सरलीकृत-उत्पादन (सीएसपी)|access-date=2017-01-26 |archive-url=https://web.archive.org/web/20170202050125/https://texasmulticore.com/wp-content/uploads/2016/05/2004-ttudamp.pdf |archive-date=2017-02-02 |url-status=dead }}</ref> 1998 में, समानांतर कंप्यूटिंग के लिए SequenceL को लागू करने के लिए अनुसंधान शुरू हुआ। इसकी परिणति 2004 में हुई जब इसने नॉर्मलाइज़-ट्रांसपोज़ (NT) सिमेंटिक के साथ अपना और अधिक पूर्ण रूप ले लिया,<ref>{{Citation |last1=Nemanich |first1=Brad |last2=Cooke |first2=Daniel |last3=Rushton |first3=Nelson |title=SequenceL: Transparency And Multi-Core Parallelisms |series=DAMP '10 Proceedings of the 5th ACM SIGPLAN workshop on Declarative Aspects of Multicore Programming |publisher=ACM |year=2010 |pages=45–52 |location=New York, NY, US |url=https://texasmulticore.com/wp-content/uploads/2016/05/2004-ttudamp.pdf |access-date=2017-01-26 |archive-url=https://web.archive.org/web/20170202050125/https://texasmulticore.com/wp-content/uploads/2016/05/2004-ttudamp.pdf |archive-date=2017-02-02 |url-status=dead }}</ref><ref>{{Citation |last1=Cooke |first1=Daniel |last2=Rushton |first2=Nelson |last3=Nemanich |first3=Brad |last4=Watson |first4=Robert G. |last5=Andersen |first5=Per |title=Normalize, Transpose, and Distribute: An Automatic Approach for Handling Nonscalars |journal=ACM Transactions on Programming Languages and Systems |volume=30 |issue=2 |pages=1–49 |date=March 2008 |doi=10.1145/1330017.1330020 |s2cid=6833254 }}</ref> जो केंद्रीय प्रसंस्करण इकाइयों (सीपीयू) के प्रमुख विक्रेताओं के साथ घड़ी की गति को बढ़ाने के बजाय मल्टी-कोर प्रोसेसर में एक प्रमुख बदलाव के साथ मेल खाता है। NT शब्दार्थ कार्य-घोड़ा है, जिसका उपयोग GAMMA के समान [[डेटा प्रवाह]] जैसी निष्पादन रणनीति के आधार पर संरचनाओं को सरल और विघटित करने के लिए किया जा रहा है।<ref>{{Citation |last1=Banater |first1=J-P |last2=Le Metayer |first2=D. |title=Programming by Multiset Transformation |journal=Communications of the ACM |date=January 1993 |volume=36 |issue=1 |pages=98–111 |doi= 10.1145/151233.151242|s2cid=17076396 |url=https://hal.inria.fr/inria-00075353/file/RR-1205.pdf }}</ref> और एनईएसएल।<ref>{{Citation |last1=Blelloch |first1=Guy |title=Programming Parallel Algorithms |journal=Communications of the ACM |date=March 1996 |volume=39 |issue= 3 |pages=85–97 |doi=10.1145/227234.227246|citeseerx=10.1.1.141.5884 |s2cid=12118850 }}</ref> NT सिमेंटिक Lämmel और Peyton-Jones के बॉयलरप्लेट उन्मूलन के समान लक्ष्य प्राप्त करता है।<ref>{{Citation |last1=Lämmel |first1=Ralf |last2=Peyton-Jones |first2=Simon |title=Scrap your boilerplate: a practical design pattern for generic programming |journal=Proceedings of TLDI 2003 |year=2003}}</ref><ref>{{Citation |last1=Lämmel |first1=Ralf |last2=Peyton-Jones |first2=Simon |title=Scrap more boilerplate: reflection, zips, and generalised casts |journal=Proceedings of ICFP 2004 |year=2004}}</ref> भाषा की अन्य सभी विशेषताओं को इन दो कानूनों से परिभाषित किया जा सकता है - जिसमें [[रिकर्सन (कंप्यूटर विज्ञान)]], सबस्क्रिप्टिंग संरचनाएं, फ़ंक्शन संदर्भ और फ़ंक्शन निकायों का मूल्यांकन शामिल है।<ref>{{Citation |last1=Cooke |first1=Daniel |last2=Rushton |first2=Nelson |title=Iterative and Parallel Algorithm Design from High Level Language Traces |journal=ICCS'05 Proceedings of the 5th International Conference on Computational Science |date=January 1993 |volume=Part III |pages=891–894 |doi=10.1007/11428862_132 |isbn=978-3-540-26044-8 |doi-access=free }}</ref><ref>{{Citation |last1=Cooke |first1=Daniel |last2=Rushton |first2=Nelson |title=SequenceL – An Overview of a Simple Language |journal=Proceedings of the 2005 International Conference on Programming Languages and Compilers, PLC 2005 |date=June 27–30, 2005 }}</ref>
जैसे-जैसे भाषा विकसित हुई, शोधकर्ताओं ने उपभोग-सरलीकृत-उत्पादन (सीएसपी) सहित नए कम्प्यूटेशनल दृष्टिकोण विकसित किए।<ref>{{Cite web |url=https://texasmulticore.com/wp-content/uploads/2016/05/2004-ttudamp.pdf |title=उपभोग-सरलीकृत-उत्पादन (सीएसपी)|access-date=2017-01-26 |archive-url=https://web.archive.org/web/20170202050125/https://texasmulticore.com/wp-content/uploads/2016/05/2004-ttudamp.pdf |archive-date=2017-02-02 |url-status=dead }}</ref> 1998 में, समानांतर कंप्यूटिंग के लिए अनुक्रम एल को लागू करने के लिए अनुसंधान शुरू हुआ। इसकी परिणति 2004 में हुई जब इसने सामान्यीकृत-स्थानांतरण (NT) सिमेंटिक के साथ अपना और अधिक पूर्ण रूप ले लिया,<ref>{{Citation |last1=Nemanich |first1=Brad |last2=Cooke |first2=Daniel |last3=Rushton |first3=Nelson |title=SequenceL: Transparency And Multi-Core Parallelisms |series=DAMP '10 Proceedings of the 5th ACM SIGPLAN workshop on Declarative Aspects of Multicore Programming |publisher=ACM |year=2010 |pages=45–52 |location=New York, NY, US |url=https://texasmulticore.com/wp-content/uploads/2016/05/2004-ttudamp.pdf |access-date=2017-01-26 |archive-url=https://web.archive.org/web/20170202050125/https://texasmulticore.com/wp-content/uploads/2016/05/2004-ttudamp.pdf |archive-date=2017-02-02 |url-status=dead }}</ref><ref>{{Citation |last1=Cooke |first1=Daniel |last2=Rushton |first2=Nelson |last3=Nemanich |first3=Brad |last4=Watson |first4=Robert G. |last5=Andersen |first5=Per |title=Normalize, Transpose, and Distribute: An Automatic Approach for Handling Nonscalars |journal=ACM Transactions on Programming Languages and Systems |volume=30 |issue=2 |pages=1–49 |date=March 2008 |doi=10.1145/1330017.1330020 |s2cid=6833254 }}</ref> जो केंद्रीय प्रसंस्करण इकाइयों (सीपीयू) के प्रमुख विक्रेताओं के साथ घड़ी की गति को बढ़ाने के बजाय मल्टी-कोर प्रोसेसर में एक प्रमुख बदलाव के साथ मेल खाता है। NT सिमेंटिक वर्क-हॉर्स है, जिसका उपयोग गामा  और एनईएसएल के समान [[डेटा प्रवाह]] जैसी निष्पादन रणनीति के आधार पर संरचनाओं को सरल और विघटित करने के लिए किया जा रहा है।<ref>{{Citation |last1=Banater |first1=J-P |last2=Le Metayer |first2=D. |title=Programming by Multiset Transformation |journal=Communications of the ACM |date=January 1993 |volume=36 |issue=1 |pages=98–111 |doi= 10.1145/151233.151242|s2cid=17076396 |url=https://hal.inria.fr/inria-00075353/file/RR-1205.pdf }}</ref> <ref>{{Citation |last1=Blelloch |first1=Guy |title=Programming Parallel Algorithms |journal=Communications of the ACM |date=March 1996 |volume=39 |issue= 3 |pages=85–97 |doi=10.1145/227234.227246|citeseerx=10.1.1.141.5884 |s2cid=12118850 }}</ref> NT सिमेंटिक लैमेल और पेयटन-जोन्स के बॉयलरप्लेट उन्मूलन के समान लक्ष्य प्राप्त करता है।<ref>{{Citation |last1=Lämmel |first1=Ralf |last2=Peyton-Jones |first2=Simon |title=Scrap your boilerplate: a practical design pattern for generic programming |journal=Proceedings of TLDI 2003 |year=2003}}</ref><ref>{{Citation |last1=Lämmel |first1=Ralf |last2=Peyton-Jones |first2=Simon |title=Scrap more boilerplate: reflection, zips, and generalised casts |journal=Proceedings of ICFP 2004 |year=2004}}</ref> भाषा की अन्य सभी विशेषताओं को इन दो नियामो से परिभाषित किया जा सकता है - जिसमें [[रिकर्सन (कंप्यूटर विज्ञान)]], सबस्क्रिप्टिंग संरचनाएं, फ़ंक्शन संदर्भ और फ़ंक्शन निकायों का मूल्यांकन शामिल है।<ref>{{Citation |last1=Cooke |first1=Daniel |last2=Rushton |first2=Nelson |title=Iterative and Parallel Algorithm Design from High Level Language Traces |journal=ICCS'05 Proceedings of the 5th International Conference on Computational Science |date=January 1993 |volume=Part III |pages=891–894 |doi=10.1007/11428862_132 |isbn=978-3-540-26044-8 |doi-access=free }}</ref><ref>{{Citation |last1=Cooke |first1=Daniel |last2=Rushton |first2=Nelson |title=SequenceL – An Overview of a Simple Language |journal=Proceedings of the 2005 International Conference on Programming Languages and Compilers, PLC 2005 |date=June 27–30, 2005 }}</ref>
हालांकि यह मूल मंशा नहीं थी, लेकिन इन नए दृष्टिकोणों ने प्रोग्रामर को पारदर्शी रूप से प्रदर्शन किए गए संचालन के एक बड़े अंश को समानांतर करने के लिए भाषा की अनुमति दी। 2006 में, टेक्सास टेक यूनिवर्सिटी में एक प्रोटोटाइप ऑटो-पैरेललाइजिंग कंपाइलर विकसित किया गया था। 2009 में, टेक्सास टेक ने टेक्सास मल्टीकोर टेक्नोलॉजीज (टीएमटी) को बौद्धिक संपदा का लाइसेंस दिया,<ref>[http://www.texasmulticoretechnologies.com Texas Multicore Technologies, Inc.]</ref> अनुवर्ती वाणिज्यिक विकास के लिए। जनवरी 2017 में टीएमटी ने वी3 जारी किया, जिसमें व्यावसायिक व्यावसायिक संस्करण के अलावा डाउनलोड के लिए एक मुफ्त सामुदायिक संस्करण भी शामिल है।
 
हालांकि यह मूल उद्देश्य नहीं था, लेकिन इन नए दृष्टिकोणों ने प्रोग्रामर को पारदर्शी रूप से प्रदर्शन किए गए संचालन के एक बड़े अंश को समानांतर करने के लिए भाषा की अनुमति दी। 2006 में, टेक्सास टेक यूनिवर्सिटी में एक प्रोटोटाइप ऑटो-पैरेललाइजिंग कंपाइलर विकसित किया गया था। 2009 में, टेक्सास टेक ने टेक्सास मल्टीकोर टेक्नोलॉजीज (टीएमटी) को बौद्धिक संपदा का लाइसेंस दिया,<ref>[http://www.texasmulticoretechnologies.com Texas Multicore Technologies, Inc.]</ref> अनुवर्ती वाणिज्यिक विकास के लिए। जनवरी 2017 में टीएमटी ने वी3 जारी किया, जिसमें व्यावसायिक व्यावसायिक संस्करण के अलावा डाउनलोड के लिए एक मुफ्त सामुदायिक संस्करण भी शामिल है।


== डिजाइन ==
== डिजाइन ==
SequenceL को एल्गोरिथम कोड पर ध्यान केंद्रित करते हुए सीखने और उपयोग करने के लिए जितना संभव हो उतना सरल बनाया गया है, जहां यह मूल्य जोड़ता है, उदाहरण के लिए, आविष्कारक ने I/O को फिर से शुरू नहीं करने का फैसला किया क्योंकि C ने इसे अच्छी तरह से संभाला। नतीजतन, पूर्ण [https://web.archive.org/web/20170202050741/https://texasmulticore.com/documentation/3.0/0710language_ref.html SequenceL के लिए भाषा संदर्भ] प्रचुर उदाहरणों के साथ केवल 40 पृष्ठ हैं, और इसके औपचारिक व्याकरण में लगभग 15 उत्पादन नियम हैं।<ref>{{Citation |last1=Nemanich |first1=Brad |last2=Cooke |first2=Daniel |last3=Rushton |first3=Nelson |title=SequenceL: Transparency And Multi-Core Parallelisms |series=DAMP '10 Proceedings of the 5th ACM SIGPLAN workshop on Declarative Aspects of Multicore Programming |publisher=ACM |year=2010 |pages=45–52 |location=New York, NY, US |url=https://texasmulticore.com/wp-content/uploads/2016/05/2004-ttudamp.pdf |access-date=2017-01-26 |archive-url=https://web.archive.org/web/20170202050125/https://texasmulticore.com/wp-content/uploads/2016/05/2004-ttudamp.pdf |archive-date=2017-02-02 |url-status=dead }}</ref>
अनुक्रम एल को एल्गोरिथम कोड पर ध्यान केंद्रित करते हुए सीखने और उपयोग करने के लिए जितना संभव हो उतना सरल बनाया गया है, जहां यह मूल्य जोड़ता है, उदाहरण के लिए, आविष्कारक ने I/O को फिर से शुरू नहीं करने का फैसला किया क्योंकि C ने इसे अच्छी तरह से संभाला। नतीजतन, पूर्ण [https://web.archive.org/web/20170202050741/https://texasmulticore.com/documentation/3.0/0710language_ref.html अनुक्रम एल के लिए भाषा संदर्भ] प्रचुर उदाहरणों के साथ केवल 40 पृष्ठ हैं, और इसके औपचारिक व्याकरण में लगभग 15 उत्पादन नियम हैं।<ref>{{Citation |last1=Nemanich |first1=Brad |last2=Cooke |first2=Daniel |last3=Rushton |first3=Nelson |title=SequenceL: Transparency And Multi-Core Parallelisms |series=DAMP '10 Proceedings of the 5th ACM SIGPLAN workshop on Declarative Aspects of Multicore Programming |publisher=ACM |year=2010 |pages=45–52 |location=New York, NY, US |url=https://texasmulticore.com/wp-content/uploads/2016/05/2004-ttudamp.pdf |access-date=2017-01-26 |archive-url=https://web.archive.org/web/20170202050125/https://texasmulticore.com/wp-content/uploads/2016/05/2004-ttudamp.pdf |archive-date=2017-02-02 |url-status=dead }}</ref>
SequenceL का कड़ाई से मूल्यांकन किया जाता है (जैसे [[ लिस्प (प्रोग्रामिंग भाषा) ]]), [[अनुमान टाइप करें]] (जैसे [[ हास्केल (प्रोग्रामिंग भाषा) ]]) के साथ स्टैटिकली टाइप किया जाता है, और इन्फिक्स और प्रीफिक्स ऑपरेटर्स के संयोजन का उपयोग करता है जो मानक, अनौपचारिक गणितीय संकेतन (जैसे C (प्रोग्रामिंग लैंग्वेज)) के समान होता है। , [[पास्कल (प्रोग्रामिंग भाषा)]], पायथन (प्रोग्रामिंग भाषा), आदि)। यह विशुद्ध रूप से घोषणात्मक भाषा है, जिसका अर्थ है कि एक प्रोग्रामर कार्यों को गणितीय अर्थ में परिभाषित करता है, उनके कार्यान्वयन के लिए निर्देश दिए बिना। उदाहरण के लिए, मैट्रिक्स गुणन की गणितीय परिभाषा इस प्रकार है:
अनुक्रम एल का कड़ाई से मूल्यांकन किया जाता है (जैसे [[ लिस्प (प्रोग्रामिंग भाषा) ]]), [[अनुमान टाइप करें]] (जैसे [[ हास्केल (प्रोग्रामिंग भाषा) ]]) के साथ स्टैटिकली टाइप किया जाता है, और इन्फिक्स और प्रीफिक्स ऑपरेटर्स के संयोजन का उपयोग करता है जो मानक, अनौपचारिक गणितीय संकेतन (जैसे C (प्रोग्रामिंग लैंग्वेज)) के समान होता है। , [[पास्कल (प्रोग्रामिंग भाषा)]], पायथन (प्रोग्रामिंग भाषा), आदि)। यह विशुद्ध रूप से घोषणात्मक भाषा है, जिसका अर्थ है कि एक प्रोग्रामर कार्यों को गणितीय अर्थ में परिभाषित करता है, उनके कार्यान्वयन के लिए निर्देश दिए बिना। उदाहरण के लिए, मैट्रिक्स गुणन की गणितीय परिभाषा इस प्रकार है:


: p×n मैट्रिक्स B के साथ m×p मैट्रिक्स A का गुणनफल m×n मैट्रिक्स है जिसकी (i,j)'वीं प्रविष्टि है
: p×n मैट्रिक्स B के साथ m×p मैट्रिक्स A का गुणनफल m×n मैट्रिक्स है जिसकी (i,j)'वीं प्रविष्टि है
::<math>\sum_{k=1}^p A(i,k)B(k,j)</math>
::<math>\sum_{k=1}^p A(i,k)B(k,j)</math>
SequenceL परिभाषा उस परिभाषा को कमोबेश सटीक रूप से दर्शाती है:
अनुक्रम एल परिभाषा उस परिभाषा को कमोबेश सटीक रूप से दर्शाती है:
     मतमुल (ए (2), बी (2)) [आई, जे]: =
     मतमुल (ए (2), बी (2)) [आई, जे]: =
         चलो के: = 1 ... आकार (बी);
         चलो के: = 1 ... आकार (बी);
         संक्षेप में (ए [i, के] * बी [के, जे]);
         संक्षेप में (ए [i, के] * बी [के, जे]);


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


जैसा कि ऊपर उल्लेख किया गया है, SequenceL में इनपुट/आउटपुट (I/O) के लिए कोई अंतर्निहित निर्माण नहीं है क्योंकि इसे अन्य प्रोग्रामिंग भाषाओं के साथ एक योगात्मक तरीके से काम करने के लिए डिज़ाइन किया गया था। मल्टीथ्रेडेड C++ को संकलित करने और 20+ सरलीकृत रैपर और इंटरफ़ेस जेनरेटर ([[SWIG]]) भाषाओं (C, C++, C#, Java, Python, आदि) का समर्थन करने का निर्णय का अर्थ है कि यह मौजूदा डिज़ाइन प्रवाह, प्रशिक्षण और टूल में आसानी से फ़िट हो जाता है। इसका उपयोग मौजूदा अनुप्रयोगों को बढ़ाने, मल्टीकोर लाइब्रेरी बनाने और परिणामी कोड को अन्य कोड के साथ जोड़कर स्टैंडअलोन एप्लिकेशन बनाने के लिए किया जा सकता है जो I/O कार्य करता है। दिए गए इनपुट जैसे कि पायथन और अन्य व्याख्या की गई भाषाओं के साथ एक [[ दुभाषिया (कंप्यूटिंग) ]] से SequenceL फ़ंक्शंस को भी क्वेरी किया जा सकता है।
जैसा कि ऊपर उल्लेख किया गया है, अनुक्रम एल में इनपुट/आउटपुट (I/O) के लिए कोई अंतर्निहित निर्माण नहीं है क्योंकि इसे अन्य प्रोग्रामिंग भाषाओं के साथ एक योगात्मक तरीके से काम करने के लिए डिज़ाइन किया गया था। मल्टीथ्रेडेड C++ को संकलित करने और 20+ सरलीकृत रैपर और इंटरफ़ेस जेनरेटर ([[SWIG]]) भाषाओं (C, C++, C#, Java, Python, आदि) का समर्थन करने का निर्णय का अर्थ है कि यह मौजूदा डिज़ाइन प्रवाह, प्रशिक्षण और टूल में आसानी से फ़िट हो जाता है। इसका उपयोग मौजूदा अनुप्रयोगों को बढ़ाने, मल्टीकोर लाइब्रेरी बनाने और परिणामी कोड को अन्य कोड के साथ जोड़कर स्टैंडअलोन एप्लिकेशन बनाने के लिए किया जा सकता है जो I/O कार्य करता है। दिए गए इनपुट जैसे कि पायथन और अन्य व्याख्या की गई भाषाओं के साथ एक [[ दुभाषिया (कंप्यूटिंग) ]] से अनुक्रम एल फ़ंक्शंस को भी क्वेरी किया जा सकता है।


== सामान्यीकरण-स्थानांतरण ==
== सामान्यीकरण-स्थानांतरण ==
सीक्वेंस एल का मुख्य गैर-स्केलर निर्माण अनुक्रम है, जो अनिवार्य रूप से एक सूची है। दृश्यों को किसी भी स्तर पर नेस्ट किया जा सकता है। कई विशुद्ध रूप से कार्यात्मक भाषाओं में सामान्य पुनरावर्तन के नियमित उपयोग से बचने के लिए, SequenceL सामान्यीकृत-ट्रांसपोज़ (NT) नामक एक तकनीक का उपयोग करता है, जिसमें अनुक्रम के तत्वों पर स्केलर संचालन स्वचालित रूप से वितरित होते हैं।<ref>{{Citation |last1=Cooke |first1=Daniel |last2=Rushton |first2=Nelson |title=SequenceL – An Overview of a Simple Language |journal=Proceedings of the 2005 International Conference on Programming Languages and Compilers, PLC 2005 |date=June 27–30, 2005 }}</ref> उदाहरण के लिए, SequenceL में हमारे पास है
सीक्वेंस एल का मुख्य गैर-स्केलर निर्माण अनुक्रम है, जो अनिवार्य रूप से एक सूची है। दृश्यों को किसी भी स्तर पर नेस्ट किया जा सकता है। कई विशुद्ध रूप से कार्यात्मक भाषाओं में सामान्य पुनरावर्तन के नियमित उपयोग से बचने के लिए, अनुक्रम एल सामान्यीकृत-ट्रांसपोज़ (NT) नामक एक तकनीक का उपयोग करता है, जिसमें अनुक्रम के तत्वों पर स्केलर संचालन स्वचालित रूप से वितरित होते हैं।<ref>{{Citation |last1=Cooke |first1=Daniel |last2=Rushton |first2=Nelson |title=SequenceL – An Overview of a Simple Language |journal=Proceedings of the 2005 International Conference on Programming Languages and Compilers, PLC 2005 |date=June 27–30, 2005 }}</ref> उदाहरण के लिए, अनुक्रम एल में हमारे पास है
:<math>[1,2,3] + 10 == [11,12,13]</math>
:<math>[1,2,3] + 10 == [11,12,13]</math>
इसका परिणाम '+' ऑपरेटर को ओवरलोड करने से नहीं, बल्कि NT के प्रभाव से होता है, जो बिल्ट-इन और यूज़र-डिफ़ाइंड दोनों तरह के सभी ऑपरेशनों तक फैला होता है।
इसका परिणाम '+' ऑपरेटर को ओवरलोड करने से नहीं, बल्कि NT के प्रभाव से होता है, जो बिल्ट-इन और यूज़र-डिफ़ाइंड दोनों तरह के सभी ऑपरेशनों तक फैला होता है।
Line 77: Line 78:
: 1 से बड़ा एक पूर्णांक, जिसमें स्वयं और 1 के अलावा कोई सकारात्मक भाजक नहीं है।
: 1 से बड़ा एक पूर्णांक, जिसमें स्वयं और 1 के अलावा कोई सकारात्मक भाजक नहीं है।


तो एक धनात्मक पूर्णांक z अभाज्य है यदि 2 से लेकर z-1 तक कोई भी संख्या, समावेशी, समान रूप से विभाजित न हो। SequenceL इस समस्या को शाब्दिक रूप से उपरोक्त परिभाषा को भाषा में लिप्यंतरित करके प्रोग्राम करने की अनुमति देता है।
तो एक धनात्मक पूर्णांक z अभाज्य है यदि 2 से लेकर z-1 तक कोई भी संख्या, समावेशी, समान रूप से विभाजित न हो। अनुक्रम एल इस समस्या को शाब्दिक रूप से उपरोक्त परिभाषा को भाषा में लिप्यंतरित करके प्रोग्राम करने की अनुमति देता है।


SequenceL में, 2 से z-1 तक की संख्याओं का एक क्रम, समावेशी, सिर्फ (2...(z-1)) है, इसलिए 100 और 200 के बीच सभी अभाज्य संख्याओं को खोजने के लिए एक कार्यक्रम लिखा जा सकता है:
अनुक्रम एल में, 2 से z-1 तक की संख्याओं का एक क्रम, समावेशी, सिर्फ (2...(z-1)) है, इसलिए 100 और 200 के बीच सभी अभाज्य संख्याओं को खोजने के लिए एक कार्यक्रम लिखा जा सकता है:


     अभाज्य (z) := z जब कोई नहीं (z mod (2...(z-1)) = 0);
     अभाज्य (z) := z जब कोई नहीं (z mod (2...(z-1)) = 0);
Line 94: Line 95:
     खाली
     खाली


प्रोग्राम में 100 और 200 के बीच की स्ट्रिंग दिखाई नहीं देती है। बल्कि, एक प्रोग्रामर आम तौर पर उस हिस्से को तर्क के रूप में पास करेगा। चूंकि कार्यक्रम एक तर्क के रूप में एक स्केलर की अपेक्षा करता है, इसके बजाय संख्याओं के अनुक्रम को पारित करने से SequenceL अनुक्रम के प्रत्येक सदस्य पर स्वचालित रूप से ऑपरेशन करने का कारण बनता है। चूंकि फ़ंक्शन असफल मूल्यों के लिए खाली लौटाता है, परिणाम इनपुट अनुक्रम होगा, लेकिन केवल उन संख्याओं को वापस करने के लिए फ़िल्टर किया जाता है जो प्राइम के मानदंडों को पूरा करते हैं:
प्रोग्राम में 100 और 200 के बीच की स्ट्रिंग दिखाई नहीं देती है। बल्कि, एक प्रोग्रामर आम तौर पर उस हिस्से को तर्क के रूप में पास करेगा। चूंकि कार्यक्रम एक तर्क के रूप में एक स्केलर की अपेक्षा करता है, इसके बजाय संख्याओं के अनुक्रम को पारित करने से अनुक्रम एल अनुक्रम के प्रत्येक सदस्य पर स्वचालित रूप से ऑपरेशन करने का कारण बनता है। चूंकि फ़ंक्शन असफल मूल्यों के लिए खाली लौटाता है, परिणाम इनपुट अनुक्रम होगा, लेकिन केवल उन संख्याओं को वापस करने के लिए फ़िल्टर किया जाता है जो प्राइम के मानदंडों को पूरा करते हैं:


     सीएमडी:> प्राइम (100 ... 200)
     सीएमडी:> प्राइम (100 ... 200)
     [101,103,107,109,113,127,131,137,139,149,151,157,163,167,173,179,181,191,193,197,199]
     [101,103,107,109,113,127,131,137,139,149,151,157,163,167,173,179,181,191,193,197,199]


एक बहुत ही कम और पठनीय कार्यक्रम के साथ इस समस्या को हल करने के अलावा, नेस्टेड अनुक्रमों के SequenceL का मूल्यांकन सभी समानांतर में किया जाएगा।
एक बहुत ही कम और पठनीय कार्यक्रम के साथ इस समस्या को हल करने के अलावा, नेस्टेड अनुक्रमों के अनुक्रम एल का मूल्यांकन सभी समानांतर में किया जाएगा।


== अवयव ==
== अवयव ==
Line 108: Line 109:


=== संकलक ===
=== संकलक ===
एक कमांड-लाइन कंपाइलर SequenceL कोड पढ़ता है और अत्यधिक समानांतर, स्वचालित वैश्वीकरण, C++ और वैकल्पिक रूप से OpenCL उत्पन्न करता है, जिसे निष्पादित करने के लिए SequenceL रनटाइम लाइब्रेरी से जोड़ा जाना चाहिए।
एक कमांड-लाइन कंपाइलर अनुक्रम एल कोड पढ़ता है और अत्यधिक समानांतर, स्वचालित वैश्वीकरण, C++ और वैकल्पिक रूप से OpenCL उत्पन्न करता है, जिसे निष्पादित करने के लिए अनुक्रम एल रनटाइम लाइब्रेरी से जोड़ा जाना चाहिए।


=== रनटाइम ===
=== रनटाइम ===
Line 114: Line 115:


=== ग्रहण आईडीई प्लग-इन डीबगर === के साथ
=== ग्रहण आईडीई प्लग-इन डीबगर === के साथ
एक एक्लिप्स (सॉफ्टवेयर) एकीकृत विकास पर्यावरण [[प्लग-इन (कंप्यूटिंग)]]|प्लग-इन मानक संपादन क्षमताएं (फंक्शन रोलअप, क्रोमाकोडिंग, आदि), और एक SequenceL डिबगिंग वातावरण प्रदान करता है। यह प्लग-इन SequenceL इंटरप्रेटर के विरुद्ध चलता है, इसलिए मल्टीथ्रेडेड कोड को डीबग करने के लिए उपयोग नहीं किया जा सकता है; हालाँकि, स्वचालित समांतरता प्रदान करके, समानांतर SequenceL कोड की डिबगिंग वास्तव में अनुक्रमिक SequenceL कोड की शुद्धता की पुष्टि कर रही है। यही है, अगर यह क्रमिक रूप से सही ढंग से चलता है, तो इसे समानांतर में सही ढंग से चलना चाहिए - इसलिए दुभाषिया में डिबगिंग पर्याप्त है।
एक एक्लिप्स (सॉफ्टवेयर) एकीकृत विकास पर्यावरण [[प्लग-इन (कंप्यूटिंग)]]|प्लग-इन मानक संपादन क्षमताएं (फंक्शन रोलअप, क्रोमाकोडिंग, आदि), और एक अनुक्रम एल डिबगिंग वातावरण प्रदान करता है। यह प्लग-इन अनुक्रम एल इंटरप्रेटर के विरुद्ध चलता है, इसलिए मल्टीथ्रेडेड कोड को डीबग करने के लिए उपयोग नहीं किया जा सकता है; हालाँकि, स्वचालित समांतरता प्रदान करके, समानांतर अनुक्रम एल कोड की डिबगिंग वास्तव में अनुक्रमिक अनुक्रम एल कोड की शुद्धता की पुष्टि कर रही है। यही है, अगर यह क्रमिक रूप से सही ढंग से चलता है, तो इसे समानांतर में सही ढंग से चलना चाहिए - इसलिए दुभाषिया में डिबगिंग पर्याप्त है।


=== पुस्तकालय ===
=== पुस्तकालय ===
प्रोग्रामिंग प्रक्रिया को सुव्यवस्थित करने और सर्वोत्तम अभ्यास उदाहरणों के रूप में सेवा करने के लिए विभिन्न गणित और अन्य मानक फ़ंक्शन पुस्तकालयों को SequenceL स्रोत कोड के रूप में शामिल किया गया है। इन्हें आयात किया जा सकता है, ठीक उसी तरह जैसे C या C++ लाइब्रेरी #शामिल हैं।
प्रोग्रामिंग प्रक्रिया को सुव्यवस्थित करने और सर्वोत्तम अभ्यास उदाहरणों के रूप में सेवा करने के लिए विभिन्न गणित और अन्य मानक फ़ंक्शन पुस्तकालयों को अनुक्रम एल स्रोत कोड के रूप में शामिल किया गया है। इन्हें आयात किया जा सकता है, ठीक उसी तरह जैसे C या C++ लाइब्रेरी #शामिल हैं।


== यह भी देखें ==
== यह भी देखें ==
Line 138: Line 139:
==बाहरी संबंध==
==बाहरी संबंध==
* {{Official website|texasmulticore.com}}{{Dead link|date=May 2018}} Texas Multicore Technologies
* {{Official website|texasmulticore.com}}{{Dead link|date=May 2018}} Texas Multicore Technologies
* [https://web.archive.org/web/20170415165711/https://texasmulticore.com/technology/multicore-performance/ Why SequenceL Works]
* [https://web.archive.org/web/20170415165711/https://texasmulticore.com/technology/multicore-performance/ Why अनुक्रम एल Works]
* [https://web.archive.org/web/20170415181140/https://texasmulticore.com/technology/openmp-comparison/ OpenMP compared to SequenceL]
* [https://web.archive.org/web/20170415181140/https://texasmulticore.com/technology/openmp-comparison/ OpenMP compared to अनुक्रम एल]
* [https://web.archive.org/web/20170412062102/https://texasmulticore.com/products/features/ SequenceL Features]
* [https://web.archive.org/web/20170412062102/https://texasmulticore.com/products/features/ अनुक्रम एल Features]
* [https://web.archive.org/web/20170412063032/https://texasmulticore.com/technology/patented-auto-parallel/ Overview: Patented Automatic Parallelization in SequenceL]
* [https://web.archive.org/web/20170412063032/https://texasmulticore.com/technology/patented-auto-parallel/ Overview: Patented Automatic Parallelization in अनुक्रम एल]
* [https://www.youtube.com/channel/UCb6JyUsAuS_vmBAE3gXVKzQ YouTube: Texas Multicore Technologies]
* [https://www.youtube.com/channel/UCb6JyUsAuS_vmBAE3gXVKzQ YouTube: Texas Multicore Technologies]
* [https://web.archive.org/web/20170107005833/https://texasmulticore.com/resources/downloads/ Free Downloads]
* [https://web.archive.org/web/20170107005833/https://texasmulticore.com/resources/downloads/ Free Downloads]
Line 147: Line 148:
* [https://web.archive.org/web/20170116162400/https://texasmulticore.com/wp-content/uploads/2016/05/2008-ACM-paper_NTD-Auto-Approach-for-Handling-Nonscalars-1.pdf Normalize, Transpose and Distribute: An Automatic Approach for Handling Nonscalars]
* [https://web.archive.org/web/20170116162400/https://texasmulticore.com/wp-content/uploads/2016/05/2008-ACM-paper_NTD-Auto-Approach-for-Handling-Nonscalars-1.pdf Normalize, Transpose and Distribute: An Automatic Approach for Handling Nonscalars]
* [https://patents.google.com/patent/US8839212B2/en?oq=US+8839212 US Patent 8,839,212, Method, apparatus and computer program product for automatically generating a computer program using consume, simplify and produce semantics with normalize, transpose and distribute operations]
* [https://patents.google.com/patent/US8839212B2/en?oq=US+8839212 US Patent 8,839,212, Method, apparatus and computer program product for automatically generating a computer program using consume, simplify and produce semantics with normalize, transpose and distribute operations]
* [https://rosettacode.org/wiki/Category:SequenceL SequenceL examples on Rosetta Code wiki]
* [https://rosettacode.org/wiki/Category:SequenceL अनुक्रम एल examples on Rosetta Code wiki]
[[Category: उच्च स्तरीय प्रोग्रामिंग भाषाएं]] [[Category: समानांतर कंप्यूटिंग]] [[Category: ऐरे प्रोग्रामिंग भाषाएँ]] [[Category: क्रॉस-प्लेटफ़ॉर्म सॉफ़्टवेयर]] [[Category: घोषणात्मक प्रोग्रामिंग भाषाएँ]] [[Category: कार्यात्मक प्रोग्रामिंग]] [[Category: कार्यात्मक भाषाएँ]] [[Category: वैधानिक रूप से टाइप की गई प्रोग्रामिंग भाषाएँ]] [[Category: विषम कंप्यूटिंग]] [[Category: समवर्ती प्रोग्रामिंग भाषाएँ]] [[Category: गणितीय सॉफ्टवेयर]] [[Category: विंडोज के लिए संख्यात्मक विश्लेषण सॉफ्टवेयर]] [[Category: MacOS के लिए संख्यात्मक विश्लेषण सॉफ्टवेयर]] [[Category: लिनक्स के लिए संख्यात्मक विश्लेषण सॉफ्टवेयर]] [[Category: संख्यात्मक रैखिक बीजगणित]] [[Category: संख्यात्मक प्रोग्रामिंग भाषाएँ]] [[Category: संख्यात्मक सॉफ्टवेयर]] [[Category: विंडोज के लिए विज्ञान सॉफ्टवेयर]] [[Category: MacOS के लिए विज्ञान सॉफ्टवेयर]] [[Category: लिनक्स के लिए विज्ञान सॉफ्टवेयर]] [[Category: जीपीजीपीयू]]  
[[Category: उच्च स्तरीय प्रोग्रामिंग भाषाएं]] [[Category: समानांतर कंप्यूटिंग]] [[Category: ऐरे प्रोग्रामिंग भाषाएँ]] [[Category: क्रॉस-प्लेटफ़ॉर्म सॉफ़्टवेयर]] [[Category: घोषणात्मक प्रोग्रामिंग भाषाएँ]] [[Category: कार्यात्मक प्रोग्रामिंग]] [[Category: कार्यात्मक भाषाएँ]] [[Category: वैधानिक रूप से टाइप की गई प्रोग्रामिंग भाषाएँ]] [[Category: विषम कंप्यूटिंग]] [[Category: समवर्ती प्रोग्रामिंग भाषाएँ]] [[Category: गणितीय सॉफ्टवेयर]] [[Category: विंडोज के लिए संख्यात्मक विश्लेषण सॉफ्टवेयर]] [[Category: MacOS के लिए संख्यात्मक विश्लेषण सॉफ्टवेयर]] [[Category: लिनक्स के लिए संख्यात्मक विश्लेषण सॉफ्टवेयर]] [[Category: संख्यात्मक रैखिक बीजगणित]] [[Category: संख्यात्मक प्रोग्रामिंग भाषाएँ]] [[Category: संख्यात्मक सॉफ्टवेयर]] [[Category: विंडोज के लिए विज्ञान सॉफ्टवेयर]] [[Category: MacOS के लिए विज्ञान सॉफ्टवेयर]] [[Category: लिनक्स के लिए विज्ञान सॉफ्टवेयर]] [[Category: जीपीजीपीयू]]  



Revision as of 13:01, 3 June 2023

SequenceL
ParadigmsParallel computing, Functional, Purely functional, Declarative programming
द्वारा डिज़ाइन किया गयाDr. Daniel Cooke,
Dr. Nelson Rushton,
Dr. Brad Nemanich
DevelopersTexas Tech University,
Texas Multicore Technologies
पहली प्रस्तुति1989; 35 years ago (1989)
टाइपिंग अनुशासनStatic, type inference
प्लेटफॉर्मx86, Power, ARM
ओएसWindows, macOS, Linux
लाइसेंसProprietary[1]
वेबसाइटtexasmulticore.com[dead link]

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

अनुक्रम एल में लिखे गए प्रोग्राम को थ्रेड (कंप्यूटिंग) कोड में संकलित किया जा सकता है जो समानांतर में चलता है, प्रोग्रामर से कोई स्पष्ट संकेत नहीं मिलता है कि कैसे या क्या समानांतर करना है। As of 2015, अनुक्रम एल संकलक के संस्करण C++ और ओपनसीएल में समानांतर कोड उत्पन्न करते हैं, जो इसे C (प्रोग्रामिंग भाषा), C ++, C # (प्रोग्रामिंग भाषा), फोरट्रान, जावा (प्रोग्रामिंग भाषा) और पायथन (प्रोग्रामिंग भाषा) सहित सबसे लोकप्रिय प्रोग्रामिंग भाषाओं के साथ काम करने की अनुमति देता है। और पायथन (प्रोग्रामिंग भाषा)। एक प्लेटफ़ॉर्म-विशिष्ट रनटाइम थ्रेड्स को सुरक्षित रूप से प्रबंधित करता है, स्वचालित रूप से उपलब्ध कोर की संख्या के अनुसार समानांतर प्रदर्शन प्रदान करता है, वर्तमान में x86, पावर8 और एआरएम प्लेटफ़ॉर्म का समर्थन करता है।

इतिहास

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

परियोजना के प्रमुख शोधकर्ता प्रारंभ में डॉ. डेनियल कुक थे,[2] जो जल्द ही डॉ. नेल्सन रशटन (टेक्सास के एक अन्य टेक प्रोफेसर) और बाद में डॉ. ब्रैड नेमनिच (तब कुक के अधीन एक पीएचडी छात्र) से जुड़ गए। एक ऐसी भाषा बनाने का लक्ष्य जो पठनीय होने के लिए पर्याप्त सरल था, लेकिन निष्पादन योग्य होने के लिए पर्याप्त स्पष्ट नहीं था, आविष्कारकों को एक कार्यात्मक प्रोग्रामिंग, घोषणात्मक प्रोग्रामिंग भाषा दृष्टिकोण पर व्यवस्थित करने के लिए प्रेरित किया, जहां एक प्रोग्रामर उन्हें प्राप्त करने के साधनों के बजाय वांछित परिणामों का वर्णन करता है। भाषा तब समस्या को सबसे कुशल तरीके से हल करने के लिए स्वतंत्र है जो इसे खोज सकती है।

जैसे-जैसे भाषा विकसित हुई, शोधकर्ताओं ने उपभोग-सरलीकृत-उत्पादन (सीएसपी) सहित नए कम्प्यूटेशनल दृष्टिकोण विकसित किए।[3] 1998 में, समानांतर कंप्यूटिंग के लिए अनुक्रम एल को लागू करने के लिए अनुसंधान शुरू हुआ। इसकी परिणति 2004 में हुई जब इसने सामान्यीकृत-स्थानांतरण (NT) सिमेंटिक के साथ अपना और अधिक पूर्ण रूप ले लिया,[4][5] जो केंद्रीय प्रसंस्करण इकाइयों (सीपीयू) के प्रमुख विक्रेताओं के साथ घड़ी की गति को बढ़ाने के बजाय मल्टी-कोर प्रोसेसर में एक प्रमुख बदलाव के साथ मेल खाता है। NT सिमेंटिक वर्क-हॉर्स है, जिसका उपयोग गामा और एनईएसएल के समान डेटा प्रवाह जैसी निष्पादन रणनीति के आधार पर संरचनाओं को सरल और विघटित करने के लिए किया जा रहा है।[6] [7] NT सिमेंटिक लैमेल और पेयटन-जोन्स के बॉयलरप्लेट उन्मूलन के समान लक्ष्य प्राप्त करता है।[8][9] भाषा की अन्य सभी विशेषताओं को इन दो नियामो से परिभाषित किया जा सकता है - जिसमें रिकर्सन (कंप्यूटर विज्ञान), सबस्क्रिप्टिंग संरचनाएं, फ़ंक्शन संदर्भ और फ़ंक्शन निकायों का मूल्यांकन शामिल है।[10][11]

हालांकि यह मूल उद्देश्य नहीं था, लेकिन इन नए दृष्टिकोणों ने प्रोग्रामर को पारदर्शी रूप से प्रदर्शन किए गए संचालन के एक बड़े अंश को समानांतर करने के लिए भाषा की अनुमति दी। 2006 में, टेक्सास टेक यूनिवर्सिटी में एक प्रोटोटाइप ऑटो-पैरेललाइजिंग कंपाइलर विकसित किया गया था। 2009 में, टेक्सास टेक ने टेक्सास मल्टीकोर टेक्नोलॉजीज (टीएमटी) को बौद्धिक संपदा का लाइसेंस दिया,[12] अनुवर्ती वाणिज्यिक विकास के लिए। जनवरी 2017 में टीएमटी ने वी3 जारी किया, जिसमें व्यावसायिक व्यावसायिक संस्करण के अलावा डाउनलोड के लिए एक मुफ्त सामुदायिक संस्करण भी शामिल है।

डिजाइन

अनुक्रम एल को एल्गोरिथम कोड पर ध्यान केंद्रित करते हुए सीखने और उपयोग करने के लिए जितना संभव हो उतना सरल बनाया गया है, जहां यह मूल्य जोड़ता है, उदाहरण के लिए, आविष्कारक ने I/O को फिर से शुरू नहीं करने का फैसला किया क्योंकि C ने इसे अच्छी तरह से संभाला। नतीजतन, पूर्ण अनुक्रम एल के लिए भाषा संदर्भ प्रचुर उदाहरणों के साथ केवल 40 पृष्ठ हैं, और इसके औपचारिक व्याकरण में लगभग 15 उत्पादन नियम हैं।[13] अनुक्रम एल का कड़ाई से मूल्यांकन किया जाता है (जैसे लिस्प (प्रोग्रामिंग भाषा) ), अनुमान टाइप करें (जैसे हास्केल (प्रोग्रामिंग भाषा) ) के साथ स्टैटिकली टाइप किया जाता है, और इन्फिक्स और प्रीफिक्स ऑपरेटर्स के संयोजन का उपयोग करता है जो मानक, अनौपचारिक गणितीय संकेतन (जैसे C (प्रोग्रामिंग लैंग्वेज)) के समान होता है। , पास्कल (प्रोग्रामिंग भाषा), पायथन (प्रोग्रामिंग भाषा), आदि)। यह विशुद्ध रूप से घोषणात्मक भाषा है, जिसका अर्थ है कि एक प्रोग्रामर कार्यों को गणितीय अर्थ में परिभाषित करता है, उनके कार्यान्वयन के लिए निर्देश दिए बिना। उदाहरण के लिए, मैट्रिक्स गुणन की गणितीय परिभाषा इस प्रकार है:

p×n मैट्रिक्स B के साथ m×p मैट्रिक्स A का गुणनफल m×n मैट्रिक्स है जिसकी (i,j)'वीं प्रविष्टि है

अनुक्रम एल परिभाषा उस परिभाषा को कमोबेश सटीक रूप से दर्शाती है:

   मतमुल (ए (2), बी (2)) [आई, जे]: =
       चलो के: = 1 ... आकार (बी);
       संक्षेप में (ए [i, के] * बी [के, जे]);

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

जैसा कि ऊपर उल्लेख किया गया है, अनुक्रम एल में इनपुट/आउटपुट (I/O) के लिए कोई अंतर्निहित निर्माण नहीं है क्योंकि इसे अन्य प्रोग्रामिंग भाषाओं के साथ एक योगात्मक तरीके से काम करने के लिए डिज़ाइन किया गया था। मल्टीथ्रेडेड C++ को संकलित करने और 20+ सरलीकृत रैपर और इंटरफ़ेस जेनरेटर (SWIG) भाषाओं (C, C++, C#, Java, Python, आदि) का समर्थन करने का निर्णय का अर्थ है कि यह मौजूदा डिज़ाइन प्रवाह, प्रशिक्षण और टूल में आसानी से फ़िट हो जाता है। इसका उपयोग मौजूदा अनुप्रयोगों को बढ़ाने, मल्टीकोर लाइब्रेरी बनाने और परिणामी कोड को अन्य कोड के साथ जोड़कर स्टैंडअलोन एप्लिकेशन बनाने के लिए किया जा सकता है जो I/O कार्य करता है। दिए गए इनपुट जैसे कि पायथन और अन्य व्याख्या की गई भाषाओं के साथ एक दुभाषिया (कंप्यूटिंग) से अनुक्रम एल फ़ंक्शंस को भी क्वेरी किया जा सकता है।

सामान्यीकरण-स्थानांतरण

सीक्वेंस एल का मुख्य गैर-स्केलर निर्माण अनुक्रम है, जो अनिवार्य रूप से एक सूची है। दृश्यों को किसी भी स्तर पर नेस्ट किया जा सकता है। कई विशुद्ध रूप से कार्यात्मक भाषाओं में सामान्य पुनरावर्तन के नियमित उपयोग से बचने के लिए, अनुक्रम एल सामान्यीकृत-ट्रांसपोज़ (NT) नामक एक तकनीक का उपयोग करता है, जिसमें अनुक्रम के तत्वों पर स्केलर संचालन स्वचालित रूप से वितरित होते हैं।[14] उदाहरण के लिए, अनुक्रम एल में हमारे पास है

इसका परिणाम '+' ऑपरेटर को ओवरलोड करने से नहीं, बल्कि NT के प्रभाव से होता है, जो बिल्ट-इन और यूज़र-डिफ़ाइंड दोनों तरह के सभी ऑपरेशनों तक फैला होता है। एक अन्य उदाहरण के रूप में, यदि f() एक 3-तर्क फलन है जिसके तर्क अदिश हैं, तो किसी भी उपयुक्त x और z के लिए हमारे पास होगा

उदाहरण के लिए, एक बार में कई तर्कों के लिए NT निर्माण का उपयोग किया जा सकता है

यह तब भी काम करता है जब अपेक्षित तर्क किसी भी प्रकार के टी का गैर-अदिश होता है, और वास्तविक तर्क प्रकार टी की वस्तुओं की एक सूची है (या, अधिक सामान्यता में, कोई डेटा संरचना जिसका निर्देशांक प्रकार टी के हैं)। उदाहरण के लिए, यदि एक मैट्रिक्स है और एक्सs मेट्रिसेस की एक सूची है [X1, ..., एक्सn], और मैट्रिक्स गुणा की उपरोक्त परिभाषा दी गई है, अनुक्रम एल में हमारे पास होगा

   मटमुल (ए, एक्सs) = [मथमुल (ए, एक्स1),..., मटमुल (ए, एक्सn)]

एक नियम के रूप में, एनटी पुनरावृत्ति, पुनरावर्तन, या उच्च स्तरीय कार्यात्मक ऑपरेटरों की आवश्यकता को समाप्त कर देता है

  1. डेटा संरचना के प्रत्येक सदस्य के लिए समान कार्य करें, या करने के लिए
  2. समान आकार की संरचनाओं के संबंधित भागों को एक साथ प्रोसेस करें।

यह पुनरावृत्ति और पुनरावर्तन के अधिकांश उपयोगों के लिए खाता है।

उदाहरण: अभाज्य संख्याएँ

एक अच्छा उदाहरण जो उपरोक्त अवधारणाओं को प्रदर्शित करता है, अभाज्य संख्याओं को खोजने में होगा। एक प्रमुख संख्या के रूप में परिभाषित किया गया है

1 से बड़ा एक पूर्णांक, जिसमें स्वयं और 1 के अलावा कोई सकारात्मक भाजक नहीं है।

तो एक धनात्मक पूर्णांक z अभाज्य है यदि 2 से लेकर z-1 तक कोई भी संख्या, समावेशी, समान रूप से विभाजित न हो। अनुक्रम एल इस समस्या को शाब्दिक रूप से उपरोक्त परिभाषा को भाषा में लिप्यंतरित करके प्रोग्राम करने की अनुमति देता है।

अनुक्रम एल में, 2 से z-1 तक की संख्याओं का एक क्रम, समावेशी, सिर्फ (2...(z-1)) है, इसलिए 100 और 200 के बीच सभी अभाज्य संख्याओं को खोजने के लिए एक कार्यक्रम लिखा जा सकता है:

   अभाज्य (z) := z जब कोई नहीं (z mod (2...(z-1)) = 0);

जो, अंग्रेजी में सिर्फ कहते हैं,

... तर्क वापस करें यदि 2 और 1 के बीच कोई भी संख्या स्वयं तर्क से कम नहीं है, तो इसे समान रूप से विभाजित करें।

यदि वह शर्त पूरी नहीं होती है, तो फ़ंक्शन कुछ भी नहीं लौटाता है। नतीजतन, इस कार्यक्रम को चलाने से उपज होती है

   सीएमडी:> प्रधान (17)
   17
   सीएमडी:> प्राइम (18)
   खाली

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

   सीएमडी:> प्राइम (100 ... 200)
   [101,103,107,109,113,127,131,137,139,149,151,157,163,167,173,179,181,191,193,197,199]

एक बहुत ही कम और पठनीय कार्यक्रम के साथ इस समस्या को हल करने के अलावा, नेस्टेड अनुक्रमों के अनुक्रम एल का मूल्यांकन सभी समानांतर में किया जाएगा।

अवयव

अनुक्रम एल कोड लिखने में उपयोग के लिए निम्नलिखित सॉफ्टवेयर घटक उपलब्ध हैं और टीएमटी द्वारा समर्थित हैं। Microsoft Windows, macOS, और Linux की अधिकांश किस्में (CentOS, RedHat, OpenSUSE, और Ubuntu (ऑपरेटिंग सिस्टम) सहित) चलाने वाले x86 प्लेटफ़ॉर्म पर सभी घटक उपलब्ध हैं, और ARM आर्किटेक्चर और आईबीएम पावर माइक्रोप्रोसेसर प्लेटफ़ॉर्म पर Linux की अधिकांश किस्में चल रही हैं।

दुभाषिया

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

संकलक

एक कमांड-लाइन कंपाइलर अनुक्रम एल कोड पढ़ता है और अत्यधिक समानांतर, स्वचालित वैश्वीकरण, C++ और वैकल्पिक रूप से OpenCL उत्पन्न करता है, जिसे निष्पादित करने के लिए अनुक्रम एल रनटाइम लाइब्रेरी से जोड़ा जाना चाहिए।

रनटाइम

रनटाइम वातावरण पुस्तकालयों का एक पूर्व-संकलित सेट है जो लक्ष्य प्लेटफॉर्म पर इष्टतम रूप से निष्पादित करने के लिए संकलित समांतर सी ++ कोड के साथ काम करता है। यह Intel थ्रेडेड बिल्डिंग ब्लॉक्स (TBB) पर बनाता है[15] और कैश ऑप्टिमाइज़ेशन, मेमोरी मैनेजमेंट, वर्क क्यू-स्टीलिंग और परफॉर्मेंस मॉनिटरिंग जैसी चीजों को हैंडल करता है।

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

पुस्तकालय

प्रोग्रामिंग प्रक्रिया को सुव्यवस्थित करने और सर्वोत्तम अभ्यास उदाहरणों के रूप में सेवा करने के लिए विभिन्न गणित और अन्य मानक फ़ंक्शन पुस्तकालयों को अनुक्रम एल स्रोत कोड के रूप में शामिल किया गया है। इन्हें आयात किया जा सकता है, ठीक उसी तरह जैसे C या C++ लाइब्रेरी #शामिल हैं।

यह भी देखें

संदर्भ

  1. "SequenceL Licensing". Archived from the original on 2017-02-02. Retrieved 2017-01-26.
  2. "टेक्सास मल्टीकोर टेक्नोलॉजीज में डॉ। डैनियल कुक". Archived from the original on 2016-03-04. Retrieved 2016-02-24.
  3. "उपभोग-सरलीकृत-उत्पादन (सीएसपी)" (PDF). Archived from the original (PDF) on 2017-02-02. Retrieved 2017-01-26.
  4. Nemanich, Brad; Cooke, Daniel; Rushton, Nelson (2010), SequenceL: Transparency And Multi-Core Parallelisms (PDF), DAMP '10 Proceedings of the 5th ACM SIGPLAN workshop on Declarative Aspects of Multicore Programming, New York, NY, US: ACM, pp. 45–52, archived from the original (PDF) on 2017-02-02, retrieved 2017-01-26
  5. Cooke, Daniel; Rushton, Nelson; Nemanich, Brad; Watson, Robert G.; Andersen, Per (March 2008), "Normalize, Transpose, and Distribute: An Automatic Approach for Handling Nonscalars", ACM Transactions on Programming Languages and Systems, 30 (2): 1–49, doi:10.1145/1330017.1330020, S2CID 6833254
  6. Banater, J-P; Le Metayer, D. (January 1993), "Programming by Multiset Transformation" (PDF), Communications of the ACM, 36 (1): 98–111, doi:10.1145/151233.151242, S2CID 17076396
  7. Blelloch, Guy (March 1996), "Programming Parallel Algorithms", Communications of the ACM, 39 (3): 85–97, CiteSeerX 10.1.1.141.5884, doi:10.1145/227234.227246, S2CID 12118850
  8. Lämmel, Ralf; Peyton-Jones, Simon (2003), "Scrap your boilerplate: a practical design pattern for generic programming", Proceedings of TLDI 2003
  9. Lämmel, Ralf; Peyton-Jones, Simon (2004), "Scrap more boilerplate: reflection, zips, and generalised casts", Proceedings of ICFP 2004
  10. Cooke, Daniel; Rushton, Nelson (January 1993), "Iterative and Parallel Algorithm Design from High Level Language Traces", ICCS'05 Proceedings of the 5th International Conference on Computational Science, Part III: 891–894, doi:10.1007/11428862_132, ISBN 978-3-540-26044-8
  11. Cooke, Daniel; Rushton, Nelson (June 27–30, 2005), "SequenceL – An Overview of a Simple Language", Proceedings of the 2005 International Conference on Programming Languages and Compilers, PLC 2005
  12. Texas Multicore Technologies, Inc.
  13. Nemanich, Brad; Cooke, Daniel; Rushton, Nelson (2010), SequenceL: Transparency And Multi-Core Parallelisms (PDF), DAMP '10 Proceedings of the 5th ACM SIGPLAN workshop on Declarative Aspects of Multicore Programming, New York, NY, US: ACM, pp. 45–52, archived from the original (PDF) on 2017-02-02, retrieved 2017-01-26
  14. Cooke, Daniel; Rushton, Nelson (June 27–30, 2005), "SequenceL – An Overview of a Simple Language", Proceedings of the 2005 International Conference on Programming Languages and Compilers, PLC 2005
  15. Intel Threaded Building Blocks (TBB)


बाहरी संबंध