एक बार, जब> से तेज था <... रुको, क्या?


280

मैं एक भयानक OpenGL ट्यूटोरियल पढ़ रहा हूं । यह वास्तव में बहुत अच्छा है, मुझ पर विश्वास करो। अभी मैं जिस विषय पर हूं, वह Z- बफर है। यह बताने के अलावा कि यह सब क्या है, लेखक का उल्लेख है कि हम कस्टम गहराई परीक्षण कर सकते हैं, जैसे GL_LESS, GL_ALWAYS, आदि। वह यह भी बताते हैं कि गहराई मूल्यों का वास्तविक अर्थ (जो शीर्ष है और जो नहीं है) भी हो सकता है अनुकूलित। मैं अब तक समझता हूं। और फिर लेखक कुछ अविश्वसनीय कहता है:

रेंज zNear रेंज zFar से अधिक हो सकती है; यदि यह है, तो विंडो-स्पेस मान उलट जाएगा, जो दर्शक से निकटतम या सबसे दूर का गठन करता है।

इससे पहले, यह कहा गया था कि 0 का विंडो-स्पेस Z मान निकटतम है और 1 सबसे दूर है। हालांकि, अगर हमारे क्लिप-स्पेस जेड मानों को नकार दिया गया, तो 1 की गहराई देखने के सबसे करीब होगी और 0 की गहराई सबसे दूर होगी। फिर भी, अगर हम गहराई परीक्षण (GL_LESS से GL_GREATER, आदि) की दिशा को पलटाते हैं, तो हमें सटीक परिणाम मिलता है। तो यह वास्तव में सिर्फ एक सम्मेलन है। वास्तव में, Z का चिह्न और गहराई परीक्षण flipping एक बार कई खेलों के लिए एक महत्वपूर्ण प्रदर्शन अनुकूलन था।

अगर मुझे सही से समझ में आता है, प्रदर्शन-वार, Z का चिन्ह और गहराई से परीक्षण करना, <तुलना के साथ तुलना को बदलने के अलावा कुछ नहीं है >। तो, अगर मैं सही ढंग से समझते हैं और लेखक झूठ नहीं बोल रही है या चीजों को बनाकर, फिर बदल रहा है <करने के लिए >प्रयोग की जाने वाली एक महत्वपूर्ण अनुकूलन कई खेल के लिए।

क्या लेखक चीजों को बना रहा है, क्या मैं कुछ गलत समझ रहा हूं, या क्या यह वास्तव में मामला है कि एक बार <धीमी गति से ( vitally , जैसा कि लेखक कहता है) की तुलना में >?

यह काफी उत्सुक मामला स्पष्ट करने के लिए धन्यवाद!

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


6
लगता है कि इस ट्यूटोरियल का लिंक हाल ही में मृत हो गया है। :(
TZHX

@TZHX: चूंकि स्वीकृत उत्तर ट्यूटोरियल के लेखक द्वारा लिखा गया है, इसलिए हमें इसे फिर से खोजने की उम्मीद है। उनके जवाब के लिए मेरी अंतिम टिप्पणी देखें :)
आर्मेन त्सिरुयान

3
संदर्भित OpenGL ट्यूटोरियल यहां उपलब्ध है
फोंस

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

2
@ फ़ॉन फिर से लिंक की तरह लग रहा है, फिर से :(
nalzok

जवाबों:


350

अगर मुझे सही तरीके से समझ में आता है, प्रदर्शन-वार, Z का चिह्न और गहराई से परीक्षण करना, एक <तुलना> एक तुलना को बदलने के अलावा और कुछ नहीं है। इसलिए, अगर मैं सही ढंग से समझता हूं और लेखक झूठ नहीं बोल रहा है या चीजों को बना रहा है, तो कई खेलों के लिए एक महत्वपूर्ण अनुकूलन हुआ करता था।

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

हालाँकि, संदर्भ महत्वपूर्ण है। मैंने कभी नहीं कहा कि एक <तुलना तुलनात्मक रूप से तुलना में तेज थी। याद रखें: हम ग्राफिक्स हार्डवेयर गहराई परीक्षण के बारे में बात कर रहे हैं, न कि आपका सीपीयू। नहींoperator<

मैं जो उल्लेख कर रहा था वह एक विशिष्ट पुराना अनुकूलन था जहां एक फ्रेम आप GL_LESS[0, 0.5] की सीमा के साथ उपयोग करेंगे । अगले फ्रेम, आप के साथ प्रस्तुत करनाGL_GREATER [1.0, 0.5] की सीमा के साथ । आप आगे और पीछे जाते हैं, शाब्दिक रूप से "Z का संकेत और गहराई परीक्षण" हर फ्रेम को फ़्लिप करते हैं।

यह गहराई सटीकता का एक बिट खो देता है, लेकिन आपको गहराई बफर को साफ करने की आवश्यकता नहीं थी, जो कि एक बार एक धीमी गति से संचालन था। चूंकि गहराई समाशोधन इन दिनों न केवल मुक्त है, बल्कि वास्तव में इस तकनीक की तुलना में तेज है, लोग अब ऐसा नहीं करते हैं।


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

3
@ नाइकोलोलस: पर्ज़्ज़ोक्स की टिप्पणी, मेरे प्रश्न में आपके ट्यूटोरियल का लिंक मृत हो गया है। क्या आप कृपया हम सभी को बता सकते हैं कि ट्यूटोरियल कहां है और वैकल्पिक रूप से प्रश्न को संपादित करें, कृपया?
अर्मेन त्सिरुय्यान

2
ट्यूटोरियल वेब आर्काइव पर उपलब्ध हैं। यदि @NicolBolas अनुमति देता है, तो यह समुदाय के लिए उपयोगी होगा यदि हम उन्हें अधिक सुलभ स्थान पर स्थानांतरित कर सकते हैं। शायद गिटहब या कुछ और। web.archive.org/web/20150215073105/http://arcsynthesis.org/…
ApoorvaJ

3

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


0

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

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

ड्राइवर को यह मान लेना चाहिए कि पिछली सामग्री को संरक्षित किया जाना चाहिए। संरक्षण का मतलब है कि बिन को बाहरी मेमोरी में लिखना होगा और बाद में बिन फिर से संसाधित होने पर बाहरी मेमोरी से पुनर्स्थापित किया जाएगा। स्पष्ट ऑपरेशन ड्राइवर को बताता है कि बिन की सामग्री को अच्छी तरह से परिभाषित किया गया है: स्पष्ट रंग। यह एक ऐसी स्थिति है जो अनुकूलन के लिए तुच्छ है। बफर सामग्री को "त्याग" करने के लिए एक्सटेंशन भी हैं।


-8

यह उच्च ट्यून्ड असेंबली में ध्वज बिट्स के साथ करना है।

x86 में jl और jg दोनों निर्देश हैं, लेकिन अधिकांश RISC प्रोसेसर में केवल jl और jz (कोई jg) नहीं है।


2
अगर इसका जवाब है, तो यह नए सवाल उठाता है। क्या आरआईएससी के शुरुआती प्रोसेसरों पर "ब्रांच से" ली गई "ब्रांच को नजरअंदाज" किया गया था? यह निश्चित रूप से अब तक किसी भी औसत दर्जे का तरीका नहीं है, जहां तक ​​मुझे पता है। क्या आप forएक बिना शर्त शाखा के साथ लूप लिखना चाहते थे और सशर्त, शायद ही कभी शाखा को आगे निकलने के लिए लूप से बाहर निकाला जाए? अजीब लगता है।
पास्कल क्यूक सिप

54
-1: इस सवाल का सीपीयू से कोई लेना-देना नहीं है । GL_LESS और GL_GREATER गहन तुलना संचालन हैं, जो GPU पर चलते हैं।
निकोल बोलस

8
मजेदार है कि आप एक उत्तर के लिए कितना दोहरा सकते हैं जो शीर्षक के लिए सही है लेकिन वास्तविक प्रश्न के साथ बहुत कम है।
जोशुआ

7
+1 नहीं, यह उत्तर प्रश्न के कम से कम भाग के लिए सही है। सवाल यह है: "क्या लेखक चीजों को बना रहा है, क्या मैं कुछ गलत समझ रहा हूं, या क्या यह वास्तव में ऐसा मामला है कि एक बार <(जैसा कि लेखक कहता है)> की तुलना में धीमा था?"। तीन विकल्प दिए गए हैं। यह उत्तर विकल्प की संभावना पर जवाब दे रहा है। 3. लेख में कहीं भी सीपीयू / जीपीयू की तकनीक नहीं दी गई है, न ही यह जीपीयू (पहले 3 डी गेम जहां सीपीयू है) होना चाहिए। ठीक है ... मुझे नहीं लगता कि RISC पर कई 3 डी गेम थे :-)
xanatos

3
(और GPU टैग 20:34 में जोड़ा गया था। पहले संशोधन में केवल CPU टैग था। यह प्रतिक्रिया 18:44 पर लिखी गई थी)
xanatos
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.