एकल निर्देश, एकाधिक डेटा: Difference between revisions

From Vigyanwiki
No edit summary
No edit summary
Line 3: Line 3:
{{Flynn's Taxonomy}}
{{Flynn's Taxonomy}}


[[File:SIMD2.svg|thumb|एकल निर्देश, एकाधिक डेटा]]'''एकल निर्देश, एकाधिक डेटा (एसआईएमडी)''' फ्लिन की वर्गीकरण में एक प्रकार का [[समानांतर कंप्यूटर|समानांतर प्रसंस्करण]] है। एसआईएमडी आंतरिक (हार्डवेयर डिज़ाइन का भाग) हो सकता है और इसे निर्देश सेट आर्किटेक्चर (आईएसए) के माध्यम से सीधे एक्सेस किया जा सकता है, लेकिन इसे आईएसए के साथ भ्रमित नहीं होना चाहिए। एसआईएमडी कई प्रसंस्करण तत्वों वाले कंप्यूटरों का वर्णन करता है जो साथ कई डेटा बिंदुओं पर ही ऑपरेशन करते हैं।
[[File:SIMD2.svg|thumb|एकल निर्देश, एकाधिक डेटा]]'''एकल निर्देश, एकाधिक डेटा (एसआईएमडी)''' फ्लिन की वर्गीकरण में एक प्रकार का [[समानांतर कंप्यूटर|समानांतर प्रसंस्करण]] है। एसआईएमडी आंतरिक (हार्डवेयर डिज़ाइन का भाग) हो सकता है और इसे निर्देश समूह आर्किटेक्चर (आईएसए) के माध्यम से सीधे एक्सेस किया जा सकता है, लेकिन इसे आईएसए के साथ भ्रमित नहीं होना चाहिए। एसआईएमडी कई प्रसंस्करण तत्वों वाले कंप्यूटरों का वर्णन करता है जो साथ कई डेटा बिंदुओं पर ही ऑपरेशन करते हैं।


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


== इतिहास ==
== इतिहास ==
एसआईएमडी निर्देशों का पहला उपयोग [[ILLIAC IV]] में किया गया था, जो 1966 में पूरा हुआ था।
एसआईएमडी निर्देशों का पहला उपयोग [[ILLIAC IV|इलियाक चतुर्थ]] में किया गया था, जो 1966 में पूरा हुआ था।


एसआईएमडी 1970 के दशक की शुरुआत में [[CDC STAR-100]]|CDC Star-100 और TI उन्नत वैज्ञानिक कंप्यूटर जैसे [[वेक्टर प्रोसेसर]] का आधार था, जो एकल निर्देश के साथ डेटा के वेक्टर पर काम कर सकता था। 1970 और 1980 के दशक में [[क्रे]] द्वारा वेक्टर प्रसंस्करण को विशेष रूप से लोकप्रिय बनाया गया था। वेक्टर प्रोसेसिंग आर्किटेक्चर को अब एसआईएमडी कंप्यूटरों से अलग माना जाता है: डंकन की वर्गीकरण में उन्हें सम्मिलित किया जाता है, जहां फ्लिन के काम (1966, 1972) के कारण [[क्रे -1]] (1977) से पहले की डेटिंग होती है।
एसआईएमडी 1970 के दशक की प्रारंभ में [[CDC STAR-100|सीडीसी स्टार-100]] और टीआई उन्नत वैज्ञानिक कंप्यूटर जैसे [[वेक्टर प्रोसेसर]] का आधार था, जो एकल निर्देश के साथ डेटा के वेक्टर पर काम कर सकता था। 1970 और 1980 के दशक में [[क्रे]] द्वारा वेक्टर प्रसंस्करण को विशेष रूप से लोकप्रिय बनाया गया था। वेक्टर प्रोसेसिंग आर्किटेक्चर को अब एसआईएमडी कंप्यूटरों से अलग माना जाता है: डंकन की वर्गीकरण में उन्हें सम्मिलित किया जाता है, जहां फ्लिन के काम (1966, 1972) के कारण [[क्रे -1]] (1977) से पहले की डेटिंग होती है।


आधुनिक एसआईएमडी कंप्यूटरों के पहले युग की विशेषता [[सोच मशीनों निगम]] [[कनेक्शन मशीन]] | CM-1 और CM-2 जैसे [[बड़े पैमाने पर समानांतर प्रसंस्करण]]-शैली के [[सुपर कंप्यूटर]] थे। इन कंप्यूटरों में कई सीमित-कार्यक्षमता वाले प्रोसेसर थे जो समानांतर में काम करते थे। उदाहरण के लिए, थिंकिंग मशीन CM-2 में 65,536 एकल-बिट प्रोसेसर में से प्रत्येक ही समय में ही निर्देश को निष्पादित करेगा, उदाहरण के लिए, हाइपरक्यूब-कनेक्टेड नेटवर्क का उपयोग करके समय में 65,536 जोड़े बिट्स को तार्किक रूप से संयोजित करने की अनुमति देता है या प्रोसेसर-समर्पित रैम अपने ऑपरेंड खोजने के लिए। [[इंटेल i860]] जैसे कमोडिटी प्रोसेसर पर आधारित सस्ती स्केलर विविध निर्देश, एकाधिक डेटा एप्रोच होने पर सुपरकंप्यूटिंग एसआईएमडी एप्रोच से दूर चली गई<ref>{{cite web|url=http://www.cs.kent.edu/~walker/classes/pdc.f01/lectures/MIMD-1.pdf|title=MIMD1 - XP/S, CM-5}}</ref> अधिक शक्तिशाली हो गया, और एसआईएमडी में रुचि कम हो गई।
आधुनिक एसआईएमडी कंप्यूटरों के पहले युग की विशेषता [[सोच मशीनों निगम]] [[कनेक्शन मशीन]] | सीएम-1 और सीएम-2 जैसे [[बड़े पैमाने पर समानांतर प्रसंस्करण]]-शैली के [[सुपर कंप्यूटर]] थे। इन कंप्यूटरों में कई सीमित-कार्यक्षमता वाले प्रोसेसर थे जो समानांतर में काम करते थे। उदाहरण के लिए, थिंकिंग मशीन CM-2 में 65,536 एकल-बिट प्रोसेसर में से प्रत्येक ही समय में ही निर्देश को निष्पादित करेगा, उदाहरण के लिए, हाइपरक्यूब-कनेक्टेड नेटवर्क का उपयोग करके समय में 65,536 जोड़े बिट्स को तार्किक रूप से संयोजित या प्रोसेसर-समर्पित रैम अपने ऑपरेंड खोजने के लिए अनुमति देता है। [[इंटेल i860]] जैसे कमोडिटी प्रोसेसर पर आधारित सस्ती स्केलर विविध निर्देश, एकाधिक डेटा एप्रोच होने पर सुपरकंप्यूटिंग एसआईएमडी एप्रोच से दूर चली गई<ref>{{cite web|url=http://www.cs.kent.edu/~walker/classes/pdc.f01/lectures/MIMD-1.pdf|title=MIMD1 - XP/S, CM-5}}</ref> अधिक शक्तिशाली हो गया, और एसआईएमडी में महत्त्व कम हो गयी थी।


एसआईएमडी प्रोसेसर का वर्तमान युग सुपरकंप्यूटर बाजार के बजाय डेस्कटॉप-कंप्यूटर बाजार से बढ़ा है। चूंकि डेस्कटॉप प्रोसेसर 1990 के दशक के दौरान रीयल-टाइम गेमिंग और ऑडियो/वीडियो प्रसंस्करण का समर्थन करने के लिए पर्याप्त शक्तिशाली हो गए थे, इस विशेष प्रकार की कंप्यूटिंग शक्ति के लिए मांग बढ़ी और मांग को पूरा करने के लिए माइक्रोप्रोसेसर विक्रेताओं ने एसआईएमडी की ओर रुख किया।<ref name="conte">{{cite conference |title=The long and winding road to high-performance image processing with MMX/SSE |first1=G. |last1=Conte |first2=S. |last2=Tommesani |first3=F. |last3=Zanichelli |book-title=Proc. Fifth IEEE Int'l Workshop on Computer Architectures for Machine Perception |year=2000 |doi=10.1109/CAMP.2000.875989 |s2cid=13180531 |hdl=11381/2297671}}</ref> Hewlett-Packard ने MPEG डिकोडिंग में तेजी लाने के लिए 1994 में [[PA-RISC]] 1.1 डेस्कटॉप में [[मल्टीमीडिया त्वरण विस्तार]] निर्देश पेश किया।<ref>{{cite book |first=R.B. |last=Lee |chapter=Realtime MPEG video via software decompression on a PA-RISC processor |title=digest of papers Compcon '95. Technologies for the Information Superhighway |year=1995 |pages=186–192 |doi=10.1109/CMPCON.1995.512384 |isbn=0-8186-7029-0|s2cid=2262046 }}</ref> सन माइक्रोसिस्टम्स ने 1995 में अपने [[UltraSPARC]] माइक्रोप्रोसेसर में अपने विज़ुअल निर्देश [[एमएमएक्स (निर्देश सेट)]] एक्सटेंशन में एसआईएमडी पूर्णांक निर्देश पेश किए। MIPS ने अपने समान [[MDMX]] सिस्टम के अनुरूप किया।
एसआईएमडी प्रोसेसर का वर्तमान युग सुपरकंप्यूटर बाजार के बजाय डेस्कटॉप-कंप्यूटर बाजार से बढ़ा है। चूंकि डेस्कटॉप प्रोसेसर 1990 के दशक के दौरान रीयल-टाइम गेमिंग और ऑडियो/वीडियो प्रसंस्करण का समर्थन करने के लिए पर्याप्त शक्तिशाली हो गए थे, इस विशेष प्रकार की कंप्यूटिंग शक्ति के लिए मांग बढ़ी और मांग को पूरा करने के लिए माइक्रोप्रोसेसर विक्रेताओं ने एसआईएमडी की ओर रुख किया।<ref name="conte">{{cite conference |title=The long and winding road to high-performance image processing with MMX/SSE |first1=G. |last1=Conte |first2=S. |last2=Tommesani |first3=F. |last3=Zanichelli |book-title=Proc. Fifth IEEE Int'l Workshop on Computer Architectures for Machine Perception |year=2000 |doi=10.1109/CAMP.2000.875989 |s2cid=13180531 |hdl=11381/2297671}}</ref> हेवलेट पैकर्ड ने एमपीईजी डिकोडिंग में तेजी लाने के लिए 1994 में [[PA-RISC|पीए-आरआईएससी]] 1.1 डेस्कटॉप में [[मल्टीमीडिया त्वरण विस्तार]] निर्देश प्रस्तुत किया था।<ref>{{cite book |first=R.B. |last=Lee |chapter=Realtime MPEG video via software decompression on a PA-RISC processor |title=digest of papers Compcon '95. Technologies for the Information Superhighway |year=1995 |pages=186–192 |doi=10.1109/CMPCON.1995.512384 |isbn=0-8186-7029-0|s2cid=2262046 }}</ref> सन माइक्रोसिस्टम्स ने 1995 में अपने [[UltraSPARC|अल्ट्रास्पार्क]] माइक्रोप्रोसेसर में अपने विज़ुअल निर्देश [[एमएमएक्स (निर्देश सेट)|एमएमएक्स (निर्देश समूह)]] विस्तार में एसआईएमडी पूर्णांक निर्देश प्रस्तुत किए। एमआईपीएस ने अपने समान [[MDMX|एमडीएमएक्स]] प्रणाली के अनुरूप किया था।


पहला व्यापक रूप से तैनात डेस्कटॉप एसआईएमडी 1996 में x86 आर्किटेक्चर के लिए Intel के MMX (निर्देश सेट) एक्सटेंशन के साथ था। इसने [[Motorola]] [[PowerPC]] और IBM के [[आईबीएम पावर माइक्रोप्रोसेसर]] सिस्टम में अधिक शक्तिशाली [[AltiVec]] सिस्टम की शुरुआत की। इंटेल ने 1999 में सभी नए [[स्ट्रीमिंग SIMD एक्सटेंशन|स्ट्रीमिंग एसआईएमडी एक्सटेंशन]] सिस्टम की शुरुआत की। तब से, दोनों आर्किटेक्चर के लिए [[दृश्य निर्देश सेट]] में कई विस्तार हुए हैं। उन्नत वेक्टर एक्सटेंशन AVX, [[AVX2]] और [[AVX-512]] Intel द्वारा विकसित किए गए हैं। AMD अपने मौजूदा उत्पादों में AVX और AVX2 का समर्थन करता है।
पहला विस्तृत रूप से नियुक्त डेस्कटॉप एसआईएमडी 1996 में x86 आर्किटेक्चर के लिए इंटेल के एमएमएक्स (निर्देश समूह) विस्तार के साथ था। इसने [[Motorola|मोटोरोला]] [[PowerPC|पावरपीसी]] और आईबीएम के [[आईबीएम पावर माइक्रोप्रोसेसर]] प्रणाली में अधिक शक्तिशाली [[AltiVec|अल्टीवेक]] प्रणाली की प्रारंभ किया था। इंटेल ने 1999 में सभी नए [[स्ट्रीमिंग SIMD एक्सटेंशन|स्ट्रीमिंग एसआईएमडी विस्तार]] प्रणाली की प्रारंभ किया था। तब से, दोनों आर्किटेक्चर के लिए [[दृश्य निर्देश सेट|दृश्य निर्देश समूह]] में कई विस्तार हुए हैं। उन्नत वेक्टर विस्तार एवीएक्स, [[AVX2|एवीएक्स2]] और [[AVX-512|एवीएक्स-512]] इंटेल द्वारा विकसित किए गए हैं। एएमडी अपने मौजूदा उत्पादों में एवीएक्स और एवीएक्स2 का समर्थन करता है।


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


== लाभ ==
== लाभ ==
Line 25: Line 25:
एसआईएमडी प्रोसेसर के साथ इस प्रक्रिया में दो सुधार होते हैं। के लिए डेटा को ब्लॉक में समझा जाता है, और कई मानों को साथ लोड किया जा सकता है। निर्देशों की श्रृंखला के बजाय इस पिक्सेल को पुनः प्राप्त करें, अब अगले पिक्सेल को पुनः प्राप्त करें, एसआईएमडी प्रोसेसर के पास ही निर्देश होगा जो प्रभावी रूप से कहता है कि n पिक्सेल प्राप्त करें (जहाँ n संख्या है जो डिज़ाइन से डिज़ाइन में भिन्न होती है)। विभिन्न कारणों से, प्रत्येक पिक्सेल को व्यक्तिगत रूप से पुनर्प्राप्त करने की तुलना में इसमें बहुत कम समय लग सकता है, जैसा कि पारंपरिक सीपीयू डिज़ाइन के साथ होता है।
एसआईएमडी प्रोसेसर के साथ इस प्रक्रिया में दो सुधार होते हैं। के लिए डेटा को ब्लॉक में समझा जाता है, और कई मानों को साथ लोड किया जा सकता है। निर्देशों की श्रृंखला के बजाय इस पिक्सेल को पुनः प्राप्त करें, अब अगले पिक्सेल को पुनः प्राप्त करें, एसआईएमडी प्रोसेसर के पास ही निर्देश होगा जो प्रभावी रूप से कहता है कि n पिक्सेल प्राप्त करें (जहाँ n संख्या है जो डिज़ाइन से डिज़ाइन में भिन्न होती है)। विभिन्न कारणों से, प्रत्येक पिक्सेल को व्यक्तिगत रूप से पुनर्प्राप्त करने की तुलना में इसमें बहुत कम समय लग सकता है, जैसा कि पारंपरिक सीपीयू डिज़ाइन के साथ होता है।


और फायदा यह है कि निर्देश ही ऑपरेशन में सभी लोड किए गए डेटा पर काम करता है। दूसरे शब्दों में, यदि एसआईएमडी सिस्टम बार में आठ डेटा बिंदुओं को लोड करके काम करता है, तो <code>add</code> डेटा पर प्रायुक्त किया जा रहा ऑपरेशन ही समय में सभी आठ मानों पर होगा। यह समानता [[सुपरस्केलर प्रोसेसर]] द्वारा प्रदान की गई समानता से अलग है; आठ मानों को गैर-सुपरस्क्लेर प्रोसेसर पर भी समानांतर में संसाधित किया जाता है, और सुपरस्केलर प्रोसेसर समानांतर में कई एसआईएमडी संचालन करने में सक्षम हो सकता है।
और फायदा यह है कि निर्देश ही ऑपरेशन में सभी लोड किए गए डेटा पर काम करता है। दूसरे शब्दों में, यदि एसआईएमडी प्रणाली बार में आठ डेटा बिंदुओं को लोड करके काम करता है, तो <code>add</code> डेटा पर प्रायुक्त किया जा रहा ऑपरेशन ही समय में सभी आठ मानों पर होगा। यह समानता [[सुपरस्केलर प्रोसेसर]] द्वारा प्रदान की गई समानता से अलग है; आठ मानों को गैर-सुपरस्क्लेर प्रोसेसर पर भी समानांतर में संसाधित किया जाता है, और सुपरस्केलर प्रोसेसर समानांतर में कई एसआईएमडी संचालन करने में सक्षम हो सकता है।


== नुकसान ==
== नुकसान ==
* सभी एल्गोरिदम को आसानी से सदिश नहीं बनाया जा सकता है। उदाहरण के लिए, फ्लो-कंट्रोल-हैवी टास्क जैसे कोड [[पदच्छेद]] आसानी से एसआईएमडी से लाभान्वित नहीं हो सकते हैं; हालांकि, अधिकतम कैश इष्टतमता को लक्षित करने के लिए तुलना और बैच प्रवाह को सदिश बनाना सैद्धांतिक रूप से संभव है, हालांकि इस तकनीक के लिए अधिक मध्यवर्ती स्थिति की आवश्यकता होगी। नोट: बैच-पाइपलाइन सिस्टम (उदाहरण: जीपीयू या सॉफ़्टवेयर रास्टराइज़ेशन पाइपलाइन) कैश नियंत्रण के लिए सबसे फायदेमंद होते हैं जब सिमड इंट्रिनिक्स के साथ कार्यान्वित किया जाता है, लेकिन वे सिमड सुविधाओं के लिए अनन्य नहीं हैं। कोड स्ट्रिंग्स जैसी श्रृंखला के भीतर निर्भरता से बचने के लिए और जटिलता स्पष्ट हो सकती है; जबकि वैश्वीकरण के लिए स्वतंत्रता आवश्यक है।{{Clarify|reason=You lost me. whilst this is all probably true, it is not in easy-to-follow language. which probably means it needs its own subsection, or references, or just rewriting.|date=June 2021}}
* सभी एल्गोरिदम को आसानी से सदिश नहीं बनाया जा सकता है। उदाहरण के लिए, फ्लो-कंट्रोल-हैवी टास्क जैसे कोड [[पदच्छेद]] आसानी से एसआईएमडी से लाभान्वित नहीं हो सकते हैं; हालांकि, अधिकतम कैश इष्टतमता को लक्षित करने के लिए तुलना और बैच प्रवाह को सदिश बनाना सैद्धांतिक रूप से संभव है, हालांकि इस तकनीक के लिए अधिक मध्यवर्ती स्थिति की आवश्यकता होगी। नोट: बैच-पाइपलाइन प्रणाली (उदाहरण: जीपीयू या सॉफ़्टवेयर रास्टराइज़ेशन पाइपलाइन) कैश नियंत्रण के लिए सबसे फायदेमंद होते हैं जब सिमड इंट्रिनिक्स के साथ कार्यान्वित किया जाता है, लेकिन वे सिमड सुविधाओं के लिए अनन्य नहीं हैं। कोड स्ट्रिंग्स जैसी श्रृंखला के भीतर निर्भरता से बचने के लिए और जटिलता स्पष्ट हो सकती है; जबकि वैश्वीकरण के लिए स्वतंत्रता आवश्यक है।{{Clarify|reason=You lost me. whilst this is all probably true, it is not in easy-to-follow language. which probably means it needs its own subsection, or references, or just rewriting.|date=June 2021}}
* बड़ी रजिस्टर फाइलें जो बिजली की खपत और आवश्यक चिप क्षेत्र को बढ़ाती हैं।
* बड़ी रजिस्टर फाइलें जो बिजली की खपत और आवश्यक चिप क्षेत्र को बढ़ाती हैं।
* वर्तमान में, एसआईएमडी निर्देशों के साथ एल्गोरिथ्म को प्रायुक्त करने के लिए आमतौर पर मानव श्रम की आवश्यकता होती है; उदाहरण के लिए, अधिकांश कंपाइलर विशिष्ट C (प्रोग्रामिंग लैंग्वेज) प्रोग्राम से एसआईएमडी निर्देश उत्पन्न नहीं करते हैं। कंपाइलर्स में [[स्वचालित वैश्वीकरण]] कंप्यूटर विज्ञान अनुसंधान का सक्रिय क्षेत्र है। (वेक्टर प्रोसेसर की तुलना करें।)
* वर्तमान में, एसआईएमडी निर्देशों के साथ एल्गोरिथ्म को प्रायुक्त करने के लिए आमतौर पर मानव श्रम की आवश्यकता होती है; उदाहरण के लिए, अधिकांश कंपाइलर विशिष्ट C (प्रोग्रामिंग लैंग्वेज) प्रोग्राम से एसआईएमडी निर्देश उत्पन्न नहीं करते हैं। कंपाइलर्स में [[स्वचालित वैश्वीकरण]] कंप्यूटर विज्ञान अनुसंधान का सक्रिय क्षेत्र है। (वेक्टर प्रोसेसर की तुलना करें।)
* विशेष एसआईएमडी निर्देश सेट के साथ प्रोग्रामिंग में कई निम्न-स्तरीय चुनौतियाँ सम्मिलित हो सकती हैं।
* विशेष एसआईएमडी निर्देश समूह के साथ प्रोग्रामिंग में कई निम्न-स्तरीय चुनौतियाँ सम्मिलित हो सकती हैं।
*# एसआईएमडी में [[डेटा संरचना संरेखण]] पर प्रतिबंध हो सकता है; विशेष आर्किटेक्चर से परिचित प्रोग्रामर इसकी उम्मीद नहीं कर सकते हैं। इससे भी बदतर: संरेखण संशोधन या संगत प्रोसेसर से दूसरे में बदल सकता है।
*# एसआईएमडी में [[डेटा संरचना संरेखण]] पर प्रतिबंध हो सकता है; विशेष आर्किटेक्चर से परिचित प्रोग्रामर इसकी उम्मीद नहीं कर सकते हैं। इससे भी बदतर: संरेखण संशोधन या संगत प्रोसेसर से दूसरे में बदल सकता है।
*# एसआईएमडी रजिस्टरों में डेटा इकट्ठा करना और इसे सही गंतव्य स्थानों पर बिखेरना मुश्किल है (कभी-कभी परमिट निर्देश की आवश्यकता होती है) और यह अक्षम हो सकता है।
*# एसआईएमडी रजिस्टरों में डेटा इकट्ठा करना और इसे सही गंतव्य स्थानों पर बिखेरना मुश्किल है (कभी-कभी परमिट निर्देश की आवश्यकता होती है) और यह अक्षम हो सकता है।
*# कुछ एसआईएमडी निर्देश सेटों में रोटेशन या तीन-ऑपरेंड जोड़ जैसे विशिष्ट निर्देश उपलब्ध नहीं हैं।
*# कुछ एसआईएमडी निर्देश समूहों में रोटेशन या तीन-ऑपरेंड जोड़ जैसे विशिष्ट निर्देश उपलब्ध नहीं हैं।
*# निर्देश सेट आर्किटेक्चर-विशिष्ट हैं: कुछ प्रोसेसर में एसआईएमडी निर्देशों की पूरी तरह से कमी होती है, इसलिए प्रोग्रामर को उनके लिए गैर-वेक्टरकृत कार्यान्वयन (या अलग-अलग वेक्टरकृत कार्यान्वयन) प्रदान करना चाहिए।
*# निर्देश समूह आर्किटेक्चर-विशिष्ट हैं: कुछ प्रोसेसर में एसआईएमडी निर्देशों की पूरी तरह से कमी होती है, इसलिए प्रोग्रामर को उनके लिए गैर-वेक्टरकृत कार्यान्वयन (या अलग-अलग वेक्टरकृत कार्यान्वयन) प्रदान करना चाहिए।
*# अलग-अलग आर्किटेक्चर अलग-अलग रजिस्टर आकार (जैसे 64, 128, 256 और 512 बिट्स) और निर्देश सेट प्रदान करते हैं, जिसका अर्थ है कि प्रोग्रामर को किसी दिए गए सीपीयू पर बेहतर ढंग से काम करने के लिए वेक्टरकृत कोड के कई कार्यान्वयन प्रदान करने चाहिए। इसके अलावा, एसआईएमडी निर्देशों का संभावित सेट प्रत्येक नए रजिस्टर आकार के साथ बढ़ता है। दुर्भाग्य से, लीगेसी समर्थन कारणों से, पुराने संस्करणों को समाप्त नहीं किया जा सकता है।
*# अलग-अलग आर्किटेक्चर अलग-अलग रजिस्टर आकार (जैसे 64, 128, 256 और 512 बिट्स) और निर्देश समूह प्रदान करते हैं, जिसका अर्थ है कि प्रोग्रामर को किसी दिए गए सीपीयू पर बेहतर ढंग से काम करने के लिए वेक्टरकृत कोड के कई कार्यान्वयन प्रदान करने चाहिए। इसके अलावा, एसआईएमडी निर्देशों का संभावित समूह प्रत्येक नए रजिस्टर आकार के साथ बढ़ता है। दुर्भाग्य से, लीगेसी समर्थन कारणों से, पुराने संस्करणों को समाप्त नहीं किया जा सकता है।
*# प्रारंभिक MMX (निर्देश सेट) निर्देश सेट ने फ़्लोटिंग-पॉइंट स्टैक के साथ रजिस्टर फ़ाइल साझा की, जिसके कारण फ़्लोटिंग-पॉइंट और MMX कोड को मिलाते समय अक्षमताएँ हुईं। हालाँकि, [[SSE2]] इसे सही करता है।
*# प्रारंभिक एमएमएक्स (निर्देश समूह) निर्देश समूह ने फ़्लोटिंग-पॉइंट स्टैक के साथ रजिस्टर फ़ाइल साझा की, जिसके कारण फ़्लोटिंग-पॉइंट और एमएमएक्स कोड को मिलाते समय अक्षमताएँ हुईं। हालाँकि, [[SSE2]] इसे सही करता है।


समस्याओं 1 और 5 को दूर करने के लिए, [[RISC-वी]]ी का वेक्टर एक्सटेंशन वैकल्पिक दृष्टिकोण का उपयोग करता है: प्रोग्रामर को उप-रजिस्टर-स्तर के विवरण को उजागर करने के बजाय, निर्देश सेट उन्हें कुछ वेक्टर रजिस्टरों के रूप में सार करता है जो सभी सीपीयू में समान इंटरफेस का उपयोग करते हैं। इस निर्देश सेट के साथ। हार्डवेयर सभी संरेखण मुद्दों और लूप के स्ट्रिप-माइनिंग को संभालता है। विभिन्न वेक्टर आकार वाली मशीनें समान कोड चलाने में सक्षम होंगी। एलएलवीएम इस वेक्टर प्रकार को कॉल करता है{{not a typo|vscale}}.{{citation needed|date=June 2021}}
समस्याओं 1 और 5 को दूर करने के लिए, [[RISC-वी]]ी का वेक्टर विस्तार वैकल्पिक दृष्टिकोण का उपयोग करता है: प्रोग्रामर को उप-रजिस्टर-स्तर के विवरण को उजागर करने के बजाय, निर्देश समूह उन्हें कुछ वेक्टर रजिस्टरों के रूप में सार करता है जो सभी सीपीयू में समान इंटरफेस का उपयोग करते हैं। इस निर्देश समूह के साथ। हार्डवेयर सभी संरेखण मुद्दों और लूप के स्ट्रिप-माइनिंग को संभालता है। विभिन्न वेक्टर आकार वाली मशीनें समान कोड चलाने में सक्षम होंगी। एलएलवीएम इस वेक्टर प्रकार को कॉल करता है{{not a typo|vscale}}.{{citation needed|date=June 2021}}
समतुल्य स्केलर या समतुल्य वेक्टर कोड की तुलना में कोड आकार में परिमाण वृद्धि का क्रम असामान्य नहीं है, और परिमाण या अधिक प्रभावशीलता का क्रम (अनुदेश के अनुसार किया गया कार्य) वेक्टर आईएसएएस के साथ प्राप्त करने योग्य है।<ref>{{cite web |last1=Patterson |first1=David |last2=Waterman |first2=Andrew |title=SIMD Instructions Considered Harmful |url=https://www.sigarch.org/simd-instructions-considered-harmful/ |website=SIGARCH |date=18 September 2017}}</ref>
समतुल्य स्केलर या समतुल्य वेक्टर कोड की तुलना में कोड आकार में परिमाण वृद्धि का क्रम असामान्य नहीं है, और परिमाण या अधिक प्रभावशीलता का क्रम (अनुदेश के अनुसार किया गया कार्य) वेक्टर आईएसएएस के साथ प्राप्त करने योग्य है।<ref>{{cite web |last1=Patterson |first1=David |last2=Waterman |first2=Andrew |title=SIMD Instructions Considered Harmful |url=https://www.sigarch.org/simd-instructions-considered-harmful/ |website=SIGARCH |date=18 September 2017}}</ref>
एआरएम का [[स्केलेबल वेक्टर एक्सटेंशन]] और तरीका अपनाता है, जिसे फ्लिन के वर्गीकरण में जाना जाता है # एकल निर्देश स्ट्रीम, एकाधिक डेटा स्ट्रीम (एसआईएमडी) | फ्लिन की वर्गीकरण असोसिएटिव प्रोसेसिंग के रूप में, जिसे आज आमतौर पर प्रिडिक्शन (कंप्यूटर आर्किटेक्चर) के रूप में जाना जाता है #एसआईएमडी, एसआईएमटी और वेक्टर प्रिडिक्शन| समर्पित (नकाबपोश) एसआईएमडी। यह दृष्टिकोण [[वेक्टर प्रसंस्करण]] के रूप में कॉम्पैक्ट नहीं है, लेकिन अभी भी गैर-निर्धारित एसआईएमडी से कहीं बेहतर है। विस्तृत तुलनात्मक उदाहरण वेक्टर प्रोसेसर#वेक्टर निर्देश उदाहरण पृष्ठ में दिए गए हैं।
एआरएम का [[स्केलेबल वेक्टर एक्सटेंशन|स्केलेबल वेक्टर विस्तार]] और तरीका अपनाता है, जिसे फ्लिन के वर्गीकरण में जाना जाता है # एकल निर्देश स्ट्रीम, एकाधिक डेटा स्ट्रीम (एसआईएमडी) | फ्लिन की वर्गीकरण असोसिएटिव प्रोसेसिंग के रूप में, जिसे आज आमतौर पर प्रिडिक्शन (कंप्यूटर आर्किटेक्चर) के रूप में जाना जाता है #एसआईएमडी, एसआईएमटी और वेक्टर प्रिडिक्शन| समर्पित (नकाबपोश) एसआईएमडी। यह दृष्टिकोण [[वेक्टर प्रसंस्करण]] के रूप में कॉम्पैक्ट नहीं है, लेकिन अभी भी गैर-निर्धारित एसआईएमडी से कहीं बेहतर है। विस्तृत तुलनात्मक उदाहरण वेक्टर प्रोसेसर#वेक्टर निर्देश उदाहरण पृष्ठ में दिए गए हैं।


== कालक्रम ==
== कालक्रम ==
Line 49: Line 49:
! Year !! Example
! Year !! Example
|-
|-
| 1974 || [[ILLIAC IV]]
| 1974 || [[ILLIAC IV|इलियाक चतुर्थ]]
|-
|-
| 1974 || [[ICL Distributed Array Processor]] (DAP)
| 1974 || [[ICL Distributed Array Processor]] (DAP)
Line 70: Line 70:


== हार्डवेयर ==
== हार्डवेयर ==
स्मॉल-स्केल (64 या 128 बिट्स) एसआईएमडी 1990 के दशक की शुरुआत में सामान्य-उद्देश्य वाले CPU पर लोकप्रिय हो गया और 1997 तक और बाद में DEC अल्फा के लिए मोशन वीडियो निर्देश (MVI) के साथ जारी रहा। अधिकांश CPU पर एसआईएमडी निर्देश डिग्री या किसी अन्य पर पाए जा सकते हैं, जिनमें [[IBM]] का AltiVec और PowerPC के लिए [[सिग्नल प्रोसेसिंग इंजन]], [[Hewlett-Packard]] का PA-RISC मल्टीमीडिया एक्सेलेरेशन एक्सटेन्शन (MAX), [[Intel Corporation]] का MMX (निर्देश सेट), स्ट्रीमिंग एसआईएमडी एक्सटेंशन सम्मिलित हैं। , SSE2, [[SSE3]] [[SSSE3]] और SSE4|SSE4.x, [[उन्नत लघु उपकरण]]ेज़ का 3DNow!, ARC (प्रोसेसर) का ARC वीडियो सबसिस्टम, [[SPARC]] का विज़ुअल निर्देश सेट और VIS2, [[सन माइक्रोसिस्टम्स]] का [[MAJC]], [[एआरएम होल्डिंग्स]] का ARM आर्किटेक्चर#एडवांस एसआईएमडी (नियॉन) तकनीक , MIPS आर्किटेक्चर 'MDMX (MaDMaX) और [[MIPS-3D]]। IBM, Sony, Toshiba सह-विकसित [[सेल (माइक्रोप्रोसेसर)]] की [[सिनर्जिस्टिक प्रोसेसिंग यूनिट]] का निर्देश सेट भारी एसआईएमडी आधारित है। [[PHILIPS]], जो अब NXP सेमीकंडक्टर है, ने Xetal नाम के कई एसआईएमडी प्रोसेसर विकसित किए। Xetal में 320 16-बिट प्रोसेसर तत्व हैं जो विशेष रूप से दृष्टि कार्यों के लिए डिज़ाइन किए गए हैं।
स्मॉल-स्केल (64 या 128 बिट्स) एसआईएमडी 1990 के दशक की प्रारंभ में सामान्य-उद्देश्य वाले CPU पर लोकप्रिय हो गया और 1997 तक और बाद में DEC अल्फा के लिए मोशन वीडियो निर्देश (MVI) के साथ जारी रहा। अधिकांश CPU पर एसआईएमडी निर्देश डिग्री या किसी अन्य पर पाए जा सकते हैं, जिनमें [[IBM|आईबीएम]] का अल्टीवेक और पावरपीसी के लिए [[सिग्नल प्रोसेसिंग इंजन]], [[Hewlett-Packard|हेवलेट पैकर्ड]] का पीए-आरआईएससी मल्टीमीडिया एक्सेलेरेशन एक्सटेन्शन (MAX), [[Intel Corporation|इंटेल Corporation]] का एमएमएक्स (निर्देश समूह), स्ट्रीमिंग एसआईएमडी विस्तार सम्मिलित हैं। , SSE2, [[SSE3]] [[SSSE3]] और SSE4|SSE4.x, [[उन्नत लघु उपकरण]]ेज़ का 3DNow!, ARC (प्रोसेसर) का ARC वीडियो उपप्रणाली, [[SPARC]] का विज़ुअल निर्देश समूह और VIS2, [[सन माइक्रोसिस्टम्स]] का [[MAJC]], [[एआरएम होल्डिंग्स]] का ARM आर्किटेक्चर#एडवांस एसआईएमडी (नियॉन) तकनीक , एमआईपीएस आर्किटेक्चर 'एमडीएमएक्स (MaDMaX) और [[MIPS-3D|एमआईपीएस-3D]]। आईबीएम, Sony, Toshiba सह-विकसित [[सेल (माइक्रोप्रोसेसर)]] की [[सिनर्जिस्टिक प्रोसेसिंग यूनिट]] का निर्देश समूह भारी एसआईएमडी आधारित है। [[PHILIPS]], जो अब NXP सेमीकंडक्टर है, ने Xetal नाम के कई एसआईएमडी प्रोसेसर विकसित किए। Xetal में 320 16-बिट प्रोसेसर तत्व हैं जो विशेष रूप से दृष्टि कार्यों के लिए डिज़ाइन किए गए हैं।


आधुनिक [[ग्राफ़िक्स प्रोसेसिंग युनिट]] (जीपीयू) अक्सर व्यापक एसआईएमडी कार्यान्वयन होते हैं, जो समय में 128 या 256 बिट्स पर शाखाओं, लोड और स्टोर करने में सक्षम होते हैं।
आधुनिक [[ग्राफ़िक्स प्रोसेसिंग युनिट]] (जीपीयू) अक्सर विस्तृत एसआईएमडी कार्यान्वयन होते हैं, जो समय में 128 या 256 बिट्स पर शाखाओं, लोड और स्टोर करने में सक्षम होते हैं।


Intel का AVX-512 एसआईएमडी निर्देश बार में 512 बिट डेटा प्रोसेस करता है।
इंटेल का एवीएक्स-512 एसआईएमडी निर्देश बार में 512 बिट डेटा प्रोसेस करता है।


== सॉफ्टवेयर ==
== सॉफ्टवेयर ==
[[File:non-SIMD cpu diagram1.svg|thumb|280px| चार 8-बिट संख्याओं का साधारण ट्रिपलिंग। CPU 8-बिट संख्या को R1 में लोड करता है, इसे R2 से गुणा करता है, और फिर उत्तर को R3 से वापस RAM में सहेजता है। यह प्रक्रिया प्रत्येक संख्या के लिए दोहराई जाती है।]]
[[File:non-SIMD cpu diagram1.svg|thumb|280px| चार 8-बिट संख्याओं का साधारण ट्रिपलिंग। CPU 8-बिट संख्या को R1 में लोड करता है, इसे R2 से गुणा करता है, और फिर उत्तर को R3 से वापस RAM में सहेजता है। यह प्रक्रिया प्रत्येक संख्या के लिए दोहराई जाती है।]]
[[File:SIMD cpu diagram1.svg|right|thumb|280px| चार 8-बिट संख्याओं का एसआईएमडी ट्रिपलिंग। सीपीयू बार में 4 नंबरों को लोड करता है, उन सभी को सिमड-गुणा में गुणा करता है, और उन सभी को बार वापस रैम में सहेजता है। सिद्धांत रूप में, गति को 4 से गुणा किया जा सकता है।]]एसआईएमडी निर्देशों का व्यापक रूप से 3D ग्राफ़िक्स को संसाधित करने के लिए उपयोग किया जाता है, हालाँकि एम्बेडेड एसआईएमडी वाले आधुनिक [[वीडियो कार्ड]]ों ने इस कार्य को CPU से बड़े पैमाने पर ले लिया है। कुछ प्रणालियों में परमिट फ़ंक्शंस भी सम्मिलित होते हैं जो वैक्टर के अंदर तत्वों को फिर से पैक करते हैं, जिससे वे डेटा प्रोसेसिंग और संपीड़न के लिए विशेष रूप से उपयोगी होते हैं। इनका उपयोग क्रिप्टोग्राफी में भी किया जाता है।<ref>[http://marc.info/?l=openssl-dev&m=108530261323715&w=2 RE: SSE2 speed], showing how SSE2 is used to implement SHA hash algorithms</ref><ref>[http://cr.yp.to/snuffle.html#speed Salsa20 speed; Salsa20 software], showing a stream cipher implemented using SSE2</ref><ref>[http://markmail.org/message/tygo74tyjagwwnp4 Subject: up to 1.4x RSA throughput using SSE2], showing RSA implemented using a non-SIMD SSE2 integer multiply instruction.</ref> जीपीयू ([[जीपीजीपीयू]]) पर सामान्य प्रयोजन कंप्यूटिंग की प्रवृत्ति से भविष्य में सिमड का व्यापक उपयोग हो सकता है।
[[File:SIMD cpu diagram1.svg|right|thumb|280px| चार 8-बिट संख्याओं का एसआईएमडी ट्रिपलिंग। सीपीयू बार में 4 नंबरों को लोड करता है, उन सभी को सिमड-गुणा में गुणा करता है, और उन सभी को बार वापस रैम में सहेजता है। सिद्धांत रूप में, गति को 4 से गुणा किया जा सकता है।]]एसआईएमडी निर्देशों का विस्तृत रूप से 3D ग्राफ़िक्स को संसाधित करने के लिए उपयोग किया जाता है, हालाँकि एम्बेडेड एसआईएमडी वाले आधुनिक [[वीडियो कार्ड]]ों ने इस कार्य को CPU से बड़े पैमाने पर ले लिया है। कुछ प्रणालियों में परमिट फ़ंक्शंस भी सम्मिलित होते हैं जो वैक्टर के अंदर तत्वों को फिर से पैक करते हैं, जिससे वे डेटा प्रोसेसिंग और संपीड़न के लिए विशेष रूप से उपयोगी होते हैं। इनका उपयोग क्रिप्टोग्राफी में भी किया जाता है।<ref>[http://marc.info/?l=openssl-dev&m=108530261323715&w=2 RE: SSE2 speed], showing how SSE2 is used to implement SHA hash algorithms</ref><ref>[http://cr.yp.to/snuffle.html#speed Salsa20 speed; Salsa20 software], showing a stream cipher implemented using SSE2</ref><ref>[http://markmail.org/message/tygo74tyjagwwnp4 Subject: up to 1.4x RSA throughput using SSE2], showing RSA implemented using a non-SIMD SSE2 integer multiply instruction.</ref> जीपीयू ([[जीपीजीपीयू]]) पर सामान्य प्रयोजन कंप्यूटिंग की प्रवृत्ति से भविष्य में सिमड का विस्तृत उपयोग हो सकता है।


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


X86 पर एसआईएमडी की शुरुआत धीमी रही। 3DNow की शुरूआत! Intel Corporation द्वारा उन्नत माइक्रो डिवाइसेस और स्ट्रीमिंग एसआईएमडी एक्सटेंशन कुछ हद तक भ्रमित करते हैं, लेकिन आज लगता है कि सिस्टम व्यवस्थित हो गया है (AMD द्वारा SSE को अपनाने के बाद) और नए कंपाइलरों को अधिक एसआईएमडी- सक्षम सॉफ़्टवेयर में परिणाम देना चाहिए। Intel और AMD अब दोनों अनुकूलित गणित पुस्तकालय प्रदान करते हैं जो एसआईएमडी निर्देशों का उपयोग करते हैं, और [[libSIMD|libएसआईएमडी]], [[SIMDx86|एसआईएमडीx86]] और [[SLEEF]] जैसे ओपन सोर्स विकल्प दिखाई देने लगे हैं ([[libm]] भी देखें)।<ref>{{cite web |title=SIMD library math functions |url=https://stackoverflow.com/a/36637424 |website=Stack Overflow |access-date=16 January 2020}}</ref>
X86 पर एसआईएमडी की प्रारंभ धीमी रही थी। 3DNow की शुरूआत! इंटेल Corporation द्वारा उन्नत माइक्रो डिवाइसेस और स्ट्रीमिंग एसआईएमडी विस्तार कुछ हद तक भ्रमित करते हैं, लेकिन आज लगता है कि प्रणाली व्यवस्थित हो गया है (एएमडी द्वारा SSE को अपनाने के बाद) और नए कंपाइलरों को अधिक एसआईएमडी- सक्षम सॉफ़्टवेयर में परिणाम देना चाहिए। इंटेल और एएमडी अब दोनों अनुकूलित गणित पुस्तकालय प्रदान करते हैं जो एसआईएमडी निर्देशों का उपयोग करते हैं, और [[libSIMD|libएसआईएमडी]], [[SIMDx86|एसआईएमडीx86]] और [[SLEEF]] जैसे ओपन सोर्स विकल्प दिखाई देने लगे हैं ([[libm|lआईबीएम]] भी देखें)।<ref>{{cite web |title=SIMD library math functions |url=https://stackoverflow.com/a/36637424 |website=Stack Overflow |access-date=16 January 2020}}</ref>
Apple Inc. को कुछ अधिक सफलता मिली, भले ही उन्होंने बाकी की तुलना में बाद में एसआईएमडी बाजार में प्रवेश किया। AltiVec ने समृद्ध प्रणाली की पेशकश की और मोटोरोला, आईबीएम और [[जीएनयू]] से तेजी से परिष्कृत कंपाइलरों का उपयोग करके प्रोग्राम किया जा सकता है, इसलिए असेंबली भाषा प्रोग्रामिंग की शायद ही कभी आवश्यकता होती है। इसके अतिरिक्त, एसआईएमडी से लाभान्वित होने वाली कई प्रणालियों की आपूर्ति स्वयं Apple द्वारा की गई थी, उदाहरण के लिए [[iTunes]] और [[QuickTime]]। हालाँकि, 2006 में, Apple कंप्यूटर Intel x86 प्रोसेसर में चले गए। Apple के [[अप्लिकेशन प्रोग्रामिंग अंतरफलक]] और [[एकीकृत विकास पर्यावरण]] (Xcode) को SSE2 और SSE3 के साथ-साथ AltiVec को सपोर्ट करने के लिए संशोधित किया गया था। Apple आईबीएम और [[फ्रीस्केल सेमीकंडक्टर]] से पावरपीसी चिप्स का प्रमुख खरीदार था और भले ही उन्होंने प्लेटफॉर्म को छोड़ दिया, अल्टिवेक का आगे विकास फ्रीस्केल और आईबीएम से कई पावरपीसी और पावर आईएसए डिजाइनों में जारी है।
Apple Inc. को कुछ अधिक सफलता मिली, भले ही उन्होंने बाकी की तुलना में बाद में एसआईएमडी बाजार में प्रवेश किया। अल्टीवेक ने समृद्ध प्रणाली की प्रस्तुतकश की और मोटोरोला, आईबीएम और [[जीएनयू]] से तेजी से परिष्कृत कंपाइलरों का उपयोग करके प्रोग्राम किया जा सकता है, इसलिए असेंबली भाषा प्रोग्रामिंग की शायद ही कभी आवश्यकता होती है। इसके अतिरिक्त, एसआईएमडी से लाभान्वित होने वाली कई प्रणालियों की आपूर्ति स्वयं Apple द्वारा की गई थी, उदाहरण के लिए [[iTunes]] और [[QuickTime]]। हालाँकि, 2006 में, Apple कंप्यूटर इंटेल x86 प्रोसेसर में चले गए। Apple के [[अप्लिकेशन प्रोग्रामिंग अंतरफलक]] और [[एकीकृत विकास पर्यावरण]] (Xcode) को SSE2 और SSE3 के साथ-साथ अल्टीवेक को सपोर्ट करने के लिए संशोधित किया गया था। Apple आईबीएम और [[फ्रीस्केल सेमीकंडक्टर]] से पावरपीसी चिप्स का प्रमुख खरीदार था और भले ही उन्होंने प्लेटफॉर्म को छोड़ दिया, अल्टिवेक का आगे विकास फ्रीस्केल और आईबीएम से कई पावरपीसी और पावर आईएसए डिजाइनों में जारी है।


रजिस्टर के भीतर एसआईएमडी, या [[SWAR]], हार्डवेयर पर सामान्य-उद्देश्य वाले रजिस्टरों में एसआईएमडी के प्रदर्शन के लिए उपयोग की जाने वाली तकनीकों और युक्तियों की श्रृंखला है जो एसआईएमडी निर्देशों के लिए कोई प्रत्यक्ष समर्थन प्रदान नहीं करता है। इसका उपयोग हार्डवेयर पर भी कुछ एल्गोरिदम में समानता का फायदा उठाने के लिए किया जा सकता है जो सीधे सिमड का समर्थन नहीं करता है।
रजिस्टर के भीतर एसआईएमडी, या [[SWAR]], हार्डवेयर पर सामान्य-उद्देश्य वाले रजिस्टरों में एसआईएमडी के प्रदर्शन के लिए उपयोग की जाने वाली तकनीकों और युक्तियों की श्रृंखला है जो एसआईएमडी निर्देशों के लिए कोई प्रत्यक्ष समर्थन प्रदान नहीं करता है। इसका उपयोग हार्डवेयर पर भी कुछ एल्गोरिदम में समानता का फायदा उठाने के लिए किया जा सकता है जो सीधे सिमड का समर्थन नहीं करता है।


=== प्रोग्रामर इंटरफ़ेस ===
=== प्रोग्रामर इंटरफ़ेस ===
एसआईएमडी निर्देश सेट के प्रकाशकों के लिए यह सामान्य है कि वे सदिश कोड की पीढ़ी की गारंटी देने वाले [[आंतरिक कार्य]]ों या विशेष डेटाटाइप्स ([[ऑपरेटर ओवरलोडिंग]] के साथ) के साथ अपने स्वयं के C/C++ भाषा एक्सटेंशन बनाते हैं। Intel, AltiVec, और ARM NEON अपने CPU को लक्षित करने वाले कंपाइलरों द्वारा व्यापक रूप से अपनाए गए एक्सटेंशन प्रदान करते हैं। (अधिक जटिल संचालन वेक्टर गणित पुस्तकालयों का कार्य है।)
एसआईएमडी निर्देश समूह के प्रकाशकों के लिए यह सामान्य है कि वे सदिश कोड की पीढ़ी की गारंटी देने वाले [[आंतरिक कार्य]]ों या विशेष डेटाटाइप्स ([[ऑपरेटर ओवरलोडिंग]] के साथ) के साथ अपने स्वयं के C/C++ भाषा विस्तार बनाते हैं। इंटेल, अल्टीवेक, और ARM NEON अपने CPU को लक्षित करने वाले कंपाइलरों द्वारा विस्तृत रूप से अपनाए गए विस्तार प्रदान करते हैं। (अधिक जटिल संचालन वेक्टर गणित पुस्तकालयों का कार्य है।)


GNU C कंपाइलर एक्सटेंशन को सार्वभौमिक इंटरफ़ेस में सारणित करके कदम आगे ले जाता है जिसे एसआईएमडी डेटाटाइप्स को परिभाषित करने का तरीका प्रदान करके किसी भी प्लेटफ़ॉर्म पर उपयोग किया जा सकता है।<ref>{{cite web |title=Vector Extensions |url=https://gcc.gnu.org/onlinedocs/gcc/Vector-Extensions.html |website=Using the GNU Compiler Collection (GCC) |access-date=16 January 2020}}</ref> [[एलएलवीएम]] क्लैंग कंपाइलर आईआर में परिभाषित समान इंटरफ़ेस के साथ, सुविधा को प्रायुक्त करता है।<ref>{{cite web |title=Clang Language Extensions |url=https://clang.llvm.org/docs/LanguageExtensions.html |website=Clang 11 documentation |access-date=16 January 2020}}</ref> रस्ट का पैक्ड_सिम क्रेट इस इंटरफ़ेस का उपयोग करता है, और इसी तरह [[स्विफ्ट (प्रोग्रामिंग भाषा)]] 2.0+ करता है।
GNU C कंपाइलर विस्तार को सार्वभौमिक इंटरफ़ेस में सारणित करके कदम आगे ले जाता है जिसे एसआईएमडी डेटाटाइप्स को परिभाषित करने का तरीका प्रदान करके किसी भी प्लेटफ़ॉर्म पर उपयोग किया जा सकता है।<ref>{{cite web |title=Vector Extensions |url=https://gcc.gnu.org/onlinedocs/gcc/Vector-Extensions.html |website=Using the GNU Compiler Collection (GCC) |access-date=16 January 2020}}</ref> [[एलएलवीएम]] क्लैंग कंपाइलर आईआर में परिभाषित समान इंटरफ़ेस के साथ, सुविधा को प्रायुक्त करता है।<ref>{{cite web |title=Clang Language Extensions |url=https://clang.llvm.org/docs/LanguageExtensions.html |website=Clang 11 documentation |access-date=16 January 2020}}</ref> रस्ट का पैक्ड_सिम क्रेट इस इंटरफ़ेस का उपयोग करता है, और इसी तरह [[स्विफ्ट (प्रोग्रामिंग भाषा)]] 2.0+ करता है।


सी ++ में प्रयोगात्मक इंटरफ़ेस है {{code|std::experimental::simd}} जो GCC एक्सटेंशन के समान कार्य करता है। एलएलवीएम का libcxx इसे प्रायुक्त करता प्रतीत होता है। GCC और libstdc++ के लिए, रैपर लाइब्रेरी जो GCC एक्सटेंशन के शीर्ष पर बनती है, उपलब्ध है।<ref>{{cite web |title=VcDevel/std-simd |url=https://github.com/VcDevel/std-simd |publisher=VcDevel |date=6 August 2020}}</ref>
सी ++ में प्रयोगात्मक इंटरफ़ेस है {{code|std::experimental::simd}} जो GCC विस्तार के समान कार्य करता है। एलएलवीएम का libcxx इसे प्रायुक्त करता प्रतीत होता है। GCC और libstdc++ के लिए, रैपर लाइब्रेरी जो GCC विस्तार के शीर्ष पर बनती है, उपलब्ध है।<ref>{{cite web |title=VcDevel/std-simd |url=https://github.com/VcDevel/std-simd |publisher=VcDevel |date=6 August 2020}}</ref>
[[Microsoft Corporation]] ने RyuJIT में एसआईएमडी को .NET Core|.NET में जोड़ा।<ref>{{cite web|url=https://devblogs.microsoft.com/dotnet/ryujit-the-next-generation-jit-compiler-for-net|title=RyuJIT: The next-generation JIT compiler for .NET}}</ref>  {{code|System.Numerics.Vector}}<nowiki> }} पैकेज, NuGet पर उपलब्ध है, एसआईएमडी डेटाटाइप प्रायुक्त करें।</nowiki><ref>{{cite web|url=https://devblogs.microsoft.com/dotnet/the-jit-finally-proposed-jit-and-simd-are-getting-married|title=The JIT finally proposed. JIT and SIMD are getting married}}</ref> जावा में एसआईएमडी निर्देशों के लिए नया प्रस्तावित API भी है <ref>{{cite web|url=https://openjdk.java.net/jeps/338|title=JEP 338: Vector API}}</ref> इनक्यूबेटर मॉड्यूल में [[OpenJDK]] 17 में उपलब्ध है। इसमें असमर्थित सीपीयू पर साधारण लूप के लिए सुरक्षित फॉलबैक तंत्र भी है।
[[Microsoft Corporation]] ने RyuJIT में एसआईएमडी को .NET Core|.NET में जोड़ा।<ref>{{cite web|url=https://devblogs.microsoft.com/dotnet/ryujit-the-next-generation-jit-compiler-for-net|title=RyuJIT: The next-generation JIT compiler for .NET}}</ref>  {{code|System.Numerics.Vector}}<nowiki> }} पैकेज, NuGet पर उपलब्ध है, एसआईएमडी डेटाटाइप प्रायुक्त करें।</nowiki><ref>{{cite web|url=https://devblogs.microsoft.com/dotnet/the-jit-finally-proposed-jit-and-simd-are-getting-married|title=The JIT finally proposed. JIT and SIMD are getting married}}</ref> जावा में एसआईएमडी निर्देशों के लिए नया प्रस्तावित API भी है <ref>{{cite web|url=https://openjdk.java.net/jeps/338|title=JEP 338: Vector API}}</ref> इनक्यूबेटर मॉड्यूल में [[OpenJDK]] 17 में उपलब्ध है। इसमें असमर्थित सीपीयू पर साधारण लूप के लिए सुरक्षित फॉलबैक तंत्र भी है।


एसआईएमडी डेटाटाइप प्रदान करने के बजाय, कंपाइलर्स को कुछ लूपों को ऑटो-वेक्टराइज़ करने के लिए भी संकेत दिया जा सकता है, संभवतः डेटा निर्भरता की कमी के बारे में कुछ अभिकथन ले रहा है। यह सीधे एसआईएमडी वेरिएबल्स में हेरफेर करने जितना लचीला नहीं है, लेकिन इसका उपयोग करना आसान है। [[ओपनएमपी]] 4.0+ में {{code|#pragma omp simd}} संकेत देना।<ref>{{cite web |title=SIMD Directives |url=https://www.openmp.org/spec-html/5.0/openmpsu42.html |website=www.openmp.org}}</ref> इस OpenMP इंटरफ़ेस ने [[Cilk]]'s सहित गैर-मानक एक्सटेंशन के विस्तृत सेट को बदल दिया है {{code|#pragma simd}}.,<ref>{{cite web |title=Tutorial pragma simd |url=https://www.cilkplus.org/tutorial-pragma-simd |website=CilkPlus |date=18 July 2012}}</ref> जीसीसी के {{code|#pragma GCC ivdep}}, और भी कई।<ref>{{cite web|url=https://www.openmp.org/wp-content/uploads/OpenMP_SC20_Loop_Transformations.pdf|title=OMP5.1: Loop Transformations|first=Michael|last=Kruse}}</ref>
एसआईएमडी डेटाटाइप प्रदान करने के बजाय, कंपाइलर्स को कुछ लूपों को ऑटो-वेक्टराइज़ करने के लिए भी संकेत दिया जा सकता है, संभवतः डेटा निर्भरता की कमी के बारे में कुछ अभिकथन ले रहा है। यह सीधे एसआईएमडी वेरिएबल्स में हेरफेर करने जितना लचीला नहीं है, लेकिन इसका उपयोग करना आसान है। [[ओपनएमपी]] 4.0+ में {{code|#pragma omp simd}} संकेत देना।<ref>{{cite web |title=SIMD Directives |url=https://www.openmp.org/spec-html/5.0/openmpsu42.html |website=www.openmp.org}}</ref> इस OpenMP इंटरफ़ेस ने [[Cilk]]'s सहित गैर-मानक विस्तार के विस्तृत समूह को बदल दिया है {{code|#pragma simd}}.,<ref>{{cite web |title=Tutorial pragma simd |url=https://www.cilkplus.org/tutorial-pragma-simd |website=CilkPlus |date=18 July 2012}}</ref> जीसीसी के {{code|#pragma GCC ivdep}}, और भी कई।<ref>{{cite web|url=https://www.openmp.org/wp-content/uploads/OpenMP_SC20_Loop_Transformations.pdf|title=OMP5.1: Loop Transformations|first=Michael|last=Kruse}}</ref>




=== एसआईएमडी बहु-संस्करण ===
=== एसआईएमडी बहु-संस्करण ===
उपभोक्ता सॉफ्टवेयर से आमतौर पर कई पीढ़ियों को कवर करने वाले सीपीयू की श्रृंखला पर काम करने की उम्मीद की जाती है, जो प्रोग्राम के कम्प्यूटेशनल प्रदर्शन को बेहतर बनाने के लिए प्रोग्रामर की नए एसआईएमडी निर्देशों का उपयोग करने की क्षमता को सीमित कर सकता है। समाधान ही कोड के कई संस्करणों को सम्मिलित करना है जो या तो पुरानी या नई एसआईएमडी तकनीकों का उपयोग करता है, और को चुनें जो रन-टाइम ([[गतिशील प्रेषण]]) पर उपयोगकर्ता के CPU के लिए सबसे उपयुक्त हो। समाधान के दो मुख्य शिविर हैं:
उपभोक्ता सॉफ्टवेयर से आमतौर पर कई पीढ़ियों को कवर करने वाले सीपीयू की श्रृंखला पर काम करने की उम्मीद की जाती है, जो प्रोग्राम के कम्प्यूटेशनल प्रदर्शन को बेहतर बनाने के लिए प्रोग्रामर की नए एसआईएमडी निर्देशों का उपयोग करने की क्षमता को सीमित कर सकता है। समाधान ही कोड के कई संस्करणों को सम्मिलित करना है जो या तो पुरानी या नई एसआईएमडी तकनीकों का उपयोग करता है, और को चुनें जो रन-टाइम ([[गतिशील प्रेषण]]) पर उपयोगकर्ता के CPU के लिए सबसे उपयुक्त हो। समाधान के दो मुख्य शिविर हैं:
* फंक्शन मल्टी-वर्जनिंग (FMV): प्रोग्राम या लाइब्रेरी में [[सबरूटीन]] को कई निर्देश सेट एक्सटेंशन के लिए डुप्लिकेट और संकलित किया जाता है, और प्रोग्राम यह तय करता है कि रन-टाइम में किसका उपयोग किया जाए।
* फंक्शन मल्टी-वर्जनिंग (FMV): प्रोग्राम या लाइब्रेरी में [[सबरूटीन]] को कई निर्देश समूह विस्तार के लिए डुप्लिकेट और संकलित किया जाता है, और प्रोग्राम यह तय करता है कि रन-टाइम में किसका उपयोग किया जाए।
* लाइब्रेरी मल्टी-वर्जनिंग (LMV): संपूर्ण [[पुस्तकालय (कम्प्यूटिंग)]] को कई निर्देश सेट एक्सटेंशन के लिए डुप्लिकेट किया गया है, और ऑपरेटिंग सिस्टम या प्रोग्राम यह तय करता है कि रन-टाइम पर किसे लोड करना है।
* लाइब्रेरी मल्टी-वर्जनिंग (LMV): संपूर्ण [[पुस्तकालय (कम्प्यूटिंग)]] को कई निर्देश समूह विस्तार के लिए डुप्लिकेट किया गया है, और ऑपरेटिंग प्रणाली या प्रोग्राम यह तय करता है कि रन-टाइम पर किसे लोड करना है।


FMV, असेंबली लैंग्वेज में मैन्युअल रूप से कोडित, आमतौर पर कई प्रदर्शन-महत्वपूर्ण पुस्तकालयों जैसे glibc और libjpeg-turbo में उपयोग किया जाता है। [[इंटेल सी ++ कंपाइलर]], जीसीसी 6 के बाद से जीएनयू कंपाइलर संग्रह, और क्लैंग 7 के बाद से क्लैंग सरलीकृत दृष्टिकोण की अनुमति देता है, जिसमें कंपाइलर फ़ंक्शन डुप्लिकेशन और चयन का ख्याल रखता है। जीसीसी और [[बजना]] स्पष्ट की आवश्यकता है {{code|target_clones}} कार्यों को क्लोन करने के लिए कोड में लेबल,<ref>{{cite web |title=Function multi-versioning in GCC 6 |url=https://lwn.net/Articles/691932/ |website=lwn.net}}</ref> जबकि ICC स्वचालित रूप से ऐसा करता है (कमांड-लाइन विकल्प के तहत {{code|/Qax}}). [[जंग प्रोग्रामिंग भाषा]] FMV को भी सपोर्ट करती है। सेटअप जीसीसी और क्लैंग के समान है जिसमें कोड परिभाषित करता है कि किस निर्देश को संकलित करना है, लेकिन क्लोनिंग मैन्युअल रूप से इनलाइनिंग के माध्यम से की जाती है।<ref>{{cite web |title=2045-target-feature |url= https://rust-lang.github.io/rfcs/2045-target-feature.html |website=The Rust RFC Book}}</ref>
FMV, असेंबली लैंग्वेज में मैन्युअल रूप से कोडित, आमतौर पर कई प्रदर्शन-महत्वपूर्ण पुस्तकालयों जैसे glibc और libjpeg-turbo में उपयोग किया जाता है। [[इंटेल सी ++ कंपाइलर]], जीसीसी 6 के बाद से जीएनयू कंपाइलर संग्रह, और क्लैंग 7 के बाद से क्लैंग सरलीकृत दृष्टिकोण की अनुमति देता है, जिसमें कंपाइलर फ़ंक्शन डुप्लिकेशन और चयन का ख्याल रखता है। जीसीसी और [[बजना]] स्पष्ट की आवश्यकता है {{code|target_clones}} कार्यों को क्लोन करने के लिए कोड में लेबल,<ref>{{cite web |title=Function multi-versioning in GCC 6 |url=https://lwn.net/Articles/691932/ |website=lwn.net}}</ref> जबकि ICC स्वचालित रूप से ऐसा करता है (कमांड-लाइन विकल्प के तहत {{code|/Qax}}). [[जंग प्रोग्रामिंग भाषा]] FMV को भी सपोर्ट करती है। समूहअप जीसीसी और क्लैंग के समान है जिसमें कोड परिभाषित करता है कि किस निर्देश को संकलित करना है, लेकिन क्लोनिंग मैन्युअल रूप से इनलाइनिंग के माध्यम से की जाती है।<ref>{{cite web |title=2045-target-feature |url= https://rust-lang.github.io/rfcs/2045-target-feature.html |website=The Rust RFC Book}}</ref>
एफएमवी का उपयोग करने के लिए जीसीसी और क्लैंग पर कोड संशोधन की आवश्यकता होती है, विक्रेता आमतौर पर लाइब्रेरी मल्टी-वर्जनिंग का उपयोग करते हैं: इसे हासिल करना आसान है क्योंकि केवल कंपाइलर स्विच को बदलने की जरूरत है। [[Glibc]] LMV का समर्थन करता है और यह कार्यक्षमता Intel-समर्थित Clear Linux प्रोजेक्ट द्वारा अपनाई जाती है।<ref name=clear>{{cite web |title=Transparent use of library packages optimized for Intel® architecture |url=https://clearlinux.org/news-blogs/transparent-use-library-packages-optimized-intel-architecture |website=Clear Linux* Project |access-date=8 September 2019 |language=en}}</ref>
एफएमवी का उपयोग करने के लिए जीसीसी और क्लैंग पर कोड संशोधन की आवश्यकता होती है, विक्रेता आमतौर पर लाइब्रेरी मल्टी-वर्जनिंग का उपयोग करते हैं: इसे हासिल करना आसान है क्योंकि केवल कंपाइलर स्विच को बदलने की जरूरत है। [[Glibc]] LMV का समर्थन करता है और यह कार्यक्षमता इंटेल-समर्थित Clear Linux प्रोजेक्ट द्वारा अपनाई जाती है।<ref name=clear>{{cite web |title=Transparent use of library packages optimized for Intel® architecture |url=https://clearlinux.org/news-blogs/transparent-use-library-packages-optimized-intel-architecture |website=Clear Linux* Project |access-date=8 September 2019 |language=en}}</ref>




== वेब पर एसआईएमडी ==
== वेब पर एसआईएमडी ==
2013 में जॉन मैककॉचन ने घोषणा की कि उन्होंने [[डार्ट (प्रोग्रामिंग भाषा)]] प्रोग्रामिंग भाषा के लिए एसआईएमडी निर्देश सेट के लिए उच्च-प्रदर्शन इंटरफ़ेस बनाया है, जिससे पहली बार एसआईएमडी के लाभ वेब प्रोग्राम में आए। इंटरफ़ेस में दो प्रकार होते हैं:<ref>{{cite web|url=https://www.dartlang.org/slides/2013/02/Bringing-SIMD-to-the-Web-via-Dart.pdf|title=Bringing SIMD to the web via Dart|author=John McCutchan|archive-url=https://web.archive.org/web/20131203011540/https://www.dartlang.org/slides/2013/02/Bringing-SIMD-to-the-Web-via-Dart.pdf|archive-date=2013-12-03}}</ref>
2013 में जॉन मैककॉचन ने घोषणा की कि उन्होंने [[डार्ट (प्रोग्रामिंग भाषा)]] प्रोग्रामिंग भाषा के लिए एसआईएमडी निर्देश समूह के लिए उच्च-प्रदर्शन इंटरफ़ेस बनाया है, जिससे पहली बार एसआईएमडी के लाभ वेब प्रोग्राम में आए। इंटरफ़ेस में दो प्रकार होते हैं:<ref>{{cite web|url=https://www.dartlang.org/slides/2013/02/Bringing-SIMD-to-the-Web-via-Dart.pdf|title=Bringing SIMD to the web via Dart|author=John McCutchan|archive-url=https://web.archive.org/web/20131203011540/https://www.dartlang.org/slides/2013/02/Bringing-SIMD-to-the-Web-via-Dart.pdf|archive-date=2013-12-03}}</ref>
* फ्लोट32x4, 4 एकल सटीक फ्लोटिंग पॉइंट मान।
* फ्लोट32x4, 4 एकल सटीक फ्लोटिंग पॉइंट मान।
* Int32x4, 4 32-बिट पूर्णांक मान।
* Int32x4, 4 32-बिट पूर्णांक मान।


इन प्रकारों के उदाहरण अपरिवर्तनीय हैं और अनुकूलित कोड में सीधे एसआईएमडी रजिस्टरों में मैप किए जाते हैं। डार्ट में व्यक्त संचालन आमतौर पर बिना किसी ओवरहेड के एकल निर्देश में संकलित किए जाते हैं। यह C और C++ इंट्रिनिक्स के समान है। डार्ट में लिखे स्केलर कोड की तुलना में 4×4 मैट्रिक्स | 4×4 [[मैट्रिक्स गुणन]], [[3डी वर्टेक्स परिवर्तन]] और [[मैंडेलब्रॉट सेट]] विज़ुअलाइज़ेशन के लिए बेंचमार्क 400% स्पीडअप के करीब दिखाते हैं।
इन प्रकारों के उदाहरण अपरिवर्तनीय हैं और अनुकूलित कोड में सीधे एसआईएमडी रजिस्टरों में मैप किए जाते हैं। डार्ट में व्यक्त संचालन आमतौर पर बिना किसी ओवरहेड के एकल निर्देश में संकलित किए जाते हैं। यह C और C++ इंट्रिनिक्स के समान है। डार्ट में लिखे स्केलर कोड की तुलना में 4×4 मैट्रिक्स | 4×4 [[मैट्रिक्स गुणन]], [[3डी वर्टेक्स परिवर्तन]] और [[मैंडेलब्रॉट सेट|मैंडेलब्रॉट समूह]] विज़ुअलाइज़ेशन के लिए बेंचमार्क 400% स्पीडअप के करीब दिखाते हैं।


डार्ट पर मैककॉचन का काम, जिसे अब एसआईएमडी.js कहा जाता है, को [[ECMAScript]] द्वारा अपनाया गया है और Intel ने IDF 2013 में घोषणा की कि वे [[V8 (जावास्क्रिप्ट इंजन)]] और स्पाइडरमोन्की (जावास्क्रिप्ट इंजन) दोनों के लिए मैककुचन के विनिर्देश को प्रायुक्त कर रहे हैं।<ref>{{cite web |title=SIMD in JavaScript |url=https://01.org/node/1495 |website=01.org |date=8 May 2014}}</ref> हालाँकि, 2017 तक, एसआईएमडी.js को WebAssembly में समान इंटरफ़ेस को आगे बढ़ाने के पक्ष में ECMAScript मानक कतार से बाहर कर दिया गया है।<ref>{{cite web |title=tc39/ecmascript_simd: SIMD numeric type for EcmaScript. |url=https://github.com/tc39/ecmascript_simd/ |website=GitHub |publisher=Ecma TC39 |access-date=8 September 2019 |date=22 August 2019}}</ref> अगस्त 2020 तक, WebAssembly इंटरफ़ेस अधूरा बना हुआ है, लेकिन इसके पोर्टेबल 128-बिट एसआईएमडी फीचर का पहले ही कई इंजनों में कुछ उपयोग देखा जा चुका है।
डार्ट पर मैककॉचन का काम, जिसे अब एसआईएमडी.js कहा जाता है, को [[ECMAScript]] द्वारा अपनाया गया है और इंटेल ने IDF 2013 में घोषणा की कि वे [[V8 (जावास्क्रिप्ट इंजन)]] और स्पाइडरमोन्की (जावास्क्रिप्ट इंजन) दोनों के लिए मैककुचन के विनिर्देश को प्रायुक्त कर रहे हैं।<ref>{{cite web |title=SIMD in JavaScript |url=https://01.org/node/1495 |website=01.org |date=8 May 2014}}</ref> हालाँकि, 2017 तक, एसआईएमडी.js को WebAssembly में समान इंटरफ़ेस को आगे बढ़ाने के पक्ष में ECMAScript मानक कतार से बाहर कर दिया गया है।<ref>{{cite web |title=tc39/ecmascript_simd: SIMD numeric type for EcmaScript. |url=https://github.com/tc39/ecmascript_simd/ |website=GitHub |publisher=Ecma TC39 |access-date=8 September 2019 |date=22 August 2019}}</ref> अगस्त 2020 तक, WebAssembly इंटरफ़ेस अधूरा बना हुआ है, लेकिन इसके पोर्टेबल 128-बिट एसआईएमडी फीचर का पहले ही कई इंजनों में कुछ उपयोग देखा जा चुका है।


Emscripten, मोज़िला का C/C++-to-JavaScript कंपाइलर, एक्सटेंशन के साथ C++ प्रोग्राम के संकलन को सक्षम कर सकता है जो एसआईएमडी इंट्रिनिक्स या GCC-स्टाइल वेक्टर कोड का उपयोग JavaScript के एसआईएमडी API में करता है, जिसके परिणामस्वरूप स्केलर कोड की तुलना में समकक्ष स्पीडअप होता है।<ref>{{cite document |title=SIMD in JavaScript via C++ and Emscripten |first1=Peter |last1=Jensen |first2=Ivan |last2=Jibaja |first3=Ningxin |last3=Hu |first4=Dan |last4=Gohman |first5=John |last5=McCutchan |year=2015 |format=PDF |url=https://docs.google.com/viewer?a=v&pid=sites&srcid=ZGVmYXVsdGRvbWFpbnx3cG12cDIwMTV8Z3g6NTkzYWE2OGNlNDAyMTRjOQ}}</ref> यह WebAssembly 128-बिट एसआईएमडी प्रस्ताव का भी समर्थन करता है (और अब पसंद करता है)।<ref>{{cite web |title=Porting SIMD code targeting WebAssembly |url=https://emscripten.org/docs/porting/simd.html |website=Emscripten 1.40.1 documentation}}</ref>
Emscripten, मोज़िला का C/C++-to-JavaScript कंपाइलर, विस्तार के साथ C++ प्रोग्राम के संकलन को सक्षम कर सकता है जो एसआईएमडी इंट्रिनिक्स या GCC-स्टाइल वेक्टर कोड का उपयोग JavaScript के एसआईएमडी API में करता है, जिसके परिणामस्वरूप स्केलर कोड की तुलना में समकक्ष स्पीडअप होता है।<ref>{{cite document |title=SIMD in JavaScript via C++ and Emscripten |first1=Peter |last1=Jensen |first2=Ivan |last2=Jibaja |first3=Ningxin |last3=Hu |first4=Dan |last4=Gohman |first5=John |last5=McCutchan |year=2015 |format=PDF |url=https://docs.google.com/viewer?a=v&pid=sites&srcid=ZGVmYXVsdGRvbWFpbnx3cG12cDIwMTV8Z3g6NTkzYWE2OGNlNDAyMTRjOQ}}</ref> यह WebAssembly 128-बिट एसआईएमडी प्रस्ताव का भी समर्थन करता है (और अब पसंद करता है)।<ref>{{cite web |title=Porting SIMD code targeting WebAssembly |url=https://emscripten.org/docs/porting/simd.html |website=Emscripten 1.40.1 documentation}}</ref>




Line 124: Line 124:
एसआईएमडी के लिए अधिक सर्वव्यापी अनुप्रयोग [[वीडियो गेम]] में पाया जाता है: [[विडियो गेम कंसोल]] (छठी पीढ़ी) के इतिहास के बाद से लगभग हर आधुनिक वीडियो गेम कंसोल ने अपने आर्किटेक्चर में कहीं न कहीं एसआईएमडी प्रोसेसर को सम्मिलित किया है। [[प्लेस्टेशन 2]] असामान्य था क्योंकि इसकी वेक्टर-फ्लोट इकाइयों में से स्वायत्त [[डिजिटल सिग्नल प्रोसेसर]] के रूप में काम कर सकता था, जो अपने स्वयं के निर्देश स्ट्रीम को क्रियान्वित कर सकता था, या सामान्य सीपीयू निर्देशों द्वारा संचालित कोप्रोसेसर के रूप में कार्य कर सकता था। 3D ग्राफ़िक्स एप्लिकेशन एसआईएमडी प्रोसेसिंग के लिए खुद को अच्छी तरह से उधार देते हैं क्योंकि वे 4-आयामी वैक्टर के साथ संचालन पर बहुत अधिक निर्भर करते हैं। [[Microsoft]] का DirectX|Direct3D 9.0 अब एसआईएमडी-सक्षम निर्देशों के उपयोग सहित अपने स्वयं के गणित कार्यों के रनटाइम प्रोसेसर-विशिष्ट कार्यान्वयन को चुनता है।
एसआईएमडी के लिए अधिक सर्वव्यापी अनुप्रयोग [[वीडियो गेम]] में पाया जाता है: [[विडियो गेम कंसोल]] (छठी पीढ़ी) के इतिहास के बाद से लगभग हर आधुनिक वीडियो गेम कंसोल ने अपने आर्किटेक्चर में कहीं न कहीं एसआईएमडी प्रोसेसर को सम्मिलित किया है। [[प्लेस्टेशन 2]] असामान्य था क्योंकि इसकी वेक्टर-फ्लोट इकाइयों में से स्वायत्त [[डिजिटल सिग्नल प्रोसेसर]] के रूप में काम कर सकता था, जो अपने स्वयं के निर्देश स्ट्रीम को क्रियान्वित कर सकता था, या सामान्य सीपीयू निर्देशों द्वारा संचालित कोप्रोसेसर के रूप में कार्य कर सकता था। 3D ग्राफ़िक्स एप्लिकेशन एसआईएमडी प्रोसेसिंग के लिए खुद को अच्छी तरह से उधार देते हैं क्योंकि वे 4-आयामी वैक्टर के साथ संचालन पर बहुत अधिक निर्भर करते हैं। [[Microsoft]] का DirectX|Direct3D 9.0 अब एसआईएमडी-सक्षम निर्देशों के उपयोग सहित अपने स्वयं के गणित कार्यों के रनटाइम प्रोसेसर-विशिष्ट कार्यान्वयन को चुनता है।


वेक्टर प्रोसेसिंग का उपयोग करने वाले हालिया प्रोसेसर में से आईबीएम द्वारा [[तोशीबा]] और [[सोनी]] के सहयोग से विकसित सेल (माइक्रोप्रोसेसर) है। यह कई एसआईएमडी प्रोसेसर ([[गैर-वर्दी मेमोरी एक्सेस]] आर्किटेक्चर, प्रत्येक स्वतंत्र [[कैश मैमोरी]] के साथ और सामान्य प्रयोजन CPU द्वारा नियंत्रित) का उपयोग करता है और 3D और वीडियो प्रोसेसिंग अनुप्रयोगों के लिए आवश्यक विशाल डेटासेट के लिए तैयार है। यह बिना किसी अलग स्केलर रजिस्टरों के ज़मीन से एसआईएमडी होने के कारण पारंपरिक आईएसएएस से भिन्न है।
वेक्टर प्रोसेसिंग का उपयोग करने वाले हालिया प्रोसेसर में से आईबीएम द्वारा [[तोशीबा]] और [[सोनी]] के सहयोग से विकसित सेल (माइक्रोप्रोसेसर) है। यह कई एसआईएमडी प्रोसेसर ([[गैर-वर्दी मेमोरी एक्सेस]] आर्किटेक्चर, प्रत्येक स्वतंत्र [[कैश मैमोरी]] के साथ और सामान्य प्रयोजन CPU द्वारा नियंत्रित) का उपयोग करता है और 3D और वीडियो प्रोसेसिंग अनुप्रयोगों के लिए आवश्यक विशाल डेटासमूह के लिए तैयार है। यह बिना किसी अलग स्केलर रजिस्टरों के ज़मीन से एसआईएमडी होने के कारण पारंपरिक आईएसएएस से भिन्न है।


Ziilabs ने मीडिया प्लेयर और मोबाइल फोन जैसे मोबाइल उपकरणों पर उपयोग के लिए एसआईएमडी प्रकार का प्रोसेसर तैयार किया।<ref>{{cite web |url=https://secure.ziilabs.com/products/processors/zms05.aspx |title=ZiiLABS ZMS-05 ARM 9 Media Processor |website=ZiiLabs |access-date=2010-05-24 |url-status=dead |archive-url=https://web.archive.org/web/20110718153716/https://secure.ziilabs.com/products/processors/zms05.aspx |archive-date=2011-07-18 }}</ref>
Ziilabs ने मीडिया प्लेयर और मोबाइल फोन जैसे मोबाइल उपकरणों पर उपयोग के लिए एसआईएमडी प्रकार का प्रोसेसर तैयार किया।<ref>{{cite web |url=https://secure.ziilabs.com/products/processors/zms05.aspx |title=ZiiLABS ZMS-05 ARM 9 Media Processor |website=ZiiLabs |access-date=2010-05-24 |url-status=dead |archive-url=https://web.archive.org/web/20110718153716/https://secure.ziilabs.com/products/processors/zms05.aspx |archive-date=2011-07-18 }}</ref>
[[ClearSpeed]] ​​Technology, Ltd. और Stream Processors, Inc. से बड़े पैमाने पर वाणिज्यिक एसआईएमडी प्रोसेसर उपलब्ध हैं। ClearSpeed ​​के CSX600 (2004) में दो डबल-परिशुद्धता फ़्लोटिंग पॉइंट इकाइयों के साथ 96 कोर हैं, जबकि CSX700 (2008) में 192 हैं। स्ट्रीम प्रोसेसर का नेतृत्व किसके द्वारा किया जाता है? कंप्यूटर वास्तुकार [[बिल डेली]]। उनके स्टॉर्म-1 प्रोसेसर (2007) में MIPS CPU द्वारा नियंत्रित 80 एसआईएमडी कोर होते हैं।
[[ClearSpeed]] ​​Technology, Ltd. और Stream Processors, Inc. से बड़े पैमाने पर वाणिज्यिक एसआईएमडी प्रोसेसर उपलब्ध हैं। ClearSpeed ​​के CSX600 (2004) में दो डबल-परिशुद्धता फ़्लोटिंग पॉइंट इकाइयों के साथ 96 कोर हैं, जबकि CSX700 (2008) में 192 हैं। स्ट्रीम प्रोसेसर का नेतृत्व किसके द्वारा किया जाता है? कंप्यूटर वास्तुकार [[बिल डेली]]। उनके स्टॉर्म-1 प्रोसेसर (2007) में एमआईपीएस CPU द्वारा नियंत्रित 80 एसआईएमडी कोर होते हैं।


== यह भी देखें ==
== यह भी देखें ==
* स्ट्रीमिंग एसआईएमडी एक्सटेंशन, MMX (निर्देश सेट), SSE2, SSE3, [[उन्नत वेक्टर एक्सटेंशन]], AVX-512
* स्ट्रीमिंग एसआईएमडी विस्तार, एमएमएक्स (निर्देश समूह), SSE2, SSE3, [[उन्नत वेक्टर एक्सटेंशन|उन्नत वेक्टर विस्तार]], एवीएक्स-512
* निर्देश सेट वास्तुकला
* निर्देश समूह वास्तुकला
* फ्लिन की वर्गीकरण
* फ्लिन की वर्गीकरण
* SWAR|एसआईएमडी रजिस्टर के भीतर (SWAR)
* SWAR|एसआईएमडी रजिस्टर के भीतर (SWAR)
Line 145: Line 145:
* [http://www.gamasutra.com/view/feature/3345/wyatts_world_cracking_open_the_.php Cracking Open The Pentium 3 (1999)]
* [http://www.gamasutra.com/view/feature/3345/wyatts_world_cracking_open_the_.php Cracking Open The Pentium 3 (1999)]
* [http://www.eecg.toronto.edu/~corinna/vector/svx/ Short Vector Extensions in Commercial Microprocessor]
* [http://www.eecg.toronto.edu/~corinna/vector/svx/ Short Vector Extensions in Commercial Microprocessor]
* [http://software.intel.com/en-us/articles/optimizing-the-rendering-pipeline-of-animated-models-using-the-intel-streaming-simd-extensions Article about Optimizing the Rendering Pipeline of Animated Models Using the Intel Streaming एसआईएमडी Extensions]
* [http://software.intel.com/en-us/articles/optimizing-the-rendering-pipeline-of-animated-models-using-the-intel-streaming-simd-extensions Article about Optimizing the Rendering Pipeline of Animated Models Using the इंटेल Streaming एसआईएमडी Extensions]
* [https://web.archive.org/web/20130921070044/http://www.yeppp.info/ "Yeppp!": cross-platform, open-source एसआईएमडी library from Georgia Tech]
* [https://web.archive.org/web/20130921070044/http://www.yeppp.info/ "Yeppp!": cross-platform, open-source एसआईएमडी library from Georgia Tech]
* [https://computing.llnl.gov/tutorials/parallel_comp/ Introduction to Parallel Computing from LLNL Lawrence Livermore National Laboratory] {{Webarchive|url=https://web.archive.org/web/20130610122229/https://computing.llnl.gov/tutorials/parallel_comp/ |date=2013-06-10 }}
* [https://computing.llnl.gov/tutorials/parallel_comp/ Introduction to Parallel Computing from LLNL Lawrence Livermore National Laboratory] {{Webarchive|url=https://web.archive.org/web/20130610122229/https://computing.llnl.gov/tutorials/parallel_comp/ |date=2013-06-10 }}

Revision as of 14:31, 3 March 2023

एकल निर्देश, एकाधिक डेटा

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

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

इतिहास

एसआईएमडी निर्देशों का पहला उपयोग इलियाक चतुर्थ में किया गया था, जो 1966 में पूरा हुआ था।

एसआईएमडी 1970 के दशक की प्रारंभ में सीडीसी स्टार-100 और टीआई उन्नत वैज्ञानिक कंप्यूटर जैसे वेक्टर प्रोसेसर का आधार था, जो एकल निर्देश के साथ डेटा के वेक्टर पर काम कर सकता था। 1970 और 1980 के दशक में क्रे द्वारा वेक्टर प्रसंस्करण को विशेष रूप से लोकप्रिय बनाया गया था। वेक्टर प्रोसेसिंग आर्किटेक्चर को अब एसआईएमडी कंप्यूटरों से अलग माना जाता है: डंकन की वर्गीकरण में उन्हें सम्मिलित किया जाता है, जहां फ्लिन के काम (1966, 1972) के कारण क्रे -1 (1977) से पहले की डेटिंग होती है।

आधुनिक एसआईएमडी कंप्यूटरों के पहले युग की विशेषता सोच मशीनों निगम कनेक्शन मशीन | सीएम-1 और सीएम-2 जैसे बड़े पैमाने पर समानांतर प्रसंस्करण-शैली के सुपर कंप्यूटर थे। इन कंप्यूटरों में कई सीमित-कार्यक्षमता वाले प्रोसेसर थे जो समानांतर में काम करते थे। उदाहरण के लिए, थिंकिंग मशीन CM-2 में 65,536 एकल-बिट प्रोसेसर में से प्रत्येक ही समय में ही निर्देश को निष्पादित करेगा, उदाहरण के लिए, हाइपरक्यूब-कनेक्टेड नेटवर्क का उपयोग करके समय में 65,536 जोड़े बिट्स को तार्किक रूप से संयोजित या प्रोसेसर-समर्पित रैम अपने ऑपरेंड खोजने के लिए अनुमति देता है। इंटेल i860 जैसे कमोडिटी प्रोसेसर पर आधारित सस्ती स्केलर विविध निर्देश, एकाधिक डेटा एप्रोच होने पर सुपरकंप्यूटिंग एसआईएमडी एप्रोच से दूर चली गई[2] अधिक शक्तिशाली हो गया, और एसआईएमडी में महत्त्व कम हो गयी थी।

एसआईएमडी प्रोसेसर का वर्तमान युग सुपरकंप्यूटर बाजार के बजाय डेस्कटॉप-कंप्यूटर बाजार से बढ़ा है। चूंकि डेस्कटॉप प्रोसेसर 1990 के दशक के दौरान रीयल-टाइम गेमिंग और ऑडियो/वीडियो प्रसंस्करण का समर्थन करने के लिए पर्याप्त शक्तिशाली हो गए थे, इस विशेष प्रकार की कंप्यूटिंग शक्ति के लिए मांग बढ़ी और मांग को पूरा करने के लिए माइक्रोप्रोसेसर विक्रेताओं ने एसआईएमडी की ओर रुख किया।[3] हेवलेट पैकर्ड ने एमपीईजी डिकोडिंग में तेजी लाने के लिए 1994 में पीए-आरआईएससी 1.1 डेस्कटॉप में मल्टीमीडिया त्वरण विस्तार निर्देश प्रस्तुत किया था।[4] सन माइक्रोसिस्टम्स ने 1995 में अपने अल्ट्रास्पार्क माइक्रोप्रोसेसर में अपने विज़ुअल निर्देश एमएमएक्स (निर्देश समूह) विस्तार में एसआईएमडी पूर्णांक निर्देश प्रस्तुत किए। एमआईपीएस ने अपने समान एमडीएमएक्स प्रणाली के अनुरूप किया था।

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

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

लाभ

एप्लिकेशन जो एसआईएमडी का लाभ उठा सकता है वह वह है जहां ही मान को बड़ी संख्या में डेटा बिंदुओं में जोड़ा जा रहा है (या घटाया जा रहा है), कई मल्टीमीडिया अनुप्रयोगों में सामान्य ऑपरेशन। उदाहरण छवि की चमक को बदलना होगा। छवि के प्रत्येक पिक्सेल में रंग के लाल (आर), हरे (जी) और नीले (बी) भागों की चमक के लिए तीन मान होते हैं। चमक को बदलने के लिए, R, G और B मानों को मेमोरी से पढ़ा जाता है, उनमें मान जोड़ा जाता है (या घटाया जाता है), और परिणामी मान वापस मेमोरी में लिखे जाते हैं। ऑडियो अंकीय संकेत प्रक्रिया इसी तरह, वॉल्यूम कंट्रोल के लिए, लेफ्ट और राइट दोनों चैनलों को साथ गुणा करेगा।

एसआईएमडी प्रोसेसर के साथ इस प्रक्रिया में दो सुधार होते हैं। के लिए डेटा को ब्लॉक में समझा जाता है, और कई मानों को साथ लोड किया जा सकता है। निर्देशों की श्रृंखला के बजाय इस पिक्सेल को पुनः प्राप्त करें, अब अगले पिक्सेल को पुनः प्राप्त करें, एसआईएमडी प्रोसेसर के पास ही निर्देश होगा जो प्रभावी रूप से कहता है कि n पिक्सेल प्राप्त करें (जहाँ n संख्या है जो डिज़ाइन से डिज़ाइन में भिन्न होती है)। विभिन्न कारणों से, प्रत्येक पिक्सेल को व्यक्तिगत रूप से पुनर्प्राप्त करने की तुलना में इसमें बहुत कम समय लग सकता है, जैसा कि पारंपरिक सीपीयू डिज़ाइन के साथ होता है।

और फायदा यह है कि निर्देश ही ऑपरेशन में सभी लोड किए गए डेटा पर काम करता है। दूसरे शब्दों में, यदि एसआईएमडी प्रणाली बार में आठ डेटा बिंदुओं को लोड करके काम करता है, तो add डेटा पर प्रायुक्त किया जा रहा ऑपरेशन ही समय में सभी आठ मानों पर होगा। यह समानता सुपरस्केलर प्रोसेसर द्वारा प्रदान की गई समानता से अलग है; आठ मानों को गैर-सुपरस्क्लेर प्रोसेसर पर भी समानांतर में संसाधित किया जाता है, और सुपरस्केलर प्रोसेसर समानांतर में कई एसआईएमडी संचालन करने में सक्षम हो सकता है।

नुकसान

  • सभी एल्गोरिदम को आसानी से सदिश नहीं बनाया जा सकता है। उदाहरण के लिए, फ्लो-कंट्रोल-हैवी टास्क जैसे कोड पदच्छेद आसानी से एसआईएमडी से लाभान्वित नहीं हो सकते हैं; हालांकि, अधिकतम कैश इष्टतमता को लक्षित करने के लिए तुलना और बैच प्रवाह को सदिश बनाना सैद्धांतिक रूप से संभव है, हालांकि इस तकनीक के लिए अधिक मध्यवर्ती स्थिति की आवश्यकता होगी। नोट: बैच-पाइपलाइन प्रणाली (उदाहरण: जीपीयू या सॉफ़्टवेयर रास्टराइज़ेशन पाइपलाइन) कैश नियंत्रण के लिए सबसे फायदेमंद होते हैं जब सिमड इंट्रिनिक्स के साथ कार्यान्वित किया जाता है, लेकिन वे सिमड सुविधाओं के लिए अनन्य नहीं हैं। कोड स्ट्रिंग्स जैसी श्रृंखला के भीतर निर्भरता से बचने के लिए और जटिलता स्पष्ट हो सकती है; जबकि वैश्वीकरण के लिए स्वतंत्रता आवश्यक है।[clarification needed]
  • बड़ी रजिस्टर फाइलें जो बिजली की खपत और आवश्यक चिप क्षेत्र को बढ़ाती हैं।
  • वर्तमान में, एसआईएमडी निर्देशों के साथ एल्गोरिथ्म को प्रायुक्त करने के लिए आमतौर पर मानव श्रम की आवश्यकता होती है; उदाहरण के लिए, अधिकांश कंपाइलर विशिष्ट C (प्रोग्रामिंग लैंग्वेज) प्रोग्राम से एसआईएमडी निर्देश उत्पन्न नहीं करते हैं। कंपाइलर्स में स्वचालित वैश्वीकरण कंप्यूटर विज्ञान अनुसंधान का सक्रिय क्षेत्र है। (वेक्टर प्रोसेसर की तुलना करें।)
  • विशेष एसआईएमडी निर्देश समूह के साथ प्रोग्रामिंग में कई निम्न-स्तरीय चुनौतियाँ सम्मिलित हो सकती हैं।
    1. एसआईएमडी में डेटा संरचना संरेखण पर प्रतिबंध हो सकता है; विशेष आर्किटेक्चर से परिचित प्रोग्रामर इसकी उम्मीद नहीं कर सकते हैं। इससे भी बदतर: संरेखण संशोधन या संगत प्रोसेसर से दूसरे में बदल सकता है।
    2. एसआईएमडी रजिस्टरों में डेटा इकट्ठा करना और इसे सही गंतव्य स्थानों पर बिखेरना मुश्किल है (कभी-कभी परमिट निर्देश की आवश्यकता होती है) और यह अक्षम हो सकता है।
    3. कुछ एसआईएमडी निर्देश समूहों में रोटेशन या तीन-ऑपरेंड जोड़ जैसे विशिष्ट निर्देश उपलब्ध नहीं हैं।
    4. निर्देश समूह आर्किटेक्चर-विशिष्ट हैं: कुछ प्रोसेसर में एसआईएमडी निर्देशों की पूरी तरह से कमी होती है, इसलिए प्रोग्रामर को उनके लिए गैर-वेक्टरकृत कार्यान्वयन (या अलग-अलग वेक्टरकृत कार्यान्वयन) प्रदान करना चाहिए।
    5. अलग-अलग आर्किटेक्चर अलग-अलग रजिस्टर आकार (जैसे 64, 128, 256 और 512 बिट्स) और निर्देश समूह प्रदान करते हैं, जिसका अर्थ है कि प्रोग्रामर को किसी दिए गए सीपीयू पर बेहतर ढंग से काम करने के लिए वेक्टरकृत कोड के कई कार्यान्वयन प्रदान करने चाहिए। इसके अलावा, एसआईएमडी निर्देशों का संभावित समूह प्रत्येक नए रजिस्टर आकार के साथ बढ़ता है। दुर्भाग्य से, लीगेसी समर्थन कारणों से, पुराने संस्करणों को समाप्त नहीं किया जा सकता है।
    6. प्रारंभिक एमएमएक्स (निर्देश समूह) निर्देश समूह ने फ़्लोटिंग-पॉइंट स्टैक के साथ रजिस्टर फ़ाइल साझा की, जिसके कारण फ़्लोटिंग-पॉइंट और एमएमएक्स कोड को मिलाते समय अक्षमताएँ हुईं। हालाँकि, SSE2 इसे सही करता है।

समस्याओं 1 और 5 को दूर करने के लिए, RISC-वीी का वेक्टर विस्तार वैकल्पिक दृष्टिकोण का उपयोग करता है: प्रोग्रामर को उप-रजिस्टर-स्तर के विवरण को उजागर करने के बजाय, निर्देश समूह उन्हें कुछ वेक्टर रजिस्टरों के रूप में सार करता है जो सभी सीपीयू में समान इंटरफेस का उपयोग करते हैं। इस निर्देश समूह के साथ। हार्डवेयर सभी संरेखण मुद्दों और लूप के स्ट्रिप-माइनिंग को संभालता है। विभिन्न वेक्टर आकार वाली मशीनें समान कोड चलाने में सक्षम होंगी। एलएलवीएम इस वेक्टर प्रकार को कॉल करता हैvscale.[citation needed] समतुल्य स्केलर या समतुल्य वेक्टर कोड की तुलना में कोड आकार में परिमाण वृद्धि का क्रम असामान्य नहीं है, और परिमाण या अधिक प्रभावशीलता का क्रम (अनुदेश के अनुसार किया गया कार्य) वेक्टर आईएसएएस के साथ प्राप्त करने योग्य है।[5] एआरएम का स्केलेबल वेक्टर विस्तार और तरीका अपनाता है, जिसे फ्लिन के वर्गीकरण में जाना जाता है # एकल निर्देश स्ट्रीम, एकाधिक डेटा स्ट्रीम (एसआईएमडी) | फ्लिन की वर्गीकरण असोसिएटिव प्रोसेसिंग के रूप में, जिसे आज आमतौर पर प्रिडिक्शन (कंप्यूटर आर्किटेक्चर) के रूप में जाना जाता है #एसआईएमडी, एसआईएमटी और वेक्टर प्रिडिक्शन| समर्पित (नकाबपोश) एसआईएमडी। यह दृष्टिकोण वेक्टर प्रसंस्करण के रूप में कॉम्पैक्ट नहीं है, लेकिन अभी भी गैर-निर्धारित एसआईएमडी से कहीं बेहतर है। विस्तृत तुलनात्मक उदाहरण वेक्टर प्रोसेसर#वेक्टर निर्देश उदाहरण पृष्ठ में दिए गए हैं।

कालक्रम

Examples of एसआईएमडी supercomputers (not including vector processors)
Year Example
1974 इलियाक चतुर्थ
1974 ICL Distributed Array Processor (DAP)
1976 Burroughs Scientific Processor
1981 Geometric-Arithmetic Parallel Processor from Martin Marietta (continued at Lockheed Martin, then at Teranex and Silicon Optix)
1983-1991 Massively Parallel Processor (MPP), from NASA/Goddard Space Flight Center
1985 Connection Machine, models 1 and 2 (CM-1 and CM-2), from Thinking Machines Corporation
1987-1996 MasPar MP-1 and MP-2
1991 Zephyr DC from Wavetracer
2001 Xplor from Pyxsys, Inc.


हार्डवेयर

स्मॉल-स्केल (64 या 128 बिट्स) एसआईएमडी 1990 के दशक की प्रारंभ में सामान्य-उद्देश्य वाले CPU पर लोकप्रिय हो गया और 1997 तक और बाद में DEC अल्फा के लिए मोशन वीडियो निर्देश (MVI) के साथ जारी रहा। अधिकांश CPU पर एसआईएमडी निर्देश डिग्री या किसी अन्य पर पाए जा सकते हैं, जिनमें आईबीएम का अल्टीवेक और पावरपीसी के लिए सिग्नल प्रोसेसिंग इंजन, हेवलेट पैकर्ड का पीए-आरआईएससी मल्टीमीडिया एक्सेलेरेशन एक्सटेन्शन (MAX), इंटेल Corporation का एमएमएक्स (निर्देश समूह), स्ट्रीमिंग एसआईएमडी विस्तार सम्मिलित हैं। , SSE2, SSE3 SSSE3 और SSE4|SSE4.x, उन्नत लघु उपकरणेज़ का 3DNow!, ARC (प्रोसेसर) का ARC वीडियो उपप्रणाली, SPARC का विज़ुअल निर्देश समूह और VIS2, सन माइक्रोसिस्टम्स का MAJC, एआरएम होल्डिंग्स का ARM आर्किटेक्चर#एडवांस एसआईएमडी (नियॉन) तकनीक , एमआईपीएस आर्किटेक्चर 'एमडीएमएक्स (MaDMaX) और एमआईपीएस-3D। आईबीएम, Sony, Toshiba सह-विकसित सेल (माइक्रोप्रोसेसर) की सिनर्जिस्टिक प्रोसेसिंग यूनिट का निर्देश समूह भारी एसआईएमडी आधारित है। PHILIPS, जो अब NXP सेमीकंडक्टर है, ने Xetal नाम के कई एसआईएमडी प्रोसेसर विकसित किए। Xetal में 320 16-बिट प्रोसेसर तत्व हैं जो विशेष रूप से दृष्टि कार्यों के लिए डिज़ाइन किए गए हैं।

आधुनिक ग्राफ़िक्स प्रोसेसिंग युनिट (जीपीयू) अक्सर विस्तृत एसआईएमडी कार्यान्वयन होते हैं, जो समय में 128 या 256 बिट्स पर शाखाओं, लोड और स्टोर करने में सक्षम होते हैं।

इंटेल का एवीएक्स-512 एसआईएमडी निर्देश बार में 512 बिट डेटा प्रोसेस करता है।

सॉफ्टवेयर

चार 8-बिट संख्याओं का साधारण ट्रिपलिंग। CPU 8-बिट संख्या को R1 में लोड करता है, इसे R2 से गुणा करता है, और फिर उत्तर को R3 से वापस RAM में सहेजता है। यह प्रक्रिया प्रत्येक संख्या के लिए दोहराई जाती है।
चार 8-बिट संख्याओं का एसआईएमडी ट्रिपलिंग। सीपीयू बार में 4 नंबरों को लोड करता है, उन सभी को सिमड-गुणा में गुणा करता है, और उन सभी को बार वापस रैम में सहेजता है। सिद्धांत रूप में, गति को 4 से गुणा किया जा सकता है।

एसआईएमडी निर्देशों का विस्तृत रूप से 3D ग्राफ़िक्स को संसाधित करने के लिए उपयोग किया जाता है, हालाँकि एम्बेडेड एसआईएमडी वाले आधुनिक वीडियो कार्डों ने इस कार्य को CPU से बड़े पैमाने पर ले लिया है। कुछ प्रणालियों में परमिट फ़ंक्शंस भी सम्मिलित होते हैं जो वैक्टर के अंदर तत्वों को फिर से पैक करते हैं, जिससे वे डेटा प्रोसेसिंग और संपीड़न के लिए विशेष रूप से उपयोगी होते हैं। इनका उपयोग क्रिप्टोग्राफी में भी किया जाता है।[6][7][8] जीपीयू (जीपीजीपीयू) पर सामान्य प्रयोजन कंप्यूटिंग की प्रवृत्ति से भविष्य में सिमड का विस्तृत उपयोग हो सकता है।

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

X86 पर एसआईएमडी की प्रारंभ धीमी रही थी। 3DNow की शुरूआत! इंटेल Corporation द्वारा उन्नत माइक्रो डिवाइसेस और स्ट्रीमिंग एसआईएमडी विस्तार कुछ हद तक भ्रमित करते हैं, लेकिन आज लगता है कि प्रणाली व्यवस्थित हो गया है (एएमडी द्वारा SSE को अपनाने के बाद) और नए कंपाइलरों को अधिक एसआईएमडी- सक्षम सॉफ़्टवेयर में परिणाम देना चाहिए। इंटेल और एएमडी अब दोनों अनुकूलित गणित पुस्तकालय प्रदान करते हैं जो एसआईएमडी निर्देशों का उपयोग करते हैं, और libएसआईएमडी, एसआईएमडीx86 और SLEEF जैसे ओपन सोर्स विकल्प दिखाई देने लगे हैं (lआईबीएम भी देखें)।[9] Apple Inc. को कुछ अधिक सफलता मिली, भले ही उन्होंने बाकी की तुलना में बाद में एसआईएमडी बाजार में प्रवेश किया। अल्टीवेक ने समृद्ध प्रणाली की प्रस्तुतकश की और मोटोरोला, आईबीएम और जीएनयू से तेजी से परिष्कृत कंपाइलरों का उपयोग करके प्रोग्राम किया जा सकता है, इसलिए असेंबली भाषा प्रोग्रामिंग की शायद ही कभी आवश्यकता होती है। इसके अतिरिक्त, एसआईएमडी से लाभान्वित होने वाली कई प्रणालियों की आपूर्ति स्वयं Apple द्वारा की गई थी, उदाहरण के लिए iTunes और QuickTime। हालाँकि, 2006 में, Apple कंप्यूटर इंटेल x86 प्रोसेसर में चले गए। Apple के अप्लिकेशन प्रोग्रामिंग अंतरफलक और एकीकृत विकास पर्यावरण (Xcode) को SSE2 और SSE3 के साथ-साथ अल्टीवेक को सपोर्ट करने के लिए संशोधित किया गया था। Apple आईबीएम और फ्रीस्केल सेमीकंडक्टर से पावरपीसी चिप्स का प्रमुख खरीदार था और भले ही उन्होंने प्लेटफॉर्म को छोड़ दिया, अल्टिवेक का आगे विकास फ्रीस्केल और आईबीएम से कई पावरपीसी और पावर आईएसए डिजाइनों में जारी है।

रजिस्टर के भीतर एसआईएमडी, या SWAR, हार्डवेयर पर सामान्य-उद्देश्य वाले रजिस्टरों में एसआईएमडी के प्रदर्शन के लिए उपयोग की जाने वाली तकनीकों और युक्तियों की श्रृंखला है जो एसआईएमडी निर्देशों के लिए कोई प्रत्यक्ष समर्थन प्रदान नहीं करता है। इसका उपयोग हार्डवेयर पर भी कुछ एल्गोरिदम में समानता का फायदा उठाने के लिए किया जा सकता है जो सीधे सिमड का समर्थन नहीं करता है।

प्रोग्रामर इंटरफ़ेस

एसआईएमडी निर्देश समूह के प्रकाशकों के लिए यह सामान्य है कि वे सदिश कोड की पीढ़ी की गारंटी देने वाले आंतरिक कार्यों या विशेष डेटाटाइप्स (ऑपरेटर ओवरलोडिंग के साथ) के साथ अपने स्वयं के C/C++ भाषा विस्तार बनाते हैं। इंटेल, अल्टीवेक, और ARM NEON अपने CPU को लक्षित करने वाले कंपाइलरों द्वारा विस्तृत रूप से अपनाए गए विस्तार प्रदान करते हैं। (अधिक जटिल संचालन वेक्टर गणित पुस्तकालयों का कार्य है।)

GNU C कंपाइलर विस्तार को सार्वभौमिक इंटरफ़ेस में सारणित करके कदम आगे ले जाता है जिसे एसआईएमडी डेटाटाइप्स को परिभाषित करने का तरीका प्रदान करके किसी भी प्लेटफ़ॉर्म पर उपयोग किया जा सकता है।[10] एलएलवीएम क्लैंग कंपाइलर आईआर में परिभाषित समान इंटरफ़ेस के साथ, सुविधा को प्रायुक्त करता है।[11] रस्ट का पैक्ड_सिम क्रेट इस इंटरफ़ेस का उपयोग करता है, और इसी तरह स्विफ्ट (प्रोग्रामिंग भाषा) 2.0+ करता है।

सी ++ में प्रयोगात्मक इंटरफ़ेस है std::experimental::simd जो GCC विस्तार के समान कार्य करता है। एलएलवीएम का libcxx इसे प्रायुक्त करता प्रतीत होता है। GCC और libstdc++ के लिए, रैपर लाइब्रेरी जो GCC विस्तार के शीर्ष पर बनती है, उपलब्ध है।[12] Microsoft Corporation ने RyuJIT में एसआईएमडी को .NET Core|.NET में जोड़ा।[13] System.Numerics.Vector }} पैकेज, NuGet पर उपलब्ध है, एसआईएमडी डेटाटाइप प्रायुक्त करें।[14] जावा में एसआईएमडी निर्देशों के लिए नया प्रस्तावित API भी है [15] इनक्यूबेटर मॉड्यूल में OpenJDK 17 में उपलब्ध है। इसमें असमर्थित सीपीयू पर साधारण लूप के लिए सुरक्षित फॉलबैक तंत्र भी है।

एसआईएमडी डेटाटाइप प्रदान करने के बजाय, कंपाइलर्स को कुछ लूपों को ऑटो-वेक्टराइज़ करने के लिए भी संकेत दिया जा सकता है, संभवतः डेटा निर्भरता की कमी के बारे में कुछ अभिकथन ले रहा है। यह सीधे एसआईएमडी वेरिएबल्स में हेरफेर करने जितना लचीला नहीं है, लेकिन इसका उपयोग करना आसान है। ओपनएमपी 4.0+ में #pragma omp simd संकेत देना।[16] इस OpenMP इंटरफ़ेस ने Cilk's सहित गैर-मानक विस्तार के विस्तृत समूह को बदल दिया है #pragma simd.,[17] जीसीसी के #pragma GCC ivdep, और भी कई।[18]


एसआईएमडी बहु-संस्करण

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

  • फंक्शन मल्टी-वर्जनिंग (FMV): प्रोग्राम या लाइब्रेरी में सबरूटीन को कई निर्देश समूह विस्तार के लिए डुप्लिकेट और संकलित किया जाता है, और प्रोग्राम यह तय करता है कि रन-टाइम में किसका उपयोग किया जाए।
  • लाइब्रेरी मल्टी-वर्जनिंग (LMV): संपूर्ण पुस्तकालय (कम्प्यूटिंग) को कई निर्देश समूह विस्तार के लिए डुप्लिकेट किया गया है, और ऑपरेटिंग प्रणाली या प्रोग्राम यह तय करता है कि रन-टाइम पर किसे लोड करना है।

FMV, असेंबली लैंग्वेज में मैन्युअल रूप से कोडित, आमतौर पर कई प्रदर्शन-महत्वपूर्ण पुस्तकालयों जैसे glibc और libjpeg-turbo में उपयोग किया जाता है। इंटेल सी ++ कंपाइलर, जीसीसी 6 के बाद से जीएनयू कंपाइलर संग्रह, और क्लैंग 7 के बाद से क्लैंग सरलीकृत दृष्टिकोण की अनुमति देता है, जिसमें कंपाइलर फ़ंक्शन डुप्लिकेशन और चयन का ख्याल रखता है। जीसीसी और बजना स्पष्ट की आवश्यकता है target_clones कार्यों को क्लोन करने के लिए कोड में लेबल,[19] जबकि ICC स्वचालित रूप से ऐसा करता है (कमांड-लाइन विकल्प के तहत /Qax). जंग प्रोग्रामिंग भाषा FMV को भी सपोर्ट करती है। समूहअप जीसीसी और क्लैंग के समान है जिसमें कोड परिभाषित करता है कि किस निर्देश को संकलित करना है, लेकिन क्लोनिंग मैन्युअल रूप से इनलाइनिंग के माध्यम से की जाती है।[20] एफएमवी का उपयोग करने के लिए जीसीसी और क्लैंग पर कोड संशोधन की आवश्यकता होती है, विक्रेता आमतौर पर लाइब्रेरी मल्टी-वर्जनिंग का उपयोग करते हैं: इसे हासिल करना आसान है क्योंकि केवल कंपाइलर स्विच को बदलने की जरूरत है। Glibc LMV का समर्थन करता है और यह कार्यक्षमता इंटेल-समर्थित Clear Linux प्रोजेक्ट द्वारा अपनाई जाती है।[21]


वेब पर एसआईएमडी

2013 में जॉन मैककॉचन ने घोषणा की कि उन्होंने डार्ट (प्रोग्रामिंग भाषा) प्रोग्रामिंग भाषा के लिए एसआईएमडी निर्देश समूह के लिए उच्च-प्रदर्शन इंटरफ़ेस बनाया है, जिससे पहली बार एसआईएमडी के लाभ वेब प्रोग्राम में आए। इंटरफ़ेस में दो प्रकार होते हैं:[22]

  • फ्लोट32x4, 4 एकल सटीक फ्लोटिंग पॉइंट मान।
  • Int32x4, 4 32-बिट पूर्णांक मान।

इन प्रकारों के उदाहरण अपरिवर्तनीय हैं और अनुकूलित कोड में सीधे एसआईएमडी रजिस्टरों में मैप किए जाते हैं। डार्ट में व्यक्त संचालन आमतौर पर बिना किसी ओवरहेड के एकल निर्देश में संकलित किए जाते हैं। यह C और C++ इंट्रिनिक्स के समान है। डार्ट में लिखे स्केलर कोड की तुलना में 4×4 मैट्रिक्स | 4×4 मैट्रिक्स गुणन, 3डी वर्टेक्स परिवर्तन और मैंडेलब्रॉट समूह विज़ुअलाइज़ेशन के लिए बेंचमार्क 400% स्पीडअप के करीब दिखाते हैं।

डार्ट पर मैककॉचन का काम, जिसे अब एसआईएमडी.js कहा जाता है, को ECMAScript द्वारा अपनाया गया है और इंटेल ने IDF 2013 में घोषणा की कि वे V8 (जावास्क्रिप्ट इंजन) और स्पाइडरमोन्की (जावास्क्रिप्ट इंजन) दोनों के लिए मैककुचन के विनिर्देश को प्रायुक्त कर रहे हैं।[23] हालाँकि, 2017 तक, एसआईएमडी.js को WebAssembly में समान इंटरफ़ेस को आगे बढ़ाने के पक्ष में ECMAScript मानक कतार से बाहर कर दिया गया है।[24] अगस्त 2020 तक, WebAssembly इंटरफ़ेस अधूरा बना हुआ है, लेकिन इसके पोर्टेबल 128-बिट एसआईएमडी फीचर का पहले ही कई इंजनों में कुछ उपयोग देखा जा चुका है।

Emscripten, मोज़िला का C/C++-to-JavaScript कंपाइलर, विस्तार के साथ C++ प्रोग्राम के संकलन को सक्षम कर सकता है जो एसआईएमडी इंट्रिनिक्स या GCC-स्टाइल वेक्टर कोड का उपयोग JavaScript के एसआईएमडी API में करता है, जिसके परिणामस्वरूप स्केलर कोड की तुलना में समकक्ष स्पीडअप होता है।[25] यह WebAssembly 128-बिट एसआईएमडी प्रस्ताव का भी समर्थन करता है (और अब पसंद करता है)।[26]


वाणिज्यिक अनुप्रयोग

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

एसआईएमडी के लिए अधिक सर्वव्यापी अनुप्रयोग वीडियो गेम में पाया जाता है: विडियो गेम कंसोल (छठी पीढ़ी) के इतिहास के बाद से लगभग हर आधुनिक वीडियो गेम कंसोल ने अपने आर्किटेक्चर में कहीं न कहीं एसआईएमडी प्रोसेसर को सम्मिलित किया है। प्लेस्टेशन 2 असामान्य था क्योंकि इसकी वेक्टर-फ्लोट इकाइयों में से स्वायत्त डिजिटल सिग्नल प्रोसेसर के रूप में काम कर सकता था, जो अपने स्वयं के निर्देश स्ट्रीम को क्रियान्वित कर सकता था, या सामान्य सीपीयू निर्देशों द्वारा संचालित कोप्रोसेसर के रूप में कार्य कर सकता था। 3D ग्राफ़िक्स एप्लिकेशन एसआईएमडी प्रोसेसिंग के लिए खुद को अच्छी तरह से उधार देते हैं क्योंकि वे 4-आयामी वैक्टर के साथ संचालन पर बहुत अधिक निर्भर करते हैं। Microsoft का DirectX|Direct3D 9.0 अब एसआईएमडी-सक्षम निर्देशों के उपयोग सहित अपने स्वयं के गणित कार्यों के रनटाइम प्रोसेसर-विशिष्ट कार्यान्वयन को चुनता है।

वेक्टर प्रोसेसिंग का उपयोग करने वाले हालिया प्रोसेसर में से आईबीएम द्वारा तोशीबा और सोनी के सहयोग से विकसित सेल (माइक्रोप्रोसेसर) है। यह कई एसआईएमडी प्रोसेसर (गैर-वर्दी मेमोरी एक्सेस आर्किटेक्चर, प्रत्येक स्वतंत्र कैश मैमोरी के साथ और सामान्य प्रयोजन CPU द्वारा नियंत्रित) का उपयोग करता है और 3D और वीडियो प्रोसेसिंग अनुप्रयोगों के लिए आवश्यक विशाल डेटासमूह के लिए तैयार है। यह बिना किसी अलग स्केलर रजिस्टरों के ज़मीन से एसआईएमडी होने के कारण पारंपरिक आईएसएएस से भिन्न है।

Ziilabs ने मीडिया प्लेयर और मोबाइल फोन जैसे मोबाइल उपकरणों पर उपयोग के लिए एसआईएमडी प्रकार का प्रोसेसर तैयार किया।[27] ClearSpeed ​​Technology, Ltd. और Stream Processors, Inc. से बड़े पैमाने पर वाणिज्यिक एसआईएमडी प्रोसेसर उपलब्ध हैं। ClearSpeed ​​के CSX600 (2004) में दो डबल-परिशुद्धता फ़्लोटिंग पॉइंट इकाइयों के साथ 96 कोर हैं, जबकि CSX700 (2008) में 192 हैं। स्ट्रीम प्रोसेसर का नेतृत्व किसके द्वारा किया जाता है? कंप्यूटर वास्तुकार बिल डेली। उनके स्टॉर्म-1 प्रोसेसर (2007) में एमआईपीएस CPU द्वारा नियंत्रित 80 एसआईएमडी कोर होते हैं।

यह भी देखें

  • स्ट्रीमिंग एसआईएमडी विस्तार, एमएमएक्स (निर्देश समूह), SSE2, SSE3, उन्नत वेक्टर विस्तार, एवीएक्स-512
  • निर्देश समूह वास्तुकला
  • फ्लिन की वर्गीकरण
  • SWAR|एसआईएमडी रजिस्टर के भीतर (SWAR)
  • एसपीएमडी | एकल प्रोग्राम, एकाधिक डेटा (एसपीएमडी)
  • ओपनसीएल

संदर्भ

  1. Flynn, Michael J. (September 1972). "Some Computer Organizations and Their Effectiveness" (PDF). IEEE Transactions on Computers. C-21 (9): 948–960. doi:10.1109/TC.1972.5009071.
  2. "MIMD1 - XP/S, CM-5" (PDF).
  3. Conte, G.; Tommesani, S.; Zanichelli, F. (2000). "The long and winding road to high-performance image processing with MMX/SSE". Proc. Fifth IEEE Int'l Workshop on Computer Architectures for Machine Perception. doi:10.1109/CAMP.2000.875989. hdl:11381/2297671. S2CID 13180531.
  4. Lee, R.B. (1995). "Realtime MPEG video via software decompression on a PA-RISC processor". digest of papers Compcon '95. Technologies for the Information Superhighway. pp. 186–192. doi:10.1109/CMPCON.1995.512384. ISBN 0-8186-7029-0. S2CID 2262046.
  5. Patterson, David; Waterman, Andrew (18 September 2017). "SIMD Instructions Considered Harmful". SIGARCH.
  6. RE: SSE2 speed, showing how SSE2 is used to implement SHA hash algorithms
  7. Salsa20 speed; Salsa20 software, showing a stream cipher implemented using SSE2
  8. Subject: up to 1.4x RSA throughput using SSE2, showing RSA implemented using a non-SIMD SSE2 integer multiply instruction.
  9. "SIMD library math functions". Stack Overflow. Retrieved 16 January 2020.
  10. "Vector Extensions". Using the GNU Compiler Collection (GCC). Retrieved 16 January 2020.
  11. "Clang Language Extensions". Clang 11 documentation. Retrieved 16 January 2020.
  12. "VcDevel/std-simd". VcDevel. 6 August 2020.
  13. "RyuJIT: The next-generation JIT compiler for .NET".
  14. "The JIT finally proposed. JIT and SIMD are getting married".
  15. "JEP 338: Vector API".
  16. "SIMD Directives". www.openmp.org.
  17. "Tutorial pragma simd". CilkPlus. 18 July 2012.
  18. Kruse, Michael. "OMP5.1: Loop Transformations" (PDF).
  19. "Function multi-versioning in GCC 6". lwn.net.
  20. "2045-target-feature". The Rust RFC Book.
  21. "Transparent use of library packages optimized for Intel® architecture". Clear Linux* Project (in English). Retrieved 8 September 2019.
  22. John McCutchan. "Bringing SIMD to the web via Dart" (PDF). Archived from the original (PDF) on 2013-12-03.
  23. "SIMD in JavaScript". 01.org. 8 May 2014.
  24. "tc39/ecmascript_simd: SIMD numeric type for EcmaScript". GitHub. Ecma TC39. 22 August 2019. Retrieved 8 September 2019.
  25. Jensen, Peter; Jibaja, Ivan; Hu, Ningxin; Gohman, Dan; McCutchan, John (2015). "SIMD in JavaScript via C++ and Emscripten" (PDF). {{cite journal}}: Cite journal requires |journal= (help)
  26. "Porting SIMD code targeting WebAssembly". Emscripten 1.40.1 documentation.
  27. "ZiiLABS ZMS-05 ARM 9 Media Processor". ZiiLabs. Archived from the original on 2011-07-18. Retrieved 2010-05-24.


बाहरी संबंध