2013-02-14 23 views
11

में इंटरलेव्ड विशेषता एरे का उपयोग करके प्रदर्शन लाभ मैं OpenGL4.X के साथ काम करता हूं। हाल ही में मैंने this ऐप्पल ओपनगलएस 2 दस्तावेज़ पढ़ा जहां यह कहा गया है कि इंटरलीव किए गए विशेषता एरे का उपयोग आईओएस मोबाइल उपकरणों पर प्रदर्शन में सुधार करता है और इसके बजाय अनुशंसित तरीका है गुणों के ब्लॉक का उपयोग कर)।OpenGL4.0

एक भी विशेषता सरणी में विशेषताओं के ब्लॉक::

float vertices[]{ 
//Triangle vertices: 

    v0x , v0y , v0z , 
    v1x , v1y , v1z , 
    v2x , v2y , v2z , 

    //Triangle UVs: 

    uv0s , uv0t , 
    uv1s , uv1t , 
    uv2s , uv2t , 

    //Triangle Normals: 
    n0x , n0y , n0z , 
    n1x , n1y , n1z , 
    n2x , n2y , n2z 

} 

इंटरलीव्ड विशेषता सरणी:

जो लोग समझ में नहीं आया मैं यहाँ क्या मतलब के लिए एक उदाहरण है

float vertices[]{ 


    v0x , v0y , v0z , 
    uv0s , uv0t ,   ////vertex 1 attributes 
    n0x , n0y , n0z , 

    v1x , v1y , v1z , 
    uv1s , uv1t ,   ///vertex 2 attributes 
    n1x , n1y , n1z , 

    v2x , v2y , v2z , 
    uv2s , uv2t ,   ///vertex 3 attributes 
    n2x , n2y , n2z 

} 

तो मेरे सवाल है: यह ओपन des पर चलने के लिए भी सच है ktop GPUs? यदि हां, तो प्रदर्शन लाभ सैद्धांतिक रूप से कितना बड़ा हो सकता है?

+0

संभावित डुप्लिकेट [इंटरलेव्ड वर्टेक्स सबमिशन प्रदर्शन में कैसे मदद करता है?] (Http://stackoverflow.com/questions/14535413/how-does-interleaved-vertex-submission-help-performance) – legends2k

उत्तर

6

क्या यह डेस्कटॉप जीपीयू पर चल रहे ओपनजीएल के लिए भी सच है?

Vertex specification wiki page से:

एक सामान्य नियम के रूप में, आप interleaved विशेषताओं का उपयोग जहाँ तक संभव हो जाना चाहिए। जाहिर है अगर आप निश्चित गुण और न दूसरों को बदलने की, तो जो कि उन एक अच्छा विचार नहीं है नहीं है कि के साथ बदल interleaving की जरूरत है।


कितना बड़ा प्रदर्शन लाभ सैद्धांतिक रूप से हो सकता है?

मैं वास्तव में है कि उत्तर नहीं दे सकता है, लेकिन मैं बहुत बड़ा सुधार की उम्मीद नहीं होता। मापने का एकमात्र निश्चित तरीका है।

+0

विकी रेफरी के लिए +1। मैं हमेशा इसके अस्तित्व को भूल जाता हूं! –

4

interleaved विशेषता सरणियों के लाभ स्मृति इलाके है। इसका मतलब है कि सभी आवश्यक वर्टेक्स डेटा एक-दूसरे के बगल में स्थित हैं और एकाधिक बफर में स्थित डेटा की तुलना में अधिक कुशलता से लाया जा सकता है।

बड़ाकई विशेषताओं के साथ कोने की संख्या के बाद प्रदर्शन में अंतर प्रकट हो सकता है। बड़ा और कई के मूल्यों की रूपरेखा द्वारा स्थापित किया जाना चाहिए।

+0

यही वह है जो मैंने पढ़ा लेकिन वास्तविकता में प्रदर्शन में यह कितना जोड़ता है? यह सवाल है। –

+0

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

+0

मुझे लगता है कि आप इसे उत्तर के रूप में कुछ व्यापक रूप से डाल सकते हैं :) –

4

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

कोई तरीका है अपने सवाल का जवाब देने की वजह से किसी भी प्रदर्शन लाभ पहले आप शिखर हस्तांतरण प्रदर्शन पर bottlenecked कर रहे हैं पर निर्भर करता है (यानी: यह है कि क्या अनुकूलित करता है)। जब तक आप वास्तव में बहुत मुश्किल है कि अपने शिखर शेडर, टुकड़ा शेडर, और सीपीयू मुद्दों बाधाओं नहीं हो जाते आपके ग्राफिक्स कार्ड दे रहे हैं, यह कोई फर्क नहीं होगा।

और यह जानने का कोई तरीका नहीं है कि यह कितना लाभ है, क्योंकि विभिन्न हार्डवेयर अलग-अलग प्रतिक्रिया देंगे। बाधाओं को कितना तंग करने के आधार पर अलग-अलग स्थितियों का जवाब अलग-अलग होगा।

बस अपनी विशेषताओं को अंतःस्थापित करें। यह आपको कुछ भी लागत नहीं देता है, न्यूनतम समय या प्रयास की आवश्यकता होती है, और गैर-मामूली मूल्य प्रदर्शन-वार हो सकती है।

+0

हां, मैं देखता हूं, लेकिन तथ्य यह है कि आप अभी भी डिफॉल्ट रूप से इंटरलीविंग का उपयोग करने का सुझाव देते हैं, इसका मतलब है कि ज्यादातर मामलों में यह सबसे अच्छा विकल्प है। –

1

मैं गलत हो सकता हूं, लेकिन मेरी धारणा यह है कि GPU को डेटा (कोर्सेस, मानदंड, और यूवी मानचित्र) की आवश्यकता होती है जब प्रतिपादन त्रिकोण के कशेरुक कहता है और यदि चरम, मानक और यूवीमैप्स के लिए बफर बड़ा है एक वस्तु उदाहरण के लिए एक बड़ा क्षेत्र (glvertex gl glhere के साथ प्रस्तुत) ...

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

बस पर संचार प्रोसेसर की गति से आमतौर पर धीमा है।

अब, इस मामले में इंटरलीव किए गए सरणी एक महान लाभ हैं और बस संचार को कम करते हैं और जीपीयू आसानी से इंटरलीव किए गए सरणी को संसाधित कर सकता है और सभी डेटा को कणों के कण सेट के लिए उपलब्ध कराया जाएगा।