आधुनिक (जीएल 3.3 +) जीपीयू पर जीएलएसएल का उपयोग करते समय, वर्दी पर ब्रांचिंग की संभावित लागत क्या होती है?आधुनिक जीपीयू पर वर्दी पर ब्रांचिंग की लागत
मेरे इंजन में मैं उस बिंदु पर जा रहा हूं जहां मेरे पास बहुत सारे शेडर्स हैं। और मेरे पास बहुत से लोगों के लिए कई अलग-अलग गुणवत्ता प्रीसेट हैं। जैसा कि यह खड़ा है, मैं अलग-अलग गुणवत्ता प्रीसेट चुनने के लिए शेडर्स में अगर() के साथ वर्दी का उपयोग कर रहा हूं। हालांकि मैं चिंतित हूं कि मैं शेडर्स को पुनः संयोजित करके और #ifdef का उपयोग करके बेहतर प्रदर्शन प्राप्त कर सकता हूं। जब मैं एक शेडर को दोबारा जोड़ता हूं तो उस समस्या को अन्य वर्दी को ट्रैक करने और रीसेट करने की चिंता करने की आवश्यकता होती है।
असल में जो मैं जानना चाहता हूं वह यह है कि यदि मेरे डर निराधार हैं। आधुनिक जीपीयू पर एक समान सस्ते पर शाखा है? मैंने कुछ परीक्षण किए हैं और मुझे बहुत कम अंतर मिला है, लेकिन मैंने केवल एनवीडिया 680 पर परीक्षण किया है।
चालक इनलाइन वर्दी के साथ शेडर को फिर से कंपाइल करने के लिए स्वतंत्र है अगर यह देखता है कि अन्यथा ब्रांचिंग की लागत बहुत अच्छी होगी। –
थ्रेड विचलन, जहां एक शेडर के समानांतर आमंत्रण अलग-अलग नियंत्रण पथ लेते हैं, आधुनिक जीपीयू में एक प्रमुख मुद्दा है। एक कार्यक्रम में सभी आमंत्रणों पर वर्दी लागू होती है, हालांकि, यह कोई मुद्दा नहीं है। कशेरुक गुणों पर शाखाओं से बचने या अन्यथा गतिशील डेटा आपके समय का बेहतर उपयोग है। –
ठीक है, इसलिए व्यावहारिक रूप से, यह एक आधुनिक जीपीयू पर स्थिरता के साथ पुन: संकलन करने की तुलना में धीमी गति से होने की संभावना नहीं है, या तो क्योंकि सीपीयू पर शाखाएं अलग-अलग होती हैं, या क्योंकि संकलक स्वचालित रूप से शेडर को फिर से संकलित कर देगा। क्या मैं सही ढंग से समझता हूं? – Jagoly