आधुनिक GPU पर शीर्ष डेटा को व्यवस्थित करने के लिए सबसे अच्छा तरीका है


9

मैं एक मॉडल कोने से बना है, के साथ प्रत्येक है कहो position, normal, tangent, और texcoordगुण, जहां त्रिकोण सूचकांक ट्रिपल द्वारा निर्दिष्ट कर रहे हैं।

यदि हम केवल शीर्ष विशेषता पर ध्यान केंद्रित करते हैं, तो मुझे दो व्यापक रणनीतियों के बारे में पता है: सरणियों की संरचना, और संरचनाओं की सरणी। मैंने यह भी सुना है कि संरचनाओं की सरणी को प्राथमिकता दी जाती है क्योंकि यह किसी दिए गए शीर्ष के लिए विशेषताओं के मेमोरी इलाके (और इसलिए कैश इलाके) को बढ़ाता है।

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

इसके अलावा, यह मेरी समझ है कि आधुनिक जीपीयू कई प्रकार के संरचनाओं के वैक्टर की तुलना में एक ही प्रकार के लंबे वैक्टर को खोलना बेहतर हो सकता है। क्या यह तब संरचना-ए-सरणियों के लेआउट के लिए संभव होगा, जो समान क्रम डेटा के एक सरणी-ऑफ-स्ट्रक्चर संरचनाओं को लगातार आउटपरफॉर्म करता है, यदि इंडेक्स ऑर्डर अनुकूलित है?


4
क्या आप इसे आसानी से आज़मा नहीं सकते और देख सकते हैं कि आपके मामले में सबसे तेज़ कौन है?
user1118321

मैंने अनुक्रमित मेषों के लिए सोचा होगा कि सरणी-ऑफ-स्ट्रक्चर अधिक कुशल होंगे क्योंकि वर्टियर शेडर को सभी शीर्ष विशेषताओं को खिलाया जाएगा, इसलिए उन्हें स्मृति में एक साथ समूहीकृत किया जाना कैश फ्रेंडली होना होगा।
पॉल एचएच

संरचना में डेटा प्रकारों के आधार पर, vec4s और फ़्लोट्स एक साथ अच्छी तरह से पैक होते हैं, अन्य प्रकार इतने अच्छे नहीं हैं
पॉल एचडी

2
@ user1118321 जबकि व्यक्तिगत बेंचमार्किंग प्रयोग एक सराहनीय अभ्यास है, लेकिन निश्चित रूप से व्यापक सैद्धांतिक चर्चा में अधिक लंबी अवधि का मूल्य है और संभवत: हार्डवेयर काम करता है के आधार पर सामान्य प्रथाओं की स्थापना कैसे हुई।
क्रिश्चियन राऊ

जवाबों:


2

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

डेटा की मेमोरी लोकल निश्चित रूप से एक प्रमुख भूमिका निभाती है। लेकिन कुछ अन्य आइटम हैं जो इस में खेलते हैं, जैसा कि आप जानते हैं कि डेटा की चौड़ाई। मेरे पास कुछ GPU हैं और कुछ निश्चित टिपिंग बिंदुओं के आधार पर कुछ स्टार्क प्रदर्शन को प्रभावित किया है। उदाहरण के लिए, मेरे पुराने AMD r290 पर अगर मुझे याद है, तो आप मूल रूप से 4 फ़्लोट 4s को पास कर सकते हैं। 1 से अधिक अतिरिक्त लागत के साथ वर्टेक्स बफर के माध्यम से, लेकिन जब मैंने> 4 पोस्ट किया तो एक औसत दर्जे की गिरावट थी (फ्रेम में) मूल्यांकन करें)। यह पूरी तरह से मेरी याद दिलाता है और इसलिए यह सबसे अच्छा है। लेकिन यह माना जाता है कि GPU वास्तुकला हर समय बदल रहा है, और कौन सी आला तकनीकें जो आज आपको एक प्रदर्शन बढ़त देती हैं, शायद कल आपके प्रदर्शन का प्रतिबंध। मैं'

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

मैं अपने आप से सारांश में कह सकता हूं:

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

ये मेरे द्वारा किए गए कुछ विचार और अनुभव हैं। वहाँ बहुत सारी किताबें हैं जो आपको अपने हाथों को इन बहुत विषयों पर प्राप्त करनी चाहिए। मैंने कई लोगों को यह नहीं बताया कि आप क्या प्रस्तावित कर रहे हैं, लेकिन इसका मतलब यह नहीं है कि यह गलत है। सौभाग्य।


1

यह लक्ष्य हार्डवेयर और आपके द्वारा उपयोग किए जा रहे एपीआई पर निर्भर हो सकता है। क्या आप अधिक जानकारी प्रदान कर सकते हैं? ओपनगेल के लिए यहां कुछ (बहुत व्यापक और सामान्य) सर्वोत्तम प्रथाएं हैं। https://www.khronos.org/opengl/wiki/Vertex_Specification_Best_Practices

इसके अलावा, क्या आपको प्रदर्शन की समस्या है? या आप सिर्फ उत्सुक हैं।

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