प्रोग्रामेबल पाइपलाइन (GLSL) फिक्स्ड पाइप लाइन से अधिक तेज़ क्यों है?


27

इसलिए मैं अपने आप को जीएलएसएल सिखा रहा हूं और यह पता लगाने की कोशिश कर रहा हूं कि यह तय फंक्शन पाइपलाइन से ज्यादा तेज क्यों है।

मेरे पास समस्या होने का कारण यह है कि मेरी समझ से, आपके द्वारा बनाए गए शेड पाइप लाइन के वर्गों की जगह ले रहे हैं जो पहले थे। तो, कैसे बस अपने खुद के संस्करण तेजी से चीजों को प्रदान कर रहा है?

केवल एक चीज जो मैं सोच सकता हूं कि अगर आपने आपूर्ति करने की कोशिश की है तो पहले अपने स्वयं के प्रकाश समीकरण कह सकते हैं, आपको सीपीयू पर गणना करना होगा, लेकिन अब आप GPU पर गणना कर सकते हैं जो तेजी से होगा।

क्या मुझे ये ठीक तरह से समझ आ रहा है?


क्या आप पूछ रहे हैं कि क्या मौजूदा फ़ंक्शन के अपने स्वयं के संस्करण बनाने के लिए यह तेज़ है या यदि आप सीपीयू पर गणना कर रहे हैं, तो उन कार्यों को लोड करना तेज़ है?
MichaelHouse

मुझे gamedev.net पर एक पोस्ट मिली है जो मेरे सवालों का जवाब देती है।
जॉय ग्रीन

2
समझा। आपको यहां इसके बारे में एक जवाब पोस्ट करना चाहिए, ताकि दूसरों को फायदा हो सके। शायद प्रक्रिया में अपने प्रश्न को स्पष्ट करना।
MichaelHouse

@ जॉय-ग्रीन क्या आप कृपया यहाँ gamedev.net लिंक करेंगे । मैं ऐसे लोगों के लिए मददगार होऊंगा जो इस सवाल पर अड़ेंगे।
क़ाज़ी इरफ़ान

1
मामलों को और अधिक भ्रमित करने के लिए, मेरे परीक्षणों में निर्धारित पाइपलाइन वास्तव में शेड की तुलना में तेज हो सकती है, कम से कम सरल मामलों में; देखें sol.gfxile.net/instancing.html
जरी कोम्पा

जवाबों:


27

आपके द्वारा बनाए गए शेडर्स फिक्स्ड-फंक्शन पाइपलाइन (FFP) का अपना संस्करण नहीं हैं, लेकिन कुछ ठंडा और जटिल प्राप्त करने के लिए एक कस्टम वर्टेक्स- और पिक्सेल-मैनिपुलेटिंग ऑपरेशन।

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

FFP में प्रति पिक्सेल प्रकाश व्यवस्था के रूप में इस तरह की एक सामान्य चीज को लागू करने की कल्पना करें, केवल आपके हाथों में प्रक्षेपित डेटा और नमूना बनावट के साथ। यह "ईमानदारी से" करना भी संभव नहीं है, केवल विशेष मामलों के लिए हैक करता है जो वफादार पूर्वनिर्मित क्यूबैप्स और कुछ गंभीर सम्मिश्रण पर निर्भर करता है। पीपी के साथ यह प्रकाश दिशा और शीर्ष सामान्य के बीच एक डॉट उत्पाद को रंगीन करने का मामला बन जाता है।

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


1
अच्छा जवाब ... +1।
अमीर ज़ादे

@ग्रीन उस बारे में निश्चित नहीं है। किसी तरह बात याद आती है। Kylotan का उत्तर वास्तविक प्रश्न के लिए अधिक उपयुक्त है।
क्रिस का कहना है कि 20-21 पर मोनिका

14

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

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


1

मुख्य कारण जो मैं सोच सकता था कि निश्चित पाइपलाइन में एक चरण है, कि आपके कार्यक्रम को इसकी आवश्यकता नहीं है। उदाहरण के लिए एक गेम जिसमें सभी लाइट्स स्थिर हैं, आप आसानी से एक ऐसे शेडर को लागू कर सकते हैं, जो डायनेमिक लाइट की गणना करने की कोशिश भी नहीं करता है। इस मामले में आप shader एक precompiled shader की तुलना में तेज़ी से भागते हैं जो गतिशील प्रकाश (एक सामान्य प्रयोजन shader) के लिए कुछ समीकरणों की जाँच कर रहा है। अन्य उदाहरण भी हैं, आप आसानी से कई पहलुओं के बारे में सोच सकते हैं जिन्हें एक निश्चित पाइपलाइन के लिए माना जाना चाहिए लेकिन आप अपने स्वयं के जीएलएसएल कोड में कार्यान्वयन को अनदेखा कर सकते हैं।


1

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

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


"जब आप निश्चित-फ़ंक्शन पाइपलाइन का उपयोग करते हैं तो संभवतः ऐसा होता है, कि आपका ड्राइवर अपने स्वयं के विशेष शेड्स को लोड करता है जो निश्चित-फ़ंक्शन पथ को लागू करते हैं।" ..क्या तुम इसके बारे में निश्चित हो? क्या आप कोई विश्वसनीय संसाधन प्रदान कर सकते हैं? धन्यवाद।
क़ाज़ी इरफ़ान

@iamcreasy मेरे पास विश्वसनीय स्रोत नहीं है (इसलिए शायद), मुझे मानना ​​होगा। लेकिन मुझे पूरी तरह से संदेह है, कि नाबादे के ग्राफिक्स कार्ड (जो कि कई छोटे प्रोसेसर का एक गुच्छा हैं), अभी भी कंप्यूटिंग लाइटिंग या फॉग कम्प्यूटेशन के लिए समर्पित हार्डवेयर हैं। इसके बजाय यह अधिक संभावना है कि वे इसके लिए पूर्व-संकलित कार्यक्रमों को विशिष्ट shader चरणों में लोड करते हैं (चाहे ये ड्राइवर से आए हों या कुछ ROM भंडारण, मुझे नहीं पता)।
क्रिस ने

@iamcreasy के अनुसार nouveau wiki nouveau.freedesktop.org/wiki/CodeNames , GeForce 6xxx में फिक्स्ड पाइपलाइन को हटा दिया गया था।
गंदगी iCE

"जब आप निश्चित-फ़ंक्शन पाइपलाइन का उपयोग करते हैं तो संभवतः ऐसा होता है, कि आपका ड्राइवर अपने स्वयं के विशेष शेड्स को लोड करता है जो निश्चित-फ़ंक्शन पथ को लागू करते हैं।" सच। "लेकिन ये बहुत जटिल हो सकते हैं, प्रत्येक और हर सुविधा को फिक्स्ड-फंक्शन पाइपलाइन प्रदान करता है।" एक अच्छा ड्राइवर आपके द्वारा सक्षम किए गए कार्यशीलता के लिए शेड उत्पन्न करेगा।
क्रिस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.