ग्राफ़िक्स प्रसंस्करण इकाइयों पर सामान्य प्रयोजन कंप्यूटिंग

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

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

इतिहास
सिद्धांत रूप में, जोड़, गुणा और अन्य गणितीय कार्यों सहित किसी भी मनमाने ढंग से बूलियन फ़ंक्शन को तर्क ऑपरेटरों के कार्यात्मक पूर्णता सेट से बनाया जा सकता है। 1987 में, कॉनवे का गेम ऑफ लाइफ बिट वैक्टर पर टिल तिल  के एक विशेष अनुक्रम को लागू करने के लिए  बन जाता है  नामक प्रारंभिक स्ट्रीम प्रोसेसिंग का उपयोग करके सामान्य प्रयोजन कंप्यूटिंग के पहले उदाहरणों में से एक बन गया। ग्राफिक्स प्रोसेसर पर प्रोग्रामेबल शेडर्स और तैरनेवाला स्थल  सपोर्ट दोनों के आगमन के साथ, 2001 के बाद जीपीयू पर सामान्य प्रयोजन कंप्यूटिंग अधिक व्यावहारिक और लोकप्रिय हो गई। विशेष रूप से, मैट्रिक्स (गणित) और/या वेक्टर (गणित और भौतिकी) से जुड़ी समस्याएं – विशेष रूप से दो-, तीन-, या चार-आयामी वैक्टर –  को GPU में अनुवाद करना आसान था, जो उन प्रकारों पर मूल गति और समर्थन के साथ कार्य करता है। जीपीजीपीयू के लिए एक महत्वपूर्ण मील का पत्थर वर्ष 2003 था जब दो अनुसंधान समूहों ने स्वतंत्र रूप से जीपीयू पर सामान्य रैखिक बीजगणित समस्याओं के समाधान के लिए जीपीयू-आधारित दृष्टिकोण की खोज की जो सीपीयू की तुलना में तेजी से चलते थे।  जीपीयू को सामान्य प्रयोजन प्रोसेसर के रूप में उपयोग करने के इन शुरुआती प्रयासों के लिए ग्राफिक्स प्राइमेटिव के संदर्भ में कम्प्यूटेशनल समस्याओं को सुधारने की आवश्यकता थी, जैसा कि ग्राफिक्स प्रोसेसर, ओपनजीएल और डायरेक्टएक्स के लिए दो प्रमुख एपीआई द्वारा समर्थित है। इस बोझिल अनुवाद को सामान्य प्रयोजन प्रोग्रामिंग भाषाओं और एपीआई जैसे लिब श/रैपिडमाइंड, ब्रुकजीपीयू और एक्सेलेरेटर के आगमन से रोका गया था। इसके बाद एनवीडिया का CUDA आया, जिसने प्रोग्रामर्स को अधिक सामान्य उच्च-प्रदर्शन कंप्यूटिंग अवधारणाओं के पक्ष में अंतर्निहित ग्राफिकल अवधारणाओं को अनदेखा करने की अनुमति दी। नई, हार्डवेयर-विक्रेता-स्वतंत्र पेशकशों में Microsoft का DirectCompute और Apple/Khronos Group का OpenCL शामिल हैं। इसका मतलब यह है कि आधुनिक जीपीजीपीयू पाइपलाइन डेटा को ग्राफिकल रूप में पूर्ण और स्पष्ट रूपांतरण की आवश्यकता के बिना जीपीयू की गति का लाभ उठा सकती है।

GPGPU.org के संस्थापक मार्क हैरिस ने GPGPU शब्द गढ़ा।

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

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

प्रमुख स्वामित्व ढांचा एनवीडिया सीयूडीए है। एनवीडिया ने 2006 में CUDA, एक सॉफ्टवेयर डेवलपमेंट किट (एसडीके) और अप्लिकेशन प्रोग्रामिंग अंतरफलक (एपीआई) लॉन्च किया, जो GeForce 8 श्रृंखला और बाद के जीपीयू पर निष्पादन के लिए एल्गोरिदम को कोड करने के लिए प्रोग्रामिंग भाषा सी (प्रोग्रामिंग भाषा) का उपयोग करने की अनुमति देता है।

2016 में लॉन्च किया गया ROCm, CUDA के लिए AMD की ओपन-सोर्स प्रतिक्रिया है। 2022 तक, सुविधाओं के मामले में यह CUDA के बराबर है, और इसमें अभी भी उपभोक्ता समर्थन का अभाव है।

OpenVIDIA को 2003-2005 के बीच टोरंटो विश्वविद्यालय में विकसित किया गया था, एनवीडिया के सहयोग से।

Altimesh द्वारा बनाया गया Altimesh हाइब्रिडाइज़र सामान्य इंटरमीडिएट भाषा को CUDA बायनेरिज़ में संकलित करता है। यह जेनरिक और वर्चुअल फ़ंक्शंस का समर्थन करता है। डिबगिंग और प्रोफाइलिंग को विजुअल स्टूडियो और एनसाइट के साथ एकीकृत किया गया है। यह विज़ुअल स्टूडियो मार्केटप्लेस पर विज़ुअल स्टूडियो एक्सटेंशन के रूप में उपलब्ध है।

Microsoft ने DirectCompute GPU कंप्यूटिंग API पेश किया, जिसे DirectX 11 API के साथ जारी किया गया।, क्वांटएलिया द्वारा निर्मित, Microsoft .NET भाषाओं के लिए देशी GPU कंप्यूटिंग क्षमताओं का परिचय F शार्प (प्रोग्रामिंग भाषा)|F# और सी शार्प (प्रोग्रामिंग भाषा)|सी#। एलिया जीपीयू प्रतिनिधियों और स्वचालित मेमोरी प्रबंधन का उपयोग करके जीपीयू समानांतर-के लिए और समानांतर समुच्चय पर आधारित एक सरलीकृत जीपीयू प्रोग्रामिंग मॉडल भी प्रदान करता है। MATLAB समानांतर कंप्यूटिंग टूलबॉक्स और MATLAB वितरित कंप्यूटिंग सर्वर का उपयोग करके GPGPU त्वरण का समर्थन करता है, और जैकेट (सॉफ़्टवेयर) जैसे तृतीय-पक्ष पैकेज।

जीपीजीपीयू प्रसंस्करण का उपयोग भौतिकी इंजनों द्वारा न्यूटोनियन भौतिकी का अनुकरण करने के लिए भी किया जाता है, और व्यावसायिक कार्यान्वयन में हॉक (सॉफ्टवेयर) | हॉक फिजिक्स, एफएक्स और फिजएक्स शामिल हैं, दोनों का उपयोग आमतौर पर कंप्यूटर और वीडियो गेम के लिए किया जाता है।

C++ एक्सेलेरेटेड मैसिव पैरेललिज्म (C++ AMP) एक लाइब्रेरी है जो GPU पर डेटा-समानांतर हार्डवेयर का उपयोग करके C++ कोड के निष्पादन को तेज करती है।

मोबाइल कंप्यूटर
मोबाइल जीपीयू की बढ़ती शक्ति की प्रवृत्ति के कारण, सामान्य प्रयोजन प्रोग्रामिंग प्रमुख मोबाइल ऑपरेटिंग सिस्टम चलाने वाले मोबाइल उपकरणों पर भी उपलब्ध हो गई है।

Google Android (ऑपरेटिंग सिस्टम) 4.2 ने मोबाइल डिवाइस GPU पर RenderScript कोड चलाने को सक्षम किया। ऐप्पल इंक ने आईओएस अनुप्रयोगों के लिए मालिकाना धातु (एपीआई)  एपीआई पेश किया, जो ऐप्पल के जीपीयू कंप्यूट शेडर्स के माध्यम से मनमाना कोड निष्पादित करने में सक्षम है।

हार्डवेयर समर्थन
कंप्यूटर वीडियो कार्ड विभिन्न विक्रेताओं, जैसे एनवीडिया, एएमडी द्वारा निर्मित किए जाते हैं। ऐसे विक्रेताओं के कार्ड पूर्णांक और तैरनेवाला स्थल प्रारूप (32-बिट और 64-बिट) जैसे डेटा-प्रारूप समर्थन को लागू करने में भिन्न होते हैं। ग्राफिक कार्ड की विभिन्न विशेषताओं को एक सरल शेडर मॉडल संस्करण संख्या (1.0, 2.0, 3.0, आदि) में रैंक करने में मदद करने के लिए माइक्रोसॉफ्ट ने एक उच्च-स्तरीय शेडिंग भाषा#शेडर मॉडल तुलना मानक पेश किया।

पूर्णांक संख्या
प्री-डायरेक्टएक्स 9 वीडियो कार्ड केवल पैलेट (कंप्यूटिंग) या पूर्णांक रंग प्रकारों का समर्थन करते हैं। विभिन्न प्रारूप उपलब्ध हैं, प्रत्येक में एक लाल तत्व, एक हरा तत्व और एक नीला तत्व शामिल है। कभी-कभी पारदर्शिता के लिए उपयोग करने के लिए एक और अल्फा मान जोड़ा जाता है। सामान्य प्रारूप हैं:


 * प्रति पिक्सेल 8 बिट्स - कभी-कभी पैलेट मोड, जहां प्रत्येक मान किसी अन्य प्रारूप में निर्दिष्ट वास्तविक रंग मान के साथ तालिका में एक सूचकांक होता है। कभी-कभी लाल के लिए तीन बिट, हरे के लिए तीन बिट और नीले के लिए दो बिट होते हैं।
 * 16 बिट प्रति पिक्सेल - आमतौर पर बिट्स को लाल के लिए पांच बिट्स, हरे के लिए छह बिट्स और नीले के लिए पांच बिट्स के रूप में आवंटित किया जाता है।
 * 24 बिट प्रति पिक्सेल - लाल, हरे और नीले प्रत्येक के लिए आठ बिट हैं।
 * 32 बिट प्रति पिक्सेल - लाल, हरा, नीला और अल्फा कंपोजिटिंग में से प्रत्येक के लिए आठ बिट हैं।

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

DirectX 9 शेडर मॉडल 2.x ने दो सटीक प्रकारों के समर्थन का सुझाव दिया: पूर्ण और आंशिक सटीकता। पूर्ण परिशुद्धता समर्थन या तो FP32 या FP24 (फ़्लोटिंग पॉइंट 32- या 24-बिट प्रति घटक) या इससे अधिक हो सकता है, जबकि आंशिक परिशुद्धता FP16 थी। ATI Technologies|ATI की Radeon R300 श्रृंखला के GPU ने केवल प्रोग्रामेबल फ्रैगमेंट पाइपलाइन में FP24 परिशुद्धता का समर्थन किया (हालाँकि FP32 वर्टेक्स प्रोसेसर में समर्थित था) जबकि Nvidia की GeForce FX श्रृंखला FP16 और FP32 दोनों का समर्थन करती थी; अन्य विक्रेताओं जैसे S3 ग्राफ़िक्स और XGI टेक्नोलॉजी ने FP24 तक के प्रारूपों के मिश्रण का समर्थन किया।

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

वेक्टरीकरण
जीपीयू पर अधिकांश ऑपरेशन वेक्टरकृत तरीके से संचालित होते हैं: एक ऑपरेशन एक साथ चार मानों पर किया जा सकता है। उदाहरण के लिए, यदि एक रंग $⟨R1, G1, B1⟩$ को दूसरे रंग से संशोधित किया जाना है $⟨R2, G2, B2⟩$, GPU परिणामी रंग उत्पन्न कर सकता है $⟨R1*R2, G1*G2, B1*B2⟩$ एक ऑपरेशन में. यह कार्यक्षमता ग्राफ़िक्स में उपयोगी है क्योंकि लगभग हर बुनियादी डेटा प्रकार एक वेक्टर (या तो 2-, 3-, या 4-आयामी) है। उदाहरणों में शीर्ष, रंग, सामान्य वेक्टर और बनावट निर्देशांक शामिल हैं। कई अन्य एप्लिकेशन इसका अच्छा उपयोग कर सकते हैं, और उनके उच्च प्रदर्शन के कारण, वेक्टर निर्देश, जिसे एकल निर्देश, एकाधिक डेटा (एकल निर्देश, एकाधिक डेटा) कहा जाता है, लंबे समय से सीपीयू पर उपलब्ध हैं।

जीपीयू बनाम सीपीयू
मूल रूप से, डेटा को केवल एक केंद्रीय प्रसंस्करण इकाई (सीपीयू) से एक ग्राफिक्स प्रोसेसिंग इकाई (जीपीयू) तक, फिर एक प्रदर्शन उपकरण  तक एक-तरफ़ा पारित किया जाता था। हालाँकि, जैसे-जैसे समय आगे बढ़ा, GPU के लिए पहले सरल, फिर डेटा की जटिल संरचनाओं को संग्रहीत करना मूल्यवान हो गया, जिसे CPU में वापस भेजा गया, जो एक छवि का विश्लेषण करता था, या 2D या 3D प्रारूप के रूप में प्रस्तुत वैज्ञानिक-डेटा का एक सेट जिसे एक वीडियो कार्ड समझ सकता है। क्योंकि GPU के पास प्रत्येक ड्रॉ ऑपरेशन तक पहुंच है, यह इन रूपों में डेटा का त्वरित रूप से विश्लेषण कर सकता है, जबकि CPU को प्रत्येक पिक्सेल या डेटा तत्व को बहुत धीमी गति से पोल करना चाहिए, क्योंकि CPU और उसके रैंडम-एक्सेस मेमोरी के बड़े पूल (या इससे भी बदतर स्थिति में, एक हार्ड ड्राइव) के बीच पहुंच की गति GPU और वीडियो कार्ड की तुलना में धीमी है, जिसमें आम तौर पर कम मात्रा में अधिक महंगी मेमोरी होती है जो एक्सेस करने के लिए बहुत तेज़ होती है। सक्रिय रूप से विश्लेषण किए जाने वाले डेटा सेट के हिस्से को बनावट या अन्य आसानी से पढ़ने योग्य जीपीयू रूपों के रूप में उस जीपीयू मेमोरी में स्थानांतरित करने से गति में वृद्धि होती है। जीपीजीपीयू डिज़ाइन की विशिष्ट विशेषता सूचना डुप्लेक्स (दूरसंचार) को जीपीयू से सीपीयू में वापस स्थानांतरित करने की क्षमता है; आम तौर पर दोनों दिशाओं में डेटा थ्रूपुट आदर्श रूप से उच्च होता है, जिसके परिणामस्वरूप एक विशिष्ट उच्च-उपयोग कलन विधि की गति पर गुणक (गुणक) प्रभाव पड़ता है। जीपीजीपीयू पाइपलाइन विशेष रूप से बड़े डेटा सेट और/या 2डी या 3डी इमेजरी वाले डेटा पर दक्षता में सुधार कर सकती हैं। इसका उपयोग जटिल ग्राफिक्स पाइपलाइनों के साथ-साथ वैज्ञानिक कंप्यूटिंग में भी किया जाता है; जीनोम मैपिंग जैसे बड़े डेटा सेट वाले क्षेत्रों में, या जहां दो- या तीन-आयामी विश्लेषण उपयोगी है, वहां और भी अधिक –  विशेष रूप से वर्तमान में बायोमोलिक्यूल विश्लेषण, प्रोटीन अध्ययन और अन्य जटिल कार्बनिक रसायन विज्ञान में। ऐसी पाइपलाइनें अन्य क्षेत्रों के अलावा, छवि प्रसंस्करण और कंप्यूटर दृष्टि में दक्षता में भी काफी सुधार कर सकती हैं; साथ ही आम तौर पर समानांतर कंप्यूटिंग। कुछ अत्यधिक अनुकूलित पाइपलाइनों ने एक उच्च-उपयोग कार्य पर मूल सीपीयू-आधारित पाइपलाइन की गति में कई सौ गुना वृद्धि प्राप्त की है।

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

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

कैश
ऐतिहासिक रूप से, सीपीयू ने हार्डवेयर-प्रबंधित सीपीयू कैश का उपयोग किया है, लेकिन पहले के जीपीयू केवल सॉफ्टवेयर-प्रबंधित स्थानीय यादें प्रदान करते थे। हालाँकि, जैसे-जैसे सामान्य प्रयोजन के अनुप्रयोगों के लिए जीपीयू का उपयोग बढ़ रहा है, अत्याधुनिक जीपीयू को हार्डवेयर-प्रबंधित बहु-स्तरीय कैश के साथ डिज़ाइन किया जा रहा है, जिसने जीपीयू को मुख्यधारा कंप्यूटिंग की ओर बढ़ने में मदद की है। उदाहरण के लिए, GeForce 200 श्रृंखला GT200 आर्किटेक्चर GPU में L2 कैश की सुविधा नहीं थी, Fermi (माइक्रोआर्किटेक्चर) GPU में 768 KiB अंतिम-स्तर कैश है, केप्लर (माइक्रोआर्किटेक्चर)  GPU में 1.5 MiB अंतिम-स्तर कैश है, मैक्सवेल (माइक्रोआर्किटेक्चर) GPU में 2 MiB अंतिम-स्तर कैश है, और पास्कल (माइक्रोआर्किटेक्चर) GPU में 4 MiB अंतिम-स्तर कैश है।

फ़ाइल पंजीकृत करें
जीपीयू में बहुत बड़ी रजिस्टर फ़ाइल होती है, जो उन्हें संदर्भ-स्विचिंग विलंबता को कम करने की अनुमति देती है। विभिन्न GPU पीढ़ियों के साथ रजिस्टर फ़ाइल का आकार भी बढ़ रहा है, उदाहरण के लिए, मैक्सवेल (GM200), पास्कल और वोल्टा GPU पर कुल रजिस्टर फ़ाइल का आकार क्रमशः 6 MiB, 14 MiB और 20 MiB है। तुलनात्मक रूप से, प्रोसेसर रजिस्टर का आकार छोटा होता है, आमतौर पर दसियों या सैकड़ों किलोबाइट।

ऊर्जा दक्षता
जीपीयू का उच्च प्रदर्शन उच्च बिजली की खपत की कीमत पर आता है, जो कि पूर्ण लोड के तहत वास्तव में उतनी ही बिजली है जितनी बाकी पीसी प्रणाली संयुक्त है। पास्कल श्रृंखला GPU (टेस्ला P100) की अधिकतम बिजली खपत 250W निर्दिष्ट की गई थी।

स्ट्रीम प्रोसेसिंग
जीपीयू विशेष रूप से ग्राफिक्स के लिए डिज़ाइन किए गए हैं और इस प्रकार संचालन और प्रोग्रामिंग में बहुत प्रतिबंधात्मक हैं। अपने डिज़ाइन के कारण, GPU केवल उन समस्याओं के लिए प्रभावी होते हैं जिन्हें स्ट्रीम प्रोसेसिंग का उपयोग करके हल किया जा सकता है और हार्डवेयर का उपयोग केवल कुछ निश्चित तरीकों से किया जा सकता है।

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

जीपीयू केवल स्वतंत्र शीर्षों और टुकड़ों को संसाधित कर सकते हैं, लेकिन उनमें से कई को समानांतर में भी संसाधित कर सकते हैं। यह विशेष रूप से तब प्रभावी होता है जब प्रोग्रामर एक ही तरह से कई शीर्षों या टुकड़ों को संसाधित करना चाहता है। इस अर्थ में, GPU स्ट्रीम प्रोसेसर हैं – प्रोसेसर जो एक साथ एक स्ट्रीम में कई रिकॉर्ड पर एक कर्नेल चलाकर समानांतर में काम कर सकते हैं।

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

कम्प्यूटेशनल संसाधन
GPU पर विभिन्न प्रकार के कम्प्यूटेशनल संसाधन उपलब्ध हैं:


 * प्रोग्राम करने योग्य प्रोसेसर - वर्टेक्स, प्रिमिटिव, फ्रैगमेंट और मुख्य रूप से कंप्यूट पाइपलाइन प्रोग्रामर को डेटा की स्ट्रीम पर कर्नेल निष्पादित करने की अनुमति देते हैं
 * रैस्टराइज़र - टुकड़े बनाता है और बनावट निर्देशांक और रंग जैसे प्रति-शीर्ष स्थिरांक को प्रक्षेपित करता है
 * बनावट इकाई - केवल पढ़ने योग्य मेमोरी इंटरफ़ेस
 * फ़्रेमबफ़र - केवल-लिखने योग्य मेमोरी इंटरफ़ेस

वास्तव में, एक प्रोग्राम फ़्रेमबफ़र के बजाय आउटपुट के लिए केवल लिखने वाली बनावट को प्रतिस्थापित कर सकता है। यह या तो फ़्रेमबफ़र ऑब्जेक्ट#यूज़ (आरटीटी), रेंडर-टू-बैकबफ़र-कॉपी-टू-टेक्सचर (आरटीबीसीटीटी), या हाल के माध्यम से किया जाता है मन की बात कह डालो।

धारा के रूप में बनावट
जीपीजीपीयू में स्ट्रीम के लिए सबसे आम रूप 2डी ग्रिड है क्योंकि यह स्वाभाविक रूप से जीपीयू में निर्मित रेंडरिंग मॉडल के साथ फिट बैठता है। कई संगणनाएँ स्वाभाविक रूप से ग्रिड में मैप होती हैं: मैट्रिक्स बीजगणित, छवि प्रसंस्करण, भौतिक आधारित सिमुलेशन, और इसी तरह।

चूंकि बनावट का उपयोग मेमोरी के रूप में किया जाता है, इसलिए बनावट लुकअप का उपयोग मेमोरी रीड के रूप में किया जाता है। इसके कारण कुछ ऑपरेशन GPU द्वारा स्वचालित रूप से किए जा सकते हैं।

गुठली
कंप्यूट कर्नेल को लूप (कंप्यूटिंग) के शरीर के रूप में माना जा सकता है। उदाहरण के लिए, सीपीयू पर ग्रिड पर काम करने वाले प्रोग्रामर के पास ऐसा कोड हो सकता है जो इस तरह दिखता है:

GPU पर, प्रोग्रामर केवल लूप की बॉडी को कर्नेल के रूप में निर्दिष्ट करता है और किस डेटा को इनवॉइस करके लूप करना है ज्यामिति प्रसंस्करण.

प्रवाह नियंत्रण
अनुक्रमिक कोड में यदि-तब-अन्यथा कथनों और लूप के विभिन्न रूपों का उपयोग करके प्रोग्राम के प्रवाह को नियंत्रित करना संभव है। ऐसी प्रवाह नियंत्रण संरचनाएँ हाल ही में GPU में जोड़ी गई हैं। अंकगणित/बिट संचालन की उचित रूप से तैयार की गई श्रृंखला का उपयोग करके सशर्त लेखन किया जा सकता है, लेकिन लूपिंग और सशर्त शाखा संभव नहीं थी।

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

मानचित्र
मैप ऑपरेशन बस दिए गए फ़ंक्शन (कर्नेल) को स्ट्रीम के प्रत्येक तत्व पर लागू करता है। एक सरल उदाहरण स्ट्रीम में प्रत्येक मान को एक स्थिरांक (एक छवि की चमक बढ़ाना) से गुणा करना है। मानचित्र संचालन को GPU पर लागू करना सरल है। प्रोग्रामर स्क्रीन पर प्रत्येक पिक्सेल के लिए एक टुकड़ा उत्पन्न करता है और प्रत्येक पर एक टुकड़ा प्रोग्राम लागू करता है। समान आकार की परिणाम स्ट्रीम आउटपुट बफ़र में संग्रहीत होती है।

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

स्ट्रीम फ़िल्टरिंग
स्ट्रीम फ़िल्टरिंग मूलतः एक गैर-समान कमी है। फ़िल्टरिंग में कुछ मानदंडों के आधार पर स्ट्रीम से आइटम हटाना शामिल है।

स्कैन
स्कैन ऑपरेशन, जिसे प्रीफ़िक्स सम#पैरेलल एल्गोरिथम भी कहा जाता है, डेटा तत्वों के एक वेक्टर (स्ट्रीम) और एक पहचान तत्व 'i' के साथ एक मोनोइड|(मनमाना) सहयोगी बाइनरी फ़ंक्शन '+' लेता है। यदि इनपुट [a0, a1, a2, a3, ...] है, तो एक विशेष स्कैन आउटपुट उत्पन्न करता है [i, a0, a0 + a1, a0 + a1 + a2, ...], जबकि एक समावेशी स्कैन आउटपुट उत्पन्न करता है आउटपुट [a0, a0 + a1, a0 + a1 + a2, a0 + a1 + a2 + a3, ...] और अर्धसमूह अस्तित्व में है। जबकि पहली नज़र में ऑपरेशन स्वाभाविक रूप से क्रमिक लग सकता है, कुशल समानांतर स्कैन एल्गोरिदम संभव हैं और ग्राफिक्स प्रोसेसिंग इकाइयों पर लागू किए गए हैं। स्कैन ऑपरेशन में उदाहरण के लिए, क्विकसॉर्ट और स्पार्स मैट्रिक्स-वेक्टर गुणन का उपयोग होता है।

तितर बितर
स्कैटर (वेक्टर एड्रेसिंग) ऑपरेशन सबसे स्वाभाविक रूप से वर्टेक्स प्रोसेसर पर परिभाषित होता है। वर्टेक्स प्रोसेसर वर्टेक्स (ज्यामिति) की स्थिति को समायोजित करने में सक्षम है, जो प्रोग्रामर को यह नियंत्रित करने की अनुमति देता है कि ग्रिड पर जानकारी कहाँ जमा की जाती है। अन्य विस्तार भी संभव हैं, जैसे यह नियंत्रित करना कि शीर्ष कितने बड़े क्षेत्र को प्रभावित करता है।

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

समर्पित कंप्यूट कर्नेल में, स्कैटर को अनुक्रमित लेखन द्वारा निष्पादित किया जा सकता है।

इकट्ठा करें
इकट्ठा करना (वेक्टर संबोधन) बिखराव का विपरीत है। स्कैटर मानचित्र के अनुसार तत्वों को पुन: व्यवस्थित करने के बाद, इकट्ठा किए गए मानचित्र स्कैटर के अनुसार तत्वों के क्रम को पुनर्स्थापित कर सकता है। समर्पित कंप्यूट कर्नेल में, अनुक्रमित रीड्स द्वारा इकट्ठा किया जा सकता है। अन्य शेडर्स में, इसे टेक्सचर-लुकअप के साथ प्रदर्शित किया जाता है।

क्रमबद्ध करें
सॉर्ट ऑपरेशन तत्वों के एक अव्यवस्थित सेट को तत्वों के एक क्रमबद्ध सेट में बदल देता है। जीपीयू पर सबसे आम कार्यान्वयन पूर्णांक और फ्लोटिंग पॉइंट डेटा के लिए रेडिक्स सॉर्ट और सामान्य तुलनीय डेटा के लिए मोटे-ग्रेन्ड मर्ज़ सॉर्ट  और फाइन-ग्रेन्ड सॉर्टिंग नेटवर्क का उपयोग करना है।

खोज
खोज ऑपरेशन प्रोग्रामर को स्ट्रीम के भीतर किसी दिए गए तत्व को ढूंढने की अनुमति देता है, या संभवतः किसी निर्दिष्ट तत्व के पड़ोसियों को ढूंढने की अनुमति देता है। GPU का उपयोग किसी व्यक्तिगत तत्व की खोज को तेज़ करने के लिए नहीं किया जाता है, बल्कि इसका उपयोग समानांतर में कई खोजों को चलाने के लिए किया जाता है। अधिकतर उपयोग की जाने वाली खोज विधि क्रमबद्ध तत्वों पर बाइनरी खोज है।

डेटा संरचनाएं
GPU पर विभिन्न प्रकार की डेटा संरचनाओं का प्रतिनिधित्व किया जा सकता है:


 * सघन सारणी डेटा संरचना
 * विरल मैट्रिक्स (विरल सरणी) –  स्थिर या गतिशील
 * अनुकूली संरचनाएं (संघ प्रकार)

अनुप्रयोग
निम्नलिखित कुछ क्षेत्र हैं जहां सामान्य प्रयोजन कंप्यूटिंग के लिए जीपीयू का उपयोग किया गया है:

रेफरी> रेफरी> इलेक्ट्रॉनिक डिज़ाइन स्वचालन स्वचालन
 * स्वचालित समानांतरीकरण
 * कम्प्यूटेशनल भौतिकी और भौतिकी इंजन (आमतौर पर न्यूटोनियन भौतिकी मॉडल पर आधारित)
 * कॉनवे का जीवन का खेल, कपड़ा अनुकरण, यूलर समीकरणों के समाधान द्वारा द्रव असंपीड्य प्रवाह (द्रव गतिशीलता) या नेवियर-स्टोक्स समीकरण
 * सांख्यिकीय भौतिकी
 * आइसिंग मॉडल
 * जाली गेज सिद्धांत
 * विभाजन (छवि प्रसंस्करण) – 2डी और 3डी
 * स्तर निर्धारित करने के तरीके तरीके
 * परिकलित टोमोग्राफी पुनर्निर्माण
 * फास्ट फूरियर ट्रांसफॉर्म
 * जीपीयू सीखना –  यंत्र अधिगम  और डेटा खनन गणना, उदाहरण के लिए, सॉफ़्टवेयर BIDMach के साथ
 * k-निकटतम पड़ोसी एल्गोरिथ्म
 * फजी लॉजिक
 * टोन मैपिंग
 * ऑडियो सिग्नल प्रोसेसिंग
 * अंकीय संकेत प्रक्रिया (डीएसपी) के लिए जीपीयू का उपयोग करने के लिए ऑडियो और ध्वनि प्रभाव प्रसंस्करण
 * एनालॉग सिग्नल प्रोसेसिंग
 * भाषण प्रसंस्करण
 * डिजिटल इमेज प्रोसेसिंग
 * वीडियो प्रोसेसिंग
 * हार्डवेयर ने वीडियो डिकोडिंग और पोस्ट-प्रोसेसिंग को त्वरित किया
 * मोशन मुआवज़ा (एमओ कॉम्प)
 * व्युत्क्रम असतत कोसाइन परिवर्तन (iDCT)
 * वेरिएबल-लेंथ डिकोडिंग (वीएलडी), हफ़मैन कोडिंग
 * व्युत्क्रम परिमाणीकरण (आईक्यू, बुद्धिलब्धि के साथ भ्रमित न हों)
 * इन-लूप डीब्लॉकिंग
 * बिटस्ट्रीम प्रोसेसिंग (सीएवीएलसी/सीएबीएसी) इस कार्य के लिए विशेष प्रयोजन हार्डवेयर का उपयोग कर रही है क्योंकि यह एक क्रमिक कार्य है जो नियमित जीपीजीपीयू गणना के लिए उपयुक्त नहीं है।
 * deinterlacing
 * स्थानिक-अस्थायी डिइंटरलेसिंग
 * शोर में कमी
 * किनारा एनहांसमेंट
 * रंग सुधार
 * हार्डवेयर त्वरित वीडियो एन्कोडिंग और प्री-प्रोसेसिंग
 * वैश्विक चमक – किरण अनुरेखण (ग्राफिक्स), फोटॉन मैपिंग, रेडियोसिटी (कंप्यूटर ग्राफिक्स) अन्य के बीच, उपसतह प्रकीर्णन
 * ज्यामितीय कंप्यूटिंग – रचनात्मक ठोस ज्यामिति, दूरी क्षेत्र, टकराव का पता लगाना, पारदर्शिता गणना, छाया निर्माण
 * वैज्ञानिक कंप्यूटिंग
 * मोंटे कार्लो प्रकाश प्रसार का अनुकरण
 * मौसम की भविष्यवाणी
 * जलवायु अनुसंधान
 * जीपीयू पर आणविक मॉडलिंग<संदर्भ नाम = हसन खोंडकर एस. 2014 पीपी. 612-17 >
 * क्वांटम यांत्रिक भौतिकी
 * खगोल भौतिकी
 * जैव सूचना विज्ञान
 * कम्प्यूटेशनल वित्त
 * मेडिकल इमेजिंग
 * क्लिनिकल निर्णय समर्थन प्रणाली (सीडीएसएस)
 * कंप्यूटर दृष्टि
 * डिजिटल सिग्नल प्रोसेसिंग / सिग्नल प्रोसेसिंग
 * नियंत्रण इंजीनियरिंग
 * गतिविधि अनुसंधान
 * इसका कार्यान्वयन: संसाधन बाधित परियोजना शेड्यूलिंग समस्या को हल करने वाला जीपीयू टैबू खोज एल्गोरिदम गिटहब पर निःशुल्क उपलब्ध है; नर्स शेड्यूलिंग समस्या को हल करने वाला GPU एल्गोरिदम GitHub पर निःशुल्क उपलब्ध है।
 * तंत्रिका - तंत्र
 * डेटाबेस संचालन
 * कम्प्यूटेशनल तरल सक्रिय विशेष रूप जाली बोल्ट्ज़मैन विधियाँ विधियों का उपयोग करते हुए
 * क्रिप्टोग्राफी और क्रिप्ट विश्लेषण
 * प्रदर्शन मॉडलिंग: जीपीयू पर कम्प्यूटेशनल रूप से गहन कार्य<संदर्भ नाम = हसन खोंडकर एस. 2014 पीपी. 612-17 />
 * इनका कार्यान्वयन: एमडी6, उच्च एन्क्रिप्शन मानक (एईएस), डेटा एन्क्रिप्शन मानक (डीईएस), आरएसए (एल्गोरिदम), अण्डाकार वक्र क्रिप्टोग्राफी (ईसीसी)
 * पासवर्ड क्रैक करना
 * cryptocurrency लेनदेन प्रसंस्करण (खनन) (बिटकॉइन नेटवर्क#खनन)
 * एंटीवायरस सॉफ्टवेयर
 * घुसपैठ का पता लगाना
 * SETI@home, Einstein@home जैसी वितरित कंप्यूटिंग परियोजनाओं के लिए कंप्यूटिंग शक्ति बढ़ाएँ

जैव सूचना विज्ञान
जैव सूचना विज्ञान में जीपीजीपीयू का उपयोग:<संदर्भ नाम = हसन खोंडकर एस. 2014 पीपी. 612-17 />

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

‡ क्यू=क्वाड्रो जीपीयू, टी=एनवीडिया टेस्ला। एनवीडिया ने इस एप्लिकेशन के लिए जीपीयू की सिफारिश की। प्रमाणन जानकारी प्राप्त करने के लिए डेवलपर या आईएसवी से संपर्क करें।

यह भी देखें

 * तेज़ द्वितीय
 * भौतिकी इंजन
 * उन्नत सिमुलेशन लाइब्रेरी
 * भौतिकी प्रसंस्करण इकाई (पीपीयू)
 * धातु के करीब
 * ऑडियो प्रोसेसिंग यूनिट
 * लारबी (माइक्रोआर्किटेक्चर)
 * एआई त्वरक
 * गहन शिक्षण प्रोसेसर (डीएलपी)
 * जीपीयूलिब