अनुक्रम एल: Difference between revisions
(→डिजाइन) |
No edit summary |
||
(22 intermediate revisions by 3 users not shown) | |||
Line 1: | Line 1: | ||
{{Infobox programming language | {{Infobox programming language | ||
| name = | | name = अनुक्रम एल | ||
| logo = <!-- ( | | logo = <!-- (फ़ाइल का नाम) --> | ||
| logo caption = | | logo caption = | ||
| screenshot = <!-- ( | | screenshot = <!-- (फ़ाइल का नाम) --> | ||
| screenshot caption = | | screenshot caption = | ||
| paradigms = [[Parallel computing]], [[Functional programming|Functional]], [[Purely functional programming|Purely functional]], [[Declarative programming]] | | paradigms = [[Parallel computing]], [[Functional programming|Functional]], [[Purely functional programming|Purely functional]], [[Declarative programming]] | ||
| family = | | family = | ||
| designers = | | designers = डॉ. डेनियल कुक,<br/>डॉ. नेल्सन रशटन,<br/>डॉ. ब्रैड नेमनिच | ||
| developers = | | developers = टेक्सास टेक विश्वविद्यालय,<br/>टेक्सास मल्टीकोर प्रौद्योगिकियों | ||
| released = {{ | | released = {{प्रारंभ तिथि और आयु|1989}} | ||
| latest release version = | | latest release version = | ||
| latest release date = <!-- {{ | | latest release date = <!-- {{प्रारंभ तिथि और उम्र|2016|एमएम|डीडी|डीएफ=हां/नहीं}} --> | ||
| latest preview version = | | latest preview version = | ||
| latest preview date = <!-- {{ | | latest preview date = <!-- {{प्रारंभ तिथि और उम्र|2016|MM|DD|df=yes/no}} --> | ||
| typing = [[ | | typing = [[टाइप सिस्टम#स्टेटिक टाइप चेकिंग|स्टेटिक]], [[टाइप अनुमान]] | ||
| scope = | | scope = | ||
| programming language = | | programming language = | ||
| platform = [[x86]], [[ | | platform = [[x86]], [[आईबीएम पावर माइक्रोप्रोसेसर|पावर]], [[एआरएम आर्किटेक्चर|एआरएम]] | ||
| operating system = [[ | | operating system = [[माइक्रोसॉफ्ट विंडोज|विंडोज]], [[मैकओएस]], [[लिनक्स]] | ||
| file ext = | | file ext = | ||
| file format = <!-- or: | | | file format = <!-- or: | फ़ाइल प्रारूप = --> | ||
| website = {{URL|texasmulticore.com}}{{ | | website = {{URL|texasmulticore.com}}{{डेड लिंक|दिनांक=मई 2018}} | ||
| implementations = | | implementations = | ||
| dialects = | | dialects = | ||
| influenced by = | | influenced by = | ||
| influenced = | | influenced = | ||
| license = [[ | | license = [[स्वामित्व सॉफ्टवेयर|स्वामित्व]]<ref नाम=लाइसेंसिंग>{{साइट वेब |url=https://texasmulticore.com/products/sequencel-licenses/ |title=SequenceL Licensing |access-date=2017-01-26 |archive-url=https://web.archive.org/web/20170202045317/https://texasmulticore.com/products/sequencel-licenses/ |archive-date=2017-02-02 |url-status=dead }}</ref> | ||
}} | }} | ||
अनुक्रम एल एक सामान्य उद्देश्य [[कार्यात्मक प्रोग्रामिंग]] भाषा और [[स्वचालित समानांतरकरण]] ([[समानांतर कंप्यूटिंग]]) संकलक और टूल सेट है, | अनुक्रम एल एक सामान्य उद्देश्य [[कार्यात्मक प्रोग्रामिंग]] भाषा और [[स्वचालित समानांतरकरण]] ([[समानांतर कंप्यूटिंग]]) संकलक और टूल सेट है, जिसकी प्राथमिक अभिकल्पना उद्देश्य [[मल्टी-कोर प्रोसेसर|बहु-कोर प्रोसेसर]] हार्डवेयर पर प्रदर्शन, प्रोग्रामिंग में आसानी, प्लेटफ़ॉर्म सुवाह्यता/अनुकूलन, और कोड स्पष्टता और पठनीयता है। इसका मुख्य लाभ यह है कि इसका उपयोग सीधा कोड लिखने के लिए किया जा सकता है जो स्वचालित रूप से उपलब्ध सभी प्रसंस्करण शक्ति का पूरा लाभ उठाता है, [[प्रोग्रामर|प्रोग्रामर्स]] को समानताओं की पहचान करने, [[स्वचालित वैश्वीकरण]] को निर्दिष्ट करने, [[दौड़ की स्थिति|दौड़ की स्थितियों]] से बचने और [[OpenMP|ओपनएमपी]] जैसे मैनुअल निर्देश-आधारित प्रोग्रामिंग दृष्टिकोण की अन्य चुनौतियों से संबंधित होने की आवश्यकता के बिना। | ||
अनुक्रम एल में लिखे गए प्रोग्राम को [[थ्रेड (कंप्यूटिंग)]] कोड में संकलित किया जा सकता है जो समानांतर में चलता है, प्रोग्रामर से कोई स्पष्ट संकेत नहीं मिलता है कि कैसे या क्या समानांतर करना है। {{As of|2015}}, अनुक्रम एल [[संकलक]] के संस्करण [[C++]] और [[OpenCL|ओपनसीएल]] में समानांतर कोड उत्पन्न करते हैं, जो इसे C (प्रोग्रामिंग भाषा), C ++, C # (प्रोग्रामिंग भाषा), [[फोरट्रान]], [[जावा (प्रोग्रामिंग भाषा)]] और [[पायथन (प्रोग्रामिंग भाषा)]] सहित सबसे लोकप्रिय प्रोग्रामिंग भाषाओं के साथ काम करने की अनुमति देता है। | अनुक्रम एल में लिखे गए प्रोग्राम को [[थ्रेड (कंप्यूटिंग)]] कोड में संकलित किया जा सकता है जो समानांतर में चलता है, प्रोग्रामर से कोई स्पष्ट संकेत नहीं मिलता है कि कैसे या क्या समानांतर करना है। {{As of|2015}}, अनुक्रम एल [[संकलक]] के संस्करण [[C++]] और [[OpenCL|ओपनसीएल]] में समानांतर कोड उत्पन्न करते हैं, जो इसे C (प्रोग्रामिंग भाषा), C ++, C # (प्रोग्रामिंग भाषा), [[फोरट्रान]], [[जावा (प्रोग्रामिंग भाषा)]] और [[पायथन (प्रोग्रामिंग भाषा)]] सहित सबसे लोकप्रिय प्रोग्रामिंग भाषाओं के साथ काम करने की अनुमति देता है। एक प्लेटफ़ॉर्म-विशिष्ट रनटाइम थ्रेड्स को सुरक्षित रूप से प्रबंधित करता है, स्वचालित रूप से उपलब्ध कोर की संख्या के अनुसार समानांतर प्रदर्शन प्रदान करता है, और वर्तमान में x[[86]], [[POWER8|पावर8]] और [[एआरएम वास्तुकला|एआरएम]] प्लेटफ़ॉर्म का समर्थन करता है। | ||
== इतिहास == | == इतिहास == | ||
अनुक्रम एल को शुरू में 1989 में शुरू होने वाली 20 साल की अवधि में विकसित किया गया था, ज्यादातर [[टेक्सास टेक यूनिवर्सिटी]] में। प्राथमिक धन [[नासा]] से था, जो मूल रूप से एक विशिष्ट भाषा विकसित करना चाहता था जो स्व-सत्यापन थी; अर्थात्, एक बार लिखे जाने के | अनुक्रम एल को शुरू में 1989 में शुरू होने वाली 20 साल की अवधि में विकसित किया गया था, ज्यादातर [[टेक्सास टेक यूनिवर्सिटी]] में। प्राथमिक धन [[नासा]] से था, जो मूल रूप से एक विशिष्ट भाषा विकसित करना चाहता था जो स्व-सत्यापन थी; अर्थात्, एक बार लिखे जाने के पश्चात, आवश्यकताओं को निष्पादित किया जा सकता है, और परिणाम वांछित परिणाम के विरुद्ध सत्यापित किए जा सकते हैं। | ||
परियोजना के प्रमुख शोधकर्ता प्रारंभ में डॉ. डेनियल कुक थे,<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 में, समानांतर कंप्यूटिंग के लिए अनुक्रम एल को लागू करने के लिए अनुसंधान | जैसे-जैसे भाषा विकसित हुई, शोधकर्ताओं ने उपभोग-सरलीकृत-उत्पादन (सीएसपी) सहित नए कम्प्यूटेशनल दृष्टिकोण विकसित किए।<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 जारी किया, जिसमें व्यावसायिक संस्करण के अतिरिक्त डाउनलोड के लिए एक मुफ्त सामुदायिक संस्करण भी सम्मलित है। | |||
== डिजाइन == | == डिजाइन == | ||
अनुक्रम एल को एल्गोरिथम कोड पर ध्यान केंद्रित करते हुए सीखने और उपयोग करने के लिए जितना संभव हो उतना सरल बनाया गया है, जहां यह मूल्य जोड़ता है, उदाहरण के लिए, आविष्कारक ने I/O को फिर से शुरू नहीं करने का फैसला किया क्योंकि C ने इसे अच्छी तरह से संभाला। | अनुक्रम एल को एल्गोरिथम कोड पर ध्यान केंद्रित करते हुए सीखने और उपयोग करने के लिए जितना संभव हो उतना सरल बनाया गया है, जहां यह मूल्य जोड़ता है, उदाहरण के लिए, आविष्कारक ने 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> | ||
: p×n | अनुक्रम एल का सख़्ती से मूल्यांकन किया जाता है (जैसे [[ लिस्प (प्रोग्रामिंग भाषा) | लिस्प (प्रोग्रामिंग भाषा)]] ), सांख्यिकीय रूप से प्रकार [[अनुमान टाइप करें|अनुमान]] (जैसे [[ हास्केल (प्रोग्रामिंग भाषा) |हास्केल (प्रोग्रामिंग भाषा)]] ) के साथ टाइप किया जाता है, और इन्फिक्स और उपसर्ग संचालको के संयोजन का उपयोग करता है जो मानक, अनौपचारिक गणितीय संकेतन (जैसे सी, [[पास्कल (प्रोग्रामिंग भाषा)]], पायथन (प्रोग्रामिंग भाषा), आदि)। के समान होता है। यह विशुद्ध रूप से घोषणात्मक भाषा है, जिसका अर्थ है कि एक प्रोग्रामर कार्यों को गणितीय अर्थ में परिभाषित करता है, उनके कार्यान्वयन के लिए निर्देश दिए बिना। उदाहरण के लिए, आव्यूह गुणन की गणितीय परिभाषा इस प्रकार है: | ||
: 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> | ||
अनुक्रम एल परिभाषा उस परिभाषा को न्यूनाधिक सटीक रूप से दर्शाती है: | अनुक्रम एल परिभाषा उस परिभाषा को न्यूनाधिक सटीक रूप से दर्शाती है: | ||
Line 53: | Line 54: | ||
let k := 1...size(B); | let k := 1...size(B); | ||
in sum( A[i,k] * B[k,j] ); | in sum( A[i,k] * B[k,j] ); | ||
</syntaxhighlight>परिभाषा के बाईं ओर प्रत्येक पैरामीटर ए और बी के | </syntaxhighlight>परिभाषा के बाईं ओर प्रत्येक पैरामीटर ए और बी के पश्चात के सबस्क्रिप्ट इंगित करते हैं कि ए और बी गहराई -2 संरचनाएं हैं (अर्थात, स्केलर्स की सूचियों की सूची), जिन्हें यहां मैट्रिसेस के रूप में माना जाता है। इस औपचारिक परिभाषा से, अनुक्रम एल अपनी (i, j)'वीं प्रविष्टि के सूत्र से परिभाषित उत्पाद के आयामों का अनुमान लगाता है (जोड़े के सेट के रूप में (i, j) जिसके लिए दाहिने हाथ की ओर परिभाषित किया गया है) और प्रत्येक प्रविष्टि की गणना करता है उपरोक्त अनौपचारिक परिभाषा के समान सूत्र द्वारा। ध्यान दें कि इस परिभाषा में पुनरावृत्ति के लिए कोई स्पष्ट निर्देश नहीं हैं, या उस क्रम के लिए जिसमें संचालन किए जाने हैं। इस वजह से, अनुक्रम एल संकलक किसी भी क्रम (समानांतर क्रम सहित) में संचालन कर सकता है जो परिभाषित समीकरण को संतुष्ट करता है। इस उदाहरण में, उत्पाद में निर्देशांकों की गणना इस तरह समानांतर की जाएगी कि, बड़े मेट्रिसेस के लिए, प्रोसेसर की संख्या के साथ रैखिक रूप से स्केल करें। | ||
जैसा कि ऊपर उल्लेख किया गया है, अनुक्रम एल में इनपुट/आउटपुट (I/O) के लिए कोई अंतर्निहित निर्माण नहीं है क्योंकि इसे अन्य प्रोग्रामिंग भाषाओं के साथ एक योगात्मक | जैसा कि ऊपर उल्लेख किया गया है, अनुक्रम एल में इनपुट/आउटपुट (I/O) के लिए कोई अंतर्निहित निर्माण नहीं है क्योंकि इसे अन्य प्रोग्रामिंग भाषाओं के साथ एक योगात्मक उपायो से काम करने के लिए अभिकल्पित किया गया था। बहुथ्रेडेड C++ को संकलित करने और 20+ सरलीकृत रैपर और इंटरफ़ेस जेनरेटर ([[SWIG|स्विग]]) भाषाओं (C, C++, C#, जावा, पाइथन, आदि) का समर्थन करने का निर्णय का अर्थ है कि यह उपस्थित अभिकल्पित प्रवाह, प्रशिक्षण और टूल में आसानी से फ़िट हो जाता है। इसका उपयोग उपस्थिता अनुप्रयोगों को बढ़ाने, बहुकोर लाइब्रेरी बनाने और परिणामी कोड को अन्य कोड के साथ जोड़कर स्टैंडअलोन एप्लिकेशन बनाने के लिए किया जा सकता है जो I/O कार्य करता है। अनुक्रम एल फ़ंक्शंस को दिए गए इनपुट के साथ [[ दुभाषिया (कंप्यूटिंग) |दुभाषिया (कंप्यूटिंग)]] से भी पूछा जा सकता है, जैसे कि पायथन और अन्य व्याख्या की गई भाषाएँ। | ||
== सामान्यीकरण-स्थानांतरण == | == सामान्यीकरण-स्थानांतरण == | ||
अनुक्रम एल का मुख्य गैर-स्केलर निर्माण अनुक्रम है, जो अनिवार्य रूप से एक सूची है। अनुक्रमो को किसी भी स्तर पर नेस्टेड किया जा सकता है। कई विशुद्ध रूप से कार्यात्मक भाषाओं में सामान्य पुनरावर्तन के नियमित उपयोग से बचने के लिए, अनुक्रम एल सामान्यीकृत-ट्रांसपोज़ (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 के प्रभाव से होता है, जो निर्मित में और उपयोगकर्ता परिभाषित में दोनों तरह के सभी संचालन तक फैला होता है। | ||
एक अन्य उदाहरण के रूप में, यदि f() एक 3-तर्क | |||
एक अन्य उदाहरण के रूप में, यदि f() एक 3-तर्क फ़ंक्शंस है जिसके तर्क अदिश हैं, तो किसी भी उपयुक्त x और z के लिए हमारे पास होगा | |||
:<math>f(x,[1,2,3],z) == [f(x,1,z), f(x,2,z), f(x,3,z)]</math> | :<math>f(x,[1,2,3],z) == [f(x,1,z), f(x,2,z), f(x,3,z)]</math> | ||
उदाहरण के लिए, एक बार में कई तर्कों के लिए NT निर्माण का उपयोग किया जा सकता है | उदाहरण के लिए, एक बार में कई तर्कों के लिए NT निर्माण का उपयोग किया जा सकता है | ||
:<math>[1,2,3] + [10,20,30] == [11,22,33]</math> | :<math>[1,2,3] + [10,20,30] == [11,22,33]</math> | ||
यह तब भी काम करता है जब अपेक्षित तर्क किसी भी प्रकार के टी का गैर-अदिश होता है, और वास्तविक तर्क प्रकार टी की वस्तुओं की एक सूची है (या, अधिक सामान्यता में, कोई डेटा संरचना जिसका निर्देशांक प्रकार | यह तब भी काम करता है जब अपेक्षित तर्क किसी भी प्रकार के टी का गैर-अदिश होता है, और वास्तविक तर्क प्रकार टी की वस्तुओं की एक सूची है (या, अधिक सामान्यता में, कोई डेटा संरचना जिसका निर्देशांक प्रकार T के हैं)। उदाहरण के लिए, यदि '''''A''''' एक आव्यूह है और '''''X<sub>s</sub>''''' आव्यूह [X<sub>1</sub>, ..., X<sub>n</sub>],की एक सूची है, और आव्यूह गुणा की उपरोक्त परिभाषा दी गई है, तो अनुक्रम एल में हमारे पास होगा<syntaxhighlight lang="alloy"> | ||
matmul(A,Xs) = [matmul(A,X1),...,matmul(A,Xn)] | |||
</syntaxhighlight> | |||
एक नियम के रूप में, एनटी पुनरावृत्ति, पुनरावर्तन, या उच्च स्तरीय कार्यात्मक | एक नियम के रूप में, एनटी पुनरावृत्ति, पुनरावर्तन, या उच्च स्तरीय कार्यात्मक संक्रियको की आवश्यकता को समाप्त कर देता है | ||
# डेटा संरचना के प्रत्येक | # डेटा संरचना के प्रत्येक भाग के लिए समान कार्य करें, या करने के लिए | ||
#समान आकार की संरचनाओं के संबंधित भागों को एक साथ प्रोसेस करें। | #समान आकार की संरचनाओं के संबंधित भागों को एक साथ प्रोसेस करें। | ||
यह पुनरावृत्ति और पुनरावर्तन के अधिकांश उपयोगों के लिए खाता है। | यह पुनरावृत्ति और पुनरावर्तन के अधिकांश उपयोगों के लिए खाता है। | ||
== उदाहरण: [[अभाज्य संख्या]] | == उदाहरण: [[अभाज्य संख्या|अभाज्य संख्याएँ]] == | ||
एक अच्छा उदाहरण जो उपरोक्त अवधारणाओं को प्रदर्शित करता है, अभाज्य संख्याओं को | एक अच्छा उदाहरण जो उपरोक्त अवधारणाओं को प्रदर्शित करता है, अभाज्य संख्याओं को ढूंढने में होगा। एक प्रमुख संख्या के रूप में परिभाषित किया गया है | ||
: 1 से | : एक पूर्णांक 1 से अधिक है, जिसमें स्वयं और 1 के अतिरिक्त कोई सकारात्मक विभाजक नहीं है। | ||
तो एक धनात्मक पूर्णांक z अभाज्य है यदि 2 से लेकर z-1 तक कोई भी संख्या, समावेशी, समान रूप से विभाजित न हो। | तो एक धनात्मक पूर्णांक z अभाज्य है यदि 2 से लेकर z-1 तक कोई भी संख्या, समावेशी, समान रूप से विभाजित न हो। इस समस्या को शाब्दिक रूप से उपरोक्त परिभाषा को भाषा में लिप्यंतरित करके प्रोग्राम करने की अनुमति देता है। | ||
अनुक्रम एल में, 2 से z-1 तक की संख्याओं का एक क्रम, समावेशी, सिर्फ (2...(z-1)) है, इसलिए 100 और 200 के बीच सभी अभाज्य संख्याओं को | अनुक्रम एल में, 2 से z-1 तक की संख्याओं का एक क्रम, समावेशी, सिर्फ (2...(z-1)) है, इसलिए 100 और 200 के बीच सभी अभाज्य संख्याओं को ढूंढने के लिए एक प्रोग्राम लिखा जा सकता है: | ||
prime(z) := z when none(z mod (2...(z-1)) = 0); | |||
जो, अंग्रेजी में सिर्फ कहते हैं, | जो, अंग्रेजी में सिर्फ कहते हैं, | ||
:... तर्क वापस करें यदि 2 | :... तर्क वापस करें यदि 2 के बीच कोई भी संख्या नहीं है, और तर्क से 1 कम है, इसमें समान रूप से विभाजित करें। | ||
यदि वह शर्त पूरी नहीं होती है, तो फ़ंक्शन कुछ भी नहीं लौटाता है। | यदि वह शर्त पूरी नहीं होती है, तो फ़ंक्शन कुछ भी नहीं लौटाता है। | ||
<syntaxhighlight> | |||
cmd:>prime(17) | |||
17 | |||
cmd:>prime(18) | |||
empty | |||
</syntaxhighlight>प्रोग्राम में 100 और 200 के बीच की स्ट्रिंग दिखाई नहीं देती है। बल्कि, एक प्रोग्रामर सामान्यतः उस भाग को तर्क के रूप में पास करेगा। चूंकि प्रोग्राम एक तर्क के रूप में एक स्केलर की अपेक्षा करता है, इसके अतिरिक्त संख्याओं के अनुक्रम को पारित करने से अनुक्रम एल अनुक्रम के प्रत्येक भाग पर स्वचालित रूप से संचालन करने का कारण बनता है। चूंकि फ़ंक्शन असफल मूल्यों के लिए खाली लौटाता है, परिणाम इनपुट अनुक्रम होगा, लेकिन केवल उन संख्याओं को वापस करने के लिए फ़िल्टर किया जाता है जो प्राइम के मानदंडों को पूरा करते हैं: | |||
<syntaxhighlight lang="alloy"> | |||
cmd:>prime(100...200) | |||
[101,103,107,109,113,127,131,137,139,149,151,157,163,167,173,179,181,191,193,197,199] | |||
</syntaxhighlight>एक बहुत ही कम और पठनीय प्रोग्राम के साथ इस समस्या को हल करने के अतिरिक्त, नेस्टेड अनुक्रमों के अनुक्रम एल का मूल्यांकन सभी समानांतर में किया जाएगा। | |||
एक बहुत ही कम और पठनीय | |||
== अवयव == | == अवयव == | ||
अनुक्रम एल कोड लिखने में उपयोग के लिए निम्नलिखित सॉफ्टवेयर घटक उपलब्ध हैं और टीएमटी द्वारा समर्थित हैं। [[Microsoft Windows]], [[macOS]], और [[Linux]] की अधिकांश | अनुक्रम एल कोड लिखने में उपयोग के लिए निम्नलिखित सॉफ्टवेयर घटक उपलब्ध हैं और टीएमटी द्वारा समर्थित हैं। सभी अवयव [[Microsoft Windows|माइक्रोसॉफ़्ट विंडोज़]], [[macOS|मैकओएस]], और [[Linux|लिनक्स]] की अधिकांश किस्मों ([[CentOS|सेंटओएस]], [[RedHat|रेड हैट]], [[OpenSUSE|ओपनएसयूएसई]], और उबंटू (ऑपरेटिंग सिस्टम) सहित) चलाने वाले x86 प्लेटफ़ॉर्म पर सभी घटक उपलब्ध हैं, और एआरएम आर्किटेक्चर और [[आईबीएम पावर माइक्रोप्रोसेसर]] प्लेटफ़ॉर्म पर लिनक्स की अधिकांश किस्में चल रही हैं। | ||
=== दुभाषिया === | === दुभाषिया === | ||
एक [[कमांड लाइन इंटरफेस | एक [[कमांड लाइन इंटरफेस|एक कमांड-लाइन दुभाषिया]] कोड को सीधे कमांड शेल में लिखने या पूर्व-लिखित पाठ फ़ाइलों से कोड लोड करने की अनुमति देता है। इस कोड को निष्पादित किया जा सकता है, और परिणामों का मूल्यांकन किया जा सकता है, कोड शुद्धता की जाँच करने में सहायता करने के लिए, या त्वरित उत्तर जाँचने में। यह लोकप्रिय [[ ग्रहण (सॉफ्टवेयर) ]] [[एकीकृत विकास पर्यावरण]] (आईडीई) के माध्यम से भी उपलब्ध है। दुभाषिया में निष्पादित कोड समानांतर में नहीं चलता है; यह एक धागे में क्रियान्वित करता है। | ||
=== संकलक === | === संकलक === | ||
एक कमांड-लाइन | एक कमांड-लाइन संकलक अनुक्रम एल कोड पढ़ता है और अत्यधिक समानांतर, स्वत: वैश्वीकरण, C++ और वैकल्पिक रूप से ओपनसीएल उत्पन्न करता है, जिसे निष्पादित करने के लिए अनुक्रम एल रनटाइम लाइब्रेरी से जोड़ा जाना चाहिए। | ||
=== रनटाइम === | === रनटाइम === | ||
रनटाइम वातावरण पुस्तकालयों का एक पूर्व-संकलित सेट है जो लक्ष्य प्लेटफॉर्म पर इष्टतम रूप से निष्पादित करने के लिए संकलित समांतर सी ++ कोड के साथ काम करता है। यह | रनटाइम वातावरण पुस्तकालयों का एक पूर्व-संकलित सेट है जो लक्ष्य प्लेटफॉर्म पर इष्टतम रूप से निष्पादित करने के लिए संकलित समांतर सी ++ कोड के साथ काम करता है। यह इंटेल थ्रेडेड बिल्डिंग ब्लॉक्स (TBB) पर बनाता है और कैश (टेम्परेरी स्पेशल स्टॉरिज स्पेस फाइल ) अनुकूलन, मेमोरी प्रबंध, काम कतार-स्टीलिंग और प्रदर्शन निगरानी जैसी चीजों को हैंडल करता है।<ref>[https://www.threadingbuildingblocks.org/ Intel Threaded Building Blocks (TBB)]</ref> | ||
=== ग्रहण आईडीई प्लग-इन | === डिबगर के साथ ग्रहण आईडीई प्लग-इन === | ||
एक | एक ग्रहण एकीकृत विकास पर्यावरण (आईडीई) (एक सॉफ्टवेयर अनुप्रयोग है) [[प्लग-इन (कंप्यूटिंग)]] मानक संपादन क्षमताएं (फ़ंक्शन रोलअप, क्रोमकोडिंग, आदि), और एक अनुक्रम एल डिबगिंग वातावरण प्रदान करता है। यह प्लग-इन अनुक्रम एल इंटरप्रेटर के विरुद्ध चलता है, इसलिए बहुथ्रेडेड कोड को डीबग करने के लिए उपयोग नहीं किया जा सकता है; हालाँकि, स्वचालित समांतरता प्रदान करके, समानांतर अनुक्रम एल कोड की डिबगिंग वास्तव में अनुक्रमिक अनुक्रम एल कोड की शुद्धता की पुष्टि कर रही है। यही है, यदि यह क्रमिक रूप से सही ढंग से चलता है, तो इसे समानांतर में सही ढंग से चलना चाहिए - इसलिए दुभाषिया में डिबगिंग पर्याप्त है। | ||
=== पुस्तकालय === | === पुस्तकालय === | ||
प्रोग्रामिंग प्रक्रिया को सुव्यवस्थित करने और सर्वोत्तम अभ्यास उदाहरणों के रूप में सेवा करने के लिए विभिन्न गणित और अन्य मानक फ़ंक्शन पुस्तकालयों को अनुक्रम एल स्रोत कोड के रूप में | प्रोग्रामिंग प्रक्रिया को सुव्यवस्थित करने और सर्वोत्तम अभ्यास उदाहरणों के रूप में सेवा करने के लिए विभिन्न गणित और अन्य मानक फ़ंक्शन पुस्तकालयों को अनुक्रम एल स्रोत कोड के रूप में सम्मलित किया गया है। इन्हें आयातित किया जा सकता है, ठीक उसी तरह जैसे C या C++ लाइब्रेरी # सम्मलित हैं। | ||
== यह भी देखें == | == यह भी देखें == | ||
* समानांतर कंप्यूटिंग | * समानांतर कंप्यूटिंग | ||
* [[स्वचालित समांतरता उपकरण]] | * [[स्वचालित समांतरता उपकरण]] | ||
* | * बहु-कोर प्रोसेसर | ||
* [[ बहु ]] | * [[ बहु |बहुप्रोसेसिंग]] | ||
* कार्यात्मक प्रोग्रामिंग | * कार्यात्मक प्रोग्रामिंग | ||
* [[विशुद्ध रूप से कार्यात्मक प्रोग्रामिंग]] | * [[विशुद्ध रूप से कार्यात्मक प्रोग्रामिंग]] | ||
Line 136: | Line 140: | ||
==संदर्भ== | ==संदर्भ== | ||
{{Reflist}} | {{Reflist}} | ||
==बाहरी संबंध== | ==बाहरी संबंध== | ||
* {{Official website|texasmulticore.com}}{{Dead link|date=May 2018}} | * {{Official website|texasmulticore.com}}{{Dead link|date=May 2018}}टेक्सास बहुकोर प्रौद्योगिकियों | ||
* [https://web.archive.org/web/20170415165711/https://texasmulticore.com/technology/multicore-performance/ | * [https://web.archive.org/web/20170415165711/https://texasmulticore.com/technology/multicore-performance/ अनुक्रम एल वर्क क्यों] | ||
* [https://web.archive.org/web/20170415181140/https://texasmulticore.com/technology/openmp-comparison/ | * [https://web.archive.org/web/20170415181140/https://texasmulticore.com/technology/openmp-comparison/ अनुक्रम एल की तुलना में ओपनएमपी] | ||
* [https://web.archive.org/web/20170412062102/https://texasmulticore.com/products/features/ अनुक्रम एल | * [https://web.archive.org/web/20170412062102/https://texasmulticore.com/products/features/ अनुक्रम एल विशेषताएं] | ||
* [https://web.archive.org/web/20170412063032/https://texasmulticore.com/technology/patented-auto-parallel/ | * [https://web.archive.org/web/20170412063032/https://texasmulticore.com/technology/patented-auto-parallel/ अवलोकन: अनुक्रम एल में पेटेंट स्वचालित समांतरता] | ||
* [https://www.youtube.com/channel/UCb6JyUsAuS_vmBAE3gXVKzQ | * [https://www.youtube.com/channel/UCb6JyUsAuS_vmBAE3gXVKzQ यूट्यूब: टेक्सास बहुकोर प्रौद्योगिकियों] | ||
* [https://web.archive.org/web/20170107005833/https://texasmulticore.com/resources/downloads/ | * [https://web.archive.org/web/20170107005833/https://texasmulticore.com/resources/downloads/ मुफ्त डाउनलोड] | ||
* [https://web.archive.org/web/20170424091304/https://texasmulticore.com/documentation/ | * [https://web.archive.org/web/20170424091304/https://texasmulticore.com/documentation/ प्रोग्रामर संसाधन और शिक्षा] | ||
* [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 | * [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 नॉर्मलाइज़, ट्रांसपोज़ और डिस्ट्रीब्यूट: नॉनस्केलर्स को संभालने के लिए एक स्वचालित दृष्टिकोण] | ||
* [https://patents.google.com/patent/US8839212B2/en?oq=US+8839212 | * [https://patents.google.com/patent/US8839212B2/en?oq=US+8839212 यूएस पेटेंट 8,839,212, विधि, उपकरण और कंप्यूटर प्रोग्राम उत्पाद स्वचालित रूप से उपभोग, सरलीकरण और सामान्यीकरण, स्थानांतरण और वितरण संचालन के साथ शब्दार्थ का उपयोग करके एक कंप्यूटर प्रोग्राम उत्पन्न करने के लिए] | ||
* [https://rosettacode.org/wiki/Category:SequenceL अनुक्रम एल | * [https://rosettacode.org/wiki/Category:SequenceL रोसेटा कोड विकि पर अनुक्रम एल उदाहरण] | ||
[[Category: | [[Category:All articles containing potentially dated statements]] | ||
[[Category:All articles with dead external links]] | |||
[[Category:Articles containing potentially dated statements from 2015]] | |||
[[Category:Articles with dead external links from May 2018]] | |||
[[Category:CS1]] | |||
[[Category:Created On 26/05/2023]] | [[Category:Created On 26/05/2023]] | ||
[[Category:MacOS के लिए विज्ञान सॉफ्टवेयर]] | |||
[[Category:MacOS के लिए संख्यात्मक विश्लेषण सॉफ्टवेयर]] | |||
[[Category:Machine Translated Page]] | |||
[[Category:Official website not in Wikidata]] | |||
[[Category:Pages with script errors]] | |||
[[Category:Pages with syntax highlighting errors]] | |||
[[Category:Templates Vigyan Ready]] | |||
[[Category:उच्च स्तरीय प्रोग्रामिंग भाषाएं]] | |||
[[Category:ऐरे प्रोग्रामिंग भाषाएँ]] | |||
[[Category:कार्यात्मक प्रोग्रामिंग]] | |||
[[Category:कार्यात्मक भाषाएँ]] | |||
[[Category:क्रॉस-प्लेटफ़ॉर्म सॉफ़्टवेयर]] | |||
[[Category:गणितीय सॉफ्टवेयर]] | |||
[[Category:घोषणात्मक प्रोग्रामिंग भाषाएँ]] | |||
[[Category:जीपीजीपीयू]] | |||
[[Category:लिनक्स के लिए विज्ञान सॉफ्टवेयर]] | |||
[[Category:लिनक्स के लिए संख्यात्मक विश्लेषण सॉफ्टवेयर]] | |||
[[Category:विंडोज के लिए विज्ञान सॉफ्टवेयर]] | |||
[[Category:विंडोज के लिए संख्यात्मक विश्लेषण सॉफ्टवेयर]] | |||
[[Category:विषम कंप्यूटिंग]] | |||
[[Category:वैधानिक रूप से टाइप की गई प्रोग्रामिंग भाषाएँ]] | |||
[[Category:संख्यात्मक प्रोग्रामिंग भाषाएँ]] | |||
[[Category:संख्यात्मक रैखिक बीजगणित]] | |||
[[Category:संख्यात्मक सॉफ्टवेयर]] | |||
[[Category:समवर्ती प्रोग्रामिंग भाषाएँ]] | |||
[[Category:समानांतर कंप्यूटिंग]] |
Latest revision as of 16:54, 12 June 2023
Paradigms | Parallel computing, Functional, Purely functional, Declarative programming |
---|---|
द्वारा डिज़ाइन किया गया | डॉ. डेनियल कुक, डॉ. नेल्सन रशटन, डॉ. ब्रैड नेमनिच |
Developers | टेक्सास टेक विश्वविद्यालय, टेक्सास मल्टीकोर प्रौद्योगिकियों |
टाइपिंग अनुशासन | स्टेटिक, टाइप अनुमान |
प्लेटफॉर्म | x86, पावर, एआरएम |
ओएस | विंडोज, मैकओएस, लिनक्स |
लाइसेंस | स्वामित्व[1] |
वेबसाइट | texasmulticore |
अनुक्रम एल एक सामान्य उद्देश्य कार्यात्मक प्रोग्रामिंग भाषा और स्वचालित समानांतरकरण (समानांतर कंप्यूटिंग) संकलक और टूल सेट है, जिसकी प्राथमिक अभिकल्पना उद्देश्य बहु-कोर प्रोसेसर हार्डवेयर पर प्रदर्शन, प्रोग्रामिंग में आसानी, प्लेटफ़ॉर्म सुवाह्यता/अनुकूलन, और कोड स्पष्टता और पठनीयता है। इसका मुख्य लाभ यह है कि इसका उपयोग सीधा कोड लिखने के लिए किया जा सकता है जो स्वचालित रूप से उपलब्ध सभी प्रसंस्करण शक्ति का पूरा लाभ उठाता है, प्रोग्रामर्स को समानताओं की पहचान करने, स्वचालित वैश्वीकरण को निर्दिष्ट करने, दौड़ की स्थितियों से बचने और ओपनएमपी जैसे मैनुअल निर्देश-आधारित प्रोग्रामिंग दृष्टिकोण की अन्य चुनौतियों से संबंधित होने की आवश्यकता के बिना।
अनुक्रम एल में लिखे गए प्रोग्राम को थ्रेड (कंप्यूटिंग) कोड में संकलित किया जा सकता है जो समानांतर में चलता है, प्रोग्रामर से कोई स्पष्ट संकेत नहीं मिलता है कि कैसे या क्या समानांतर करना है। As of 2015[update], अनुक्रम एल संकलक के संस्करण 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]
अनुक्रम एल का सख़्ती से मूल्यांकन किया जाता है (जैसे लिस्प (प्रोग्रामिंग भाषा) ), सांख्यिकीय रूप से प्रकार अनुमान (जैसे हास्केल (प्रोग्रामिंग भाषा) ) के साथ टाइप किया जाता है, और इन्फिक्स और उपसर्ग संचालको के संयोजन का उपयोग करता है जो मानक, अनौपचारिक गणितीय संकेतन (जैसे सी, पास्कल (प्रोग्रामिंग भाषा), पायथन (प्रोग्रामिंग भाषा), आदि)। के समान होता है। यह विशुद्ध रूप से घोषणात्मक भाषा है, जिसका अर्थ है कि एक प्रोग्रामर कार्यों को गणितीय अर्थ में परिभाषित करता है, उनके कार्यान्वयन के लिए निर्देश दिए बिना। उदाहरण के लिए, आव्यूह गुणन की गणितीय परिभाषा इस प्रकार है:
- p×n आव्यूह B के साथ m×p आव्यूह A का गुणनफल m×n आव्यूह है जिसकी (i,j)'वीं प्रविष्टि है
अनुक्रम एल परिभाषा उस परिभाषा को न्यूनाधिक सटीक रूप से दर्शाती है:
matmul(A(2), B(2)) [i,j] :=
let k := 1...size(B);
in sum( A[i,k] * B[k,j] );
परिभाषा के बाईं ओर प्रत्येक पैरामीटर ए और बी के पश्चात के सबस्क्रिप्ट इंगित करते हैं कि ए और बी गहराई -2 संरचनाएं हैं (अर्थात, स्केलर्स की सूचियों की सूची), जिन्हें यहां मैट्रिसेस के रूप में माना जाता है। इस औपचारिक परिभाषा से, अनुक्रम एल अपनी (i, j)'वीं प्रविष्टि के सूत्र से परिभाषित उत्पाद के आयामों का अनुमान लगाता है (जोड़े के सेट के रूप में (i, j) जिसके लिए दाहिने हाथ की ओर परिभाषित किया गया है) और प्रत्येक प्रविष्टि की गणना करता है उपरोक्त अनौपचारिक परिभाषा के समान सूत्र द्वारा। ध्यान दें कि इस परिभाषा में पुनरावृत्ति के लिए कोई स्पष्ट निर्देश नहीं हैं, या उस क्रम के लिए जिसमें संचालन किए जाने हैं। इस वजह से, अनुक्रम एल संकलक किसी भी क्रम (समानांतर क्रम सहित) में संचालन कर सकता है जो परिभाषित समीकरण को संतुष्ट करता है। इस उदाहरण में, उत्पाद में निर्देशांकों की गणना इस तरह समानांतर की जाएगी कि, बड़े मेट्रिसेस के लिए, प्रोसेसर की संख्या के साथ रैखिक रूप से स्केल करें।
जैसा कि ऊपर उल्लेख किया गया है, अनुक्रम एल में इनपुट/आउटपुट (I/O) के लिए कोई अंतर्निहित निर्माण नहीं है क्योंकि इसे अन्य प्रोग्रामिंग भाषाओं के साथ एक योगात्मक उपायो से काम करने के लिए अभिकल्पित किया गया था। बहुथ्रेडेड C++ को संकलित करने और 20+ सरलीकृत रैपर और इंटरफ़ेस जेनरेटर (स्विग) भाषाओं (C, C++, C#, जावा, पाइथन, आदि) का समर्थन करने का निर्णय का अर्थ है कि यह उपस्थित अभिकल्पित प्रवाह, प्रशिक्षण और टूल में आसानी से फ़िट हो जाता है। इसका उपयोग उपस्थिता अनुप्रयोगों को बढ़ाने, बहुकोर लाइब्रेरी बनाने और परिणामी कोड को अन्य कोड के साथ जोड़कर स्टैंडअलोन एप्लिकेशन बनाने के लिए किया जा सकता है जो I/O कार्य करता है। अनुक्रम एल फ़ंक्शंस को दिए गए इनपुट के साथ दुभाषिया (कंप्यूटिंग) से भी पूछा जा सकता है, जैसे कि पायथन और अन्य व्याख्या की गई भाषाएँ।
सामान्यीकरण-स्थानांतरण
अनुक्रम एल का मुख्य गैर-स्केलर निर्माण अनुक्रम है, जो अनिवार्य रूप से एक सूची है। अनुक्रमो को किसी भी स्तर पर नेस्टेड किया जा सकता है। कई विशुद्ध रूप से कार्यात्मक भाषाओं में सामान्य पुनरावर्तन के नियमित उपयोग से बचने के लिए, अनुक्रम एल सामान्यीकृत-ट्रांसपोज़ (NT) नामक एक तकनीक का उपयोग करता है, जिसमें स्केलर संचालन स्वचालित रूप से अनुक्रम के तत्वों पर वितरित होते हैं।[14] उदाहरण के लिए, अनुक्रम एल में हमारे पास है
इसका परिणाम '+' संक्रियक को ओवरलोड करने से नहीं, बल्कि NT के प्रभाव से होता है, जो निर्मित में और उपयोगकर्ता परिभाषित में दोनों तरह के सभी संचालन तक फैला होता है।
एक अन्य उदाहरण के रूप में, यदि f() एक 3-तर्क फ़ंक्शंस है जिसके तर्क अदिश हैं, तो किसी भी उपयुक्त x और z के लिए हमारे पास होगा
उदाहरण के लिए, एक बार में कई तर्कों के लिए NT निर्माण का उपयोग किया जा सकता है
यह तब भी काम करता है जब अपेक्षित तर्क किसी भी प्रकार के टी का गैर-अदिश होता है, और वास्तविक तर्क प्रकार टी की वस्तुओं की एक सूची है (या, अधिक सामान्यता में, कोई डेटा संरचना जिसका निर्देशांक प्रकार T के हैं)। उदाहरण के लिए, यदि A एक आव्यूह है और Xs आव्यूह [X1, ..., Xn],की एक सूची है, और आव्यूह गुणा की उपरोक्त परिभाषा दी गई है, तो अनुक्रम एल में हमारे पास होगा
matmul(A,Xs) = [matmul(A,X1),...,matmul(A,Xn)]
एक नियम के रूप में, एनटी पुनरावृत्ति, पुनरावर्तन, या उच्च स्तरीय कार्यात्मक संक्रियको की आवश्यकता को समाप्त कर देता है
- डेटा संरचना के प्रत्येक भाग के लिए समान कार्य करें, या करने के लिए
- समान आकार की संरचनाओं के संबंधित भागों को एक साथ प्रोसेस करें।
यह पुनरावृत्ति और पुनरावर्तन के अधिकांश उपयोगों के लिए खाता है।
उदाहरण: अभाज्य संख्याएँ
एक अच्छा उदाहरण जो उपरोक्त अवधारणाओं को प्रदर्शित करता है, अभाज्य संख्याओं को ढूंढने में होगा। एक प्रमुख संख्या के रूप में परिभाषित किया गया है
- एक पूर्णांक 1 से अधिक है, जिसमें स्वयं और 1 के अतिरिक्त कोई सकारात्मक विभाजक नहीं है।
तो एक धनात्मक पूर्णांक z अभाज्य है यदि 2 से लेकर z-1 तक कोई भी संख्या, समावेशी, समान रूप से विभाजित न हो। इस समस्या को शाब्दिक रूप से उपरोक्त परिभाषा को भाषा में लिप्यंतरित करके प्रोग्राम करने की अनुमति देता है।
अनुक्रम एल में, 2 से z-1 तक की संख्याओं का एक क्रम, समावेशी, सिर्फ (2...(z-1)) है, इसलिए 100 और 200 के बीच सभी अभाज्य संख्याओं को ढूंढने के लिए एक प्रोग्राम लिखा जा सकता है:
prime(z) := z when none(z mod (2...(z-1)) = 0);
जो, अंग्रेजी में सिर्फ कहते हैं,
- ... तर्क वापस करें यदि 2 के बीच कोई भी संख्या नहीं है, और तर्क से 1 कम है, इसमें समान रूप से विभाजित करें।
यदि वह शर्त पूरी नहीं होती है, तो फ़ंक्शन कुछ भी नहीं लौटाता है।
cmd:>prime(17)
17
cmd:>prime(18)
empty
प्रोग्राम में 100 और 200 के बीच की स्ट्रिंग दिखाई नहीं देती है। बल्कि, एक प्रोग्रामर सामान्यतः उस भाग को तर्क के रूप में पास करेगा। चूंकि प्रोग्राम एक तर्क के रूप में एक स्केलर की अपेक्षा करता है, इसके अतिरिक्त संख्याओं के अनुक्रम को पारित करने से अनुक्रम एल अनुक्रम के प्रत्येक भाग पर स्वचालित रूप से संचालन करने का कारण बनता है। चूंकि फ़ंक्शन असफल मूल्यों के लिए खाली लौटाता है, परिणाम इनपुट अनुक्रम होगा, लेकिन केवल उन संख्याओं को वापस करने के लिए फ़िल्टर किया जाता है जो प्राइम के मानदंडों को पूरा करते हैं:
cmd:>prime(100...200)
[101,103,107,109,113,127,131,137,139,149,151,157,163,167,173,179,181,191,193,197,199]
एक बहुत ही कम और पठनीय प्रोग्राम के साथ इस समस्या को हल करने के अतिरिक्त, नेस्टेड अनुक्रमों के अनुक्रम एल का मूल्यांकन सभी समानांतर में किया जाएगा।
अवयव
अनुक्रम एल कोड लिखने में उपयोग के लिए निम्नलिखित सॉफ्टवेयर घटक उपलब्ध हैं और टीएमटी द्वारा समर्थित हैं। सभी अवयव माइक्रोसॉफ़्ट विंडोज़, मैकओएस, और लिनक्स की अधिकांश किस्मों (सेंटओएस, रेड हैट, ओपनएसयूएसई, और उबंटू (ऑपरेटिंग सिस्टम) सहित) चलाने वाले x86 प्लेटफ़ॉर्म पर सभी घटक उपलब्ध हैं, और एआरएम आर्किटेक्चर और आईबीएम पावर माइक्रोप्रोसेसर प्लेटफ़ॉर्म पर लिनक्स की अधिकांश किस्में चल रही हैं।
दुभाषिया
एक एक कमांड-लाइन दुभाषिया कोड को सीधे कमांड शेल में लिखने या पूर्व-लिखित पाठ फ़ाइलों से कोड लोड करने की अनुमति देता है। इस कोड को निष्पादित किया जा सकता है, और परिणामों का मूल्यांकन किया जा सकता है, कोड शुद्धता की जाँच करने में सहायता करने के लिए, या त्वरित उत्तर जाँचने में। यह लोकप्रिय ग्रहण (सॉफ्टवेयर) एकीकृत विकास पर्यावरण (आईडीई) के माध्यम से भी उपलब्ध है। दुभाषिया में निष्पादित कोड समानांतर में नहीं चलता है; यह एक धागे में क्रियान्वित करता है।
संकलक
एक कमांड-लाइन संकलक अनुक्रम एल कोड पढ़ता है और अत्यधिक समानांतर, स्वत: वैश्वीकरण, C++ और वैकल्पिक रूप से ओपनसीएल उत्पन्न करता है, जिसे निष्पादित करने के लिए अनुक्रम एल रनटाइम लाइब्रेरी से जोड़ा जाना चाहिए।
रनटाइम
रनटाइम वातावरण पुस्तकालयों का एक पूर्व-संकलित सेट है जो लक्ष्य प्लेटफॉर्म पर इष्टतम रूप से निष्पादित करने के लिए संकलित समांतर सी ++ कोड के साथ काम करता है। यह इंटेल थ्रेडेड बिल्डिंग ब्लॉक्स (TBB) पर बनाता है और कैश (टेम्परेरी स्पेशल स्टॉरिज स्पेस फाइल ) अनुकूलन, मेमोरी प्रबंध, काम कतार-स्टीलिंग और प्रदर्शन निगरानी जैसी चीजों को हैंडल करता है।[15]
डिबगर के साथ ग्रहण आईडीई प्लग-इन
एक ग्रहण एकीकृत विकास पर्यावरण (आईडीई) (एक सॉफ्टवेयर अनुप्रयोग है) प्लग-इन (कंप्यूटिंग) मानक संपादन क्षमताएं (फ़ंक्शन रोलअप, क्रोमकोडिंग, आदि), और एक अनुक्रम एल डिबगिंग वातावरण प्रदान करता है। यह प्लग-इन अनुक्रम एल इंटरप्रेटर के विरुद्ध चलता है, इसलिए बहुथ्रेडेड कोड को डीबग करने के लिए उपयोग नहीं किया जा सकता है; हालाँकि, स्वचालित समांतरता प्रदान करके, समानांतर अनुक्रम एल कोड की डिबगिंग वास्तव में अनुक्रमिक अनुक्रम एल कोड की शुद्धता की पुष्टि कर रही है। यही है, यदि यह क्रमिक रूप से सही ढंग से चलता है, तो इसे समानांतर में सही ढंग से चलना चाहिए - इसलिए दुभाषिया में डिबगिंग पर्याप्त है।
पुस्तकालय
प्रोग्रामिंग प्रक्रिया को सुव्यवस्थित करने और सर्वोत्तम अभ्यास उदाहरणों के रूप में सेवा करने के लिए विभिन्न गणित और अन्य मानक फ़ंक्शन पुस्तकालयों को अनुक्रम एल स्रोत कोड के रूप में सम्मलित किया गया है। इन्हें आयातित किया जा सकता है, ठीक उसी तरह जैसे C या C++ लाइब्रेरी # सम्मलित हैं।
यह भी देखें
- समानांतर कंप्यूटिंग
- स्वचालित समांतरता उपकरण
- बहु-कोर प्रोसेसर
- बहुप्रोसेसिंग
- कार्यात्मक प्रोग्रामिंग
- विशुद्ध रूप से कार्यात्मक प्रोग्रामिंग
- घोषणात्मक प्रोग्रामिंग
- प्रोग्रामिंग प्रतिमानों की तुलना
- स्वचालित वैश्वीकरण
- साइमन पीटन जोन्स
- रोसेटा कोड
संदर्भ
- ↑ Template:साइट वेब
- ↑ "टेक्सास मल्टीकोर टेक्नोलॉजीज में डॉ। डैनियल कुक". Archived from the original on 2016-03-04. Retrieved 2016-02-24.
- ↑ "उपभोग-सरलीकृत-उत्पादन (सीएसपी)" (PDF). Archived from the original (PDF) on 2017-02-02. Retrieved 2017-01-26.
- ↑ 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
- ↑ 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
- ↑ 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
- ↑ 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
- ↑ Lämmel, Ralf; Peyton-Jones, Simon (2003), "Scrap your boilerplate: a practical design pattern for generic programming", Proceedings of TLDI 2003
- ↑ Lämmel, Ralf; Peyton-Jones, Simon (2004), "Scrap more boilerplate: reflection, zips, and generalised casts", Proceedings of ICFP 2004
- ↑ 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
- ↑ 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
- ↑ Texas Multicore Technologies, Inc.
- ↑ 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
- ↑ 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
- ↑ Intel Threaded Building Blocks (TBB)
बाहरी संबंध
- Official website[dead link]टेक्सास बहुकोर प्रौद्योगिकियों
- अनुक्रम एल वर्क क्यों
- अनुक्रम एल की तुलना में ओपनएमपी
- अनुक्रम एल विशेषताएं
- अवलोकन: अनुक्रम एल में पेटेंट स्वचालित समांतरता
- यूट्यूब: टेक्सास बहुकोर प्रौद्योगिकियों
- मुफ्त डाउनलोड
- प्रोग्रामर संसाधन और शिक्षा
- नॉर्मलाइज़, ट्रांसपोज़ और डिस्ट्रीब्यूट: नॉनस्केलर्स को संभालने के लिए एक स्वचालित दृष्टिकोण
- यूएस पेटेंट 8,839,212, विधि, उपकरण और कंप्यूटर प्रोग्राम उत्पाद स्वचालित रूप से उपभोग, सरलीकरण और सामान्यीकरण, स्थानांतरण और वितरण संचालन के साथ शब्दार्थ का उपयोग करके एक कंप्यूटर प्रोग्राम उत्पन्न करने के लिए
- रोसेटा कोड विकि पर अनुक्रम एल उदाहरण