अनुक्रम एल

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

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

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

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

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

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

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


 * p×n मैट्रिक्स B के साथ m×p मैट्रिक्स A का गुणनफल m×n मैट्रिक्स है जिसकी (i,j)'वीं प्रविष्टि है
 * $$\sum_{k=1}^p A(i,k)B(k,j)$$

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

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

सामान्यीकरण-स्थानांतरण
सीक्वेंस एल का मुख्य गैर-स्केलर निर्माण अनुक्रम है, जो अनिवार्य रूप से एक सूची है। दृश्यों को किसी भी स्तर पर नेस्ट किया जा सकता है। कई विशुद्ध रूप से कार्यात्मक भाषाओं में सामान्य पुनरावर्तन के नियमित उपयोग से बचने के लिए, अनुक्रम एल सामान्यीकृत-ट्रांसपोज़ (NT) नामक एक तकनीक का उपयोग करता है, जिसमें अनुक्रम के तत्वों पर स्केलर संचालन स्वचालित रूप से वितरित होते हैं। उदाहरण के लिए, अनुक्रम एल में हमारे पास है
 * $$[1,2,3] + 10 == [11,12,13]$$

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

उदाहरण के लिए, एक बार में कई तर्कों के लिए NT निर्माण का उपयोग किया जा सकता है
 * $$[1,2,3] + [10,20,30] == [11,22,33]$$

यह तब भी काम करता है जब अपेक्षित तर्क किसी भी प्रकार के टी का गैर-अदिश होता है, और वास्तविक तर्क प्रकार टी की वस्तुओं की एक सूची है (या, अधिक सामान्यता में, कोई डेटा संरचना जिसका निर्देशांक प्रकार टी के हैं)। उदाहरण के लिए, यदि ए एक मैट्रिक्स है और एक्स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) पर बनाता है और कैश ऑप्टिमाइज़ेशन, मेमोरी मैनेजमेंट, वर्क क्यू-स्टीलिंग और परफॉर्मेंस मॉनिटरिंग जैसी चीजों को हैंडल करता है।

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

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

यह भी देखें

 * समानांतर कंप्यूटिंग
 * स्वचालित समांतरता उपकरण
 * मल्टी-कोर प्रोसेसर
 * बहु
 * कार्यात्मक प्रोग्रामिंग
 * विशुद्ध रूप से कार्यात्मक प्रोग्रामिंग
 * घोषणात्मक प्रोग्रामिंग
 * प्रोग्रामिंग प्रतिमानों की तुलना
 * स्वचालित वैश्वीकरण
 * साइमन पीटन जोन्स
 * रोसेटा कोड

बाहरी संबंध

 * Texas Multicore Technologies
 * Why अनुक्रम एल Works
 * OpenMP compared to अनुक्रम एल
 * अनुक्रम एल Features
 * Overview: Patented Automatic Parallelization in अनुक्रम एल
 * YouTube: Texas Multicore Technologies
 * Free Downloads
 * Programmer Resources and Education
 * Normalize, Transpose and Distribute: An Automatic Approach for Handling Nonscalars
 * 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
 * अनुक्रम एल examples on Rosetta Code wiki