GPU में गहराई से बफर कैसे काम करता है?


10

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

जवाबों:


9

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


11

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

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

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

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.