GPU शेड्स पर वैरिएबल-लेंथ लूप्स का प्रभाव


9

डेमोस्कोप में जीपीयू के अंदर प्रक्रियात्मक सामग्री को रेंडर करने के लिए लोकप्रिय है (स्क्रीन को भरने के लिए एक एकल क्वाड ड्राइंग और जीपीयू को पिक्सल की गणना करने देता है)।

रे मार्चिंग लोकप्रिय है:

यहाँ छवि विवरण दर्ज करें

इसका मतलब है कि GPU प्रति पिक्सेल कुछ अज्ञात संख्या में लूप पुनरावृत्तियों को निष्पादित कर रहा है (हालांकि आपके पास एक ऊपरी बाध्य हो सकता है maxIterations)।

चर-लंबाई लूप होने से shader प्रदर्शन कैसे प्रभावित होता है?

सरल रे-मार्चिंग प्यूसीकोड की कल्पना करें:

t = 0.f;
while(t < maxDist) {
    p = rayStart + rayDir * t;
    d = DistanceFunc(p);
    t += d;
    if(d < epsilon) {
       ... emit p
       return;
    }
}

विभिन्न मुख्यधारा के GPU परिवार (Nvidia, ATI, PowerVR, Mali, Intel, आदि) कैसे प्रभावित हैं? वर्टेक्स शेड्स, लेकिन विशेष रूप से टुकड़े शेड्स?

इसे कैसे अनुकूलित किया जा सकता है?


दुर्भाग्य से, इस प्रश्न का उत्तर यहां ठीक से दिया जाना बहुत कठिन है। यद्यपि एक उत्तर पहले से ही पढ़ने लायक ऐसे स्रोत को इंगित करता है (जिसमें गतिशील शाखाएं शामिल हैं)। "विषय" के लिए +1 ..
टेओड्रन

1
@teodron पराजित नहीं हो सकता! मैं उम्मीद कर रहा था कि कोई कहेगा कि 8x8 ब्लॉक्स में NVidia कार्ड स्क्रीन पिक्सल्स पर सभी पुनरावृति उतनी ही गहरी होगी जितनी गहरी जरूरत है, और 8x8 पिक्सल्स के ब्लॉक किसी भी क्रम में किए जा सकते हैं, या ऐसा कुछ; यह सच नहीं है, यह सिर्फ एक तरह का ज्ञान है जो मैं उम्मीद कर रहा हूं कि लोग साझा कर पाएंगे। लार्बी पर लिंक, हम्म, बहुत अप्रत्यक्ष हैं।
विल

ऐसा नहीं लगता है कि वह लार्बी की चर्चा कर रहा है, लेकिन स्टैनफोर्ड के आदमी ने दो साल बाद एक ही बात की, 2010 में ( आप यहां देख सकते हैं )। उनके आंकड़ों से, थोड़ी देर के पाश पर विचार करने पर, मुझे समझ में नहीं आया कि क्या पिक्सल अपनी गणना को जल्द ही समाप्त करते हैं, किसी भी प्रदर्शन के लिए। क्यूडा में, धागे एक बाधा पर इंतजार करते हैं। सादृश्य में, शेडर थ्रेड्स के साथ क्या होता है?
त्योदन

@teodron हाँ, मैंने CUDA की अपनी समझ ली है और GPU पर लागू किया है; मुझे यकीन है कि वे लॉकस्टेप में हैं, लेकिन मैं चाहूंगा कि कोई जानकार इसमें झंकार करे; वैसे भी, यहाँ के कुछ संबंधित williamedwardscoder.tumblr.com/post/26628848007/rod-marching
विल

जवाबों:


8

GPU दूरी क्षेत्र किरण-मार्चिंग (और अन्य विषयों) पर GDC 2012 में एक अच्छी बात हुई: http://directtovideo.wordpress.com/2012/03/15/get-my-slides-from-gdc2012/

जहां तक ​​प्रदर्शन जाता है, नवीनतम (DX11-class) ग्राफिक्स कार्ड SIMD इकाइयों पर शेड्स निष्पादित करते हैं जो लॉकस्टेप में 32 (NVIDIA) या 64 (एएमडी) "थ्रेड्स" चलाते हैं। इन समूहों को विभिन्न प्रकार से युद्ध या वेवफ्रंट के रूप में जाना जाता है। पिक्सेल शेड्स के लिए, प्रत्येक थ्रेड एक पिक्सेल के बराबर होता है, इसलिए मुझे उम्मीद है कि SIMD इकाई पिक्सल के 8x4 (NVIDIA) या 8x8 (AMD) ब्लॉक की तरह कुछ प्रसंस्करण कर रही है। ब्रांचिंग और फ्लो कंट्रोल प्रति-वेवफ्रंट में किया जाता है, इसलिए एक वेवफ्रंट में सभी थ्रेड्स को उस वेवफ्रंट के भीतर सबसे गहरे अलग-अलग पिक्सल के रूप में कई बार लूप करना पड़ता है। SIMD लेन मास्क उन पिक्सेल के लिए निष्पादन को बंद कर देंगे जो पहले ही समाप्त हो चुके हैं, लेकिन उन्हें अभी भी चुपचाप समग्र तरंग प्रवाह नियंत्रण के साथ जाना है। इसका मतलब है, निश्चित रूप से, कि ब्रांचिंग सुसंगत होने पर सिस्टम अधिक कुशल है,

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



0

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


-4

int s = 0;

अब (int k = 1; k <= n; k ++) {s + = k;} समान है जैसे s = n * (n + 1) / 2

तो यह सामान्य रूप से सही नहीं है: डी


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