क्या एक स्थिर स्थिति स्विचिंग की तुलना में अधिक महंगा है?


14

सामान्य तौर पर, शेड्स में ब्रांचिंग एक अच्छा विचार नहीं है। लेकिन अब मेरे पास एक शर्त है कि पूरे ड्रा कॉल के संबंध में एक शर्त है। तो जिस शाखा को निष्पादित किया जाता है वह हमेशा एक ड्रॉ कॉल के लिए समान होती है।

क्या इस तरह की शाखाओं में बँटना अभी भी इन शाखाओं के बिना कई शेड बनाने और उनके बीच स्विच करने से अधिक महंगा है?



जैसा कि मेरे प्रश्न पर उत्तर बताता है, टुकड़े "वार" या "वेवफ्रोंट्स" में वर्गीकृत हो जाते हैं और यदि ऐसे समूह के सभी टुकड़े एक ही शाखा का उपयोग करते हैं, तो केवल उस शाखा को निष्पादित किया जाता है।
मार्टिन एंडर

लेकिन टुकड़े से भिन्न के बारे में क्या?
nikitablack


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

जवाबों:


13

आधुनिक हार्डवेयर पर यदि किसी समूह में सभी चालान एक ही पथ का अनुसरण करते हैं तो अप्रयुक्त पथ का मूल्यांकन नहीं किया जाता है।

छद्म कोड में:

if(cond){
   res = ...
}else{
   res = ...
}

हो जाता है

if(anyInvocationARB(cond)){
    res1 = ...
}
if(anyInvocationARB(!cond)){
    res2 = ...
}
res = cond?res1:res2;

कहाँ anyInvocationARBअगर शेडर के किसी भी मंगलाचरण के रूप में सही होगा सच हो जाएगा cond(ओपन विस्तार से ARB_shader_group_vote )।

यदि कंडोम अकेले वर्दी से व्युत्पन्न है, तो ड्राइवर रेंडर शुरू करने से पहले स्थिति का अनुकूलन और मूल्यांकन कर सकता है और अगर गोटो को सही शाखा में बदल सकता है। OpenGL में एक समान सबरूटीन्स नामक एक सुविधा है जो इसे स्पष्ट करती है।


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