अनुक्रम एल

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

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

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

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

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

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


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

SequenceL परिभाषा उस परिभाषा को कमोबेश सटीक रूप से दर्शाती है: मतमुल (ए (2), बी (2)) [आई, जे]: = चलो के: = 1 ... आकार (बी); संक्षेप में (ए [i, के] * बी [के, जे]);

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

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

सामान्यीकरण-स्थानांतरण
सीक्वेंस एल का मुख्य गैर-स्केलर निर्माण अनुक्रम है, जो अनिवार्य रूप से एक सूची है। दृश्यों को किसी भी स्तर पर नेस्ट किया जा सकता है। कई विशुद्ध रूप से कार्यात्मक भाषाओं में सामान्य पुनरावर्तन के नियमित उपयोग से बचने के लिए, SequenceL सामान्यीकृत-ट्रांसपोज़ (NT) नामक एक तकनीक का उपयोग करता है, जिसमें अनुक्रम के तत्वों पर स्केलर संचालन स्वचालित रूप से वितरित होते हैं। उदाहरण के लिए, SequenceL में हमारे पास है
 * $$[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 तक कोई भी संख्या, समावेशी, समान रूप से विभाजित न हो। SequenceL इस समस्या को शाब्दिक रूप से उपरोक्त परिभाषा को भाषा में लिप्यंतरित करके प्रोग्राम करने की अनुमति देता है।

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

यह भी देखें

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

बाहरी संबंध

 * Texas Multicore Technologies
 * Why SequenceL Works
 * OpenMP compared to SequenceL
 * SequenceL Features
 * Overview: Patented Automatic Parallelization in SequenceL
 * 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
 * SequenceL examples on Rosetta Code wiki