जॉन ने पहले से ही एक महान उत्तर लिखा है, इसलिए इस उत्तर को उसके विस्तार पर विचार करें।
मैं वर्तमान में अलग-अलग एल्गोरिदम के लिए गणना शेड के साथ बहुत काम कर रहा हूं। सामान्य तौर पर, मैंने पाया है कि गणना करने वाले शेड उनके समकक्ष पिक्सेल shader या प्रतिक्रिया आधारित विकल्पों को बदलने की तुलना में बहुत तेज़ हो सकते हैं।
एक बार जब आप अपने सिर को इधर-उधर लपेटते हैं कि कंपकंपी कैसे काम करती है, तो वे कई मामलों में बहुत अधिक समझ में आता है। एक छवि को फ़िल्टर करने के लिए पिक्सेल शेड्स का उपयोग करने के लिए एक फ्रेम-बफ़र स्थापित करने, वर्टिकल भेजने, कई शेडर चरणों का उपयोग करने आदि की आवश्यकता होती है। छवि को फ़िल्टर करने के लिए यह क्यों आवश्यक होना चाहिए? इमेज प्रोसेसिंग के लिए फुल-स्क्रीन क्वैड्स का उपयोग करने के लिए इस्तेमाल किया जाना निश्चित रूप से मेरी राय में उनका उपयोग जारी रखने का एकमात्र "वैध" कारण है। मुझे यकीन है कि गणना ग्राफिक्स क्षेत्र के लिए एक नवागंतुक बनावट की तुलना में छवि प्रसंस्करण के लिए एक बहुत अधिक प्राकृतिक फिट गणना कंप्यूटर्स मिल जाएगा।
आपका प्रश्न विशेष रूप से इमेज फ़िल्टरिंग को संदर्भित करता है इसलिए मैं अन्य विषयों पर बहुत अधिक विस्तार नहीं करूंगा। हमारे कुछ परीक्षणों में, बनावट में रेंडर करने के लिए बस एक ट्रांसफ़ॉर्मेशन फीडबैक या स्विचिंग फ्रेमबफ़र ऑब्जेक्ट सेट करना, प्रदर्शन लागत को लगभग 0.2ms तक बढ़ा सकता है। ध्यान रखें कि यह किसी भी प्रतिपादन को बाहर करता है! एक मामले में, हमने शेड्स की गणना करने के लिए ठीक उसी एल्गोरिथ्म को रखा है और ध्यान देने योग्य प्रदर्शन में वृद्धि देखी गई है।
कंप्यूट शेड्स का उपयोग करते समय, GPU पर अधिक सिलिकॉन का उपयोग वास्तविक कार्य करने के लिए किया जा सकता है। पिक्सेल shader मार्ग का उपयोग करते समय इन सभी अतिरिक्त चरणों की आवश्यकता होती है:
- वर्टेक्स असेंबली (वर्टेक्स एट्रिब्यूट्स, वर्टेक्स डिवाइडर, टाइप कन्वर्सेशन को पढ़ते हुए, उन्हें vec4 तक फैलाना, आदि)
- शीर्ष शेडर को निर्धारित करने की आवश्यकता है कि वह कितना कम से कम हो
- रेखापुंज को पिक्सेल की सूची को छायांकित करने और वर्टेक्स आउटपुट को प्रक्षेपित करने के लिए गणना करना है (शायद छवि के केवल बनावट कोर्ड्स)
- सभी अलग-अलग राज्यों (गहराई परीक्षण, अल्फा परीक्षण, कैंची, सम्मिश्रण) को सेट और प्रबंधित करना होगा
आप तर्क दे सकते हैं कि पहले से उल्लेख किए गए सभी प्रदर्शन फायदे एक स्मार्ट ड्राइवर द्वारा नकार दिए जा सकते हैं। आप सही होंगे। ऐसा ड्राइवर यह पहचान सकता है कि आप गहराई परीक्षण आदि के बिना एक फुल-स्क्रीन क्वाड का प्रतिपादन कर रहे हैं और "फास्ट पथ" को कॉन्फ़िगर करें जो पिक्सेल शेड्स का समर्थन करने के लिए किए गए सभी बेकार काम को रोक देता है। मुझे आश्चर्य नहीं होगा अगर कुछ ड्राइवर अपने विशिष्ट GPU के लिए कुछ AAA गेम में पोस्ट-प्रोसेसिंग पास को तेज करने के लिए ऐसा करते हैं। आप निश्चित रूप से ऐसे किसी भी उपचार के बारे में भूल सकते हैं यदि आप एएए गेम पर काम नहीं कर रहे हैं।
हालांकि ड्राइवर जो नहीं कर सकता है वह कंप्यूटर शेडर पाइपलाइन द्वारा पेश किए गए बेहतर समानतावाद अवसर हैं। एक गाऊसी फिल्टर का क्लासिक उदाहरण लें। कंप्यूट शेड्स का उपयोग करके, आप ऐसा कुछ कर सकते हैं (फ़िल्टर को अलग करना या नहीं करना):
- प्रत्येक कार्य समूह के लिए, स्रोत छवि के नमूने को कार्य समूह के आकार में विभाजित करें और परिणामों को समूह साझा मेमोरी में संग्रहीत करें।
- साझा मेमोरी में संग्रहीत नमूना परिणामों का उपयोग करके फ़िल्टर आउटपुट की गणना करें।
- आउटपुट बनावट में लिखें
चरण 1 यहाँ कुंजी है। पिक्सेल shader संस्करण में, स्रोत छवि प्रति पिक्सेल कई बार नमूना की जाती है। गणना shader संस्करण में, प्रत्येक स्रोत टेक्सल को केवल एक बार एक कार्य समूह के अंदर पढ़ा जाता है। बनावट पढ़ता है आमतौर पर एक टाइल-आधारित कैश का उपयोग करते हैं, लेकिन साझा स्मृति की तुलना में यह कैश अभी भी बहुत धीमा है।
गाऊसी फ़िल्टर सरल उदाहरणों में से एक है। अन्य फ़िल्टरिंग एल्गोरिदम साझा मेमोरी का उपयोग करके कार्य समूहों के अंदर मध्यस्थ परिणामों को साझा करने के लिए अन्य अवसर प्रदान करते हैं।
हालांकि एक कैच है। कंप्यूट शेडर्स को अपने आउटपुट को सिंक्रनाइज़ करने के लिए स्पष्ट मेमोरी बाधाओं की आवश्यकता होती है। गलत मेमोरी एक्सेस से बचाव के लिए कम सुरक्षा उपाय भी हैं। अच्छे समानांतर प्रोग्रामिंग ज्ञान वाले प्रोग्रामर के लिए, कंप्यूट शेडर्स बहुत अधिक लचीलापन प्रदान करते हैं। इस लचीलेपन का मतलब है कि साधारण सी ++ कोड की तरह संगणक व्यवहार करना और धीमा या गलत कोड लिखना भी आसान है।
संदर्भ
- OpenGL कम्प्यूट शाटर्स विकी पेज
- DirectCompute: अनुकूलन और सर्वश्रेष्ठ अभ्यास, एरिक यंग, NVIDIA निगम, 2010 [pdf]
- कुशल गणना शैडर प्रोरमिंग, बिल बिलोडो, एएमडी, 2011? [पी पी एस]
- गेमिंग के लिए DirectCompute - कम्प्यूट शेडर्स, लैला मह और स्टीफन होड्स, AMD, 2013 के साथ अपने इंजन को सुपरचार्ज करें, [pps]
- एएमडी जीपीयू के लिए कंप्यूटर शेडर ऑप्टिमाइजेशन: पैरेलल रिडक्शन, वोल्फगैंग एंगेल, 2014