2010-02-25 11 views
8

पिक्स का उपयोग करके मेरे ऐप को प्रोफाइल करते समय, मैंने देखा कि GPU गुजर रहा है (DX10 मोड में) अधिकांश समय संसाधन उपलब्ध नहीं होने के लिए निष्क्रिय प्रतीक्षा में है।संसाधन अवधारणा

1) एप्लिकेशन GPU सीमित है:

कुछ नोट (और सीपीयू फ्रेम एक्स संसाधित कर रहा है अगर, GPU भी इस समस्या के लिए फ्रेम एक्स संसाधित कर रहा है) सीपीयू (उदाहरण के लिए के साथ पंक्ति में हमेशा होता है) (सीपीयू सबसे भारी दृश्य में मूल रूप से निष्क्रिय (CPU उपयोग का 20% है))

मेरे प्रश्न हैं:

1) मैं इन परिणामों की व्याख्या करना है? पिक्स में जीपीयू पक्ष पर हर फ्रेम में मुझे 2-3 छोटी लाल बार दिखाई देती है (जहां तक ​​मुझे पता है कि संसाधन अनुपलब्ध है) और उनके बाद एक मध्यम/बड़ा ग्रे बार (जिसका मतलब है GPU निष्क्रिय)। दूसरी तरफ सीपीयू में कुछ ऑपरेशन हैं, एक बड़ी खाली पट्टी और फिर कुछ अन्य ऑपरेशंस (कुछ इंतजार कर रहे हैं?)

एक और नोट, जब GPU निष्क्रिय होता है तो आमतौर पर सीपीयू काम कर रहा है। (इसके विपरीत स्पष्ट रूप से मान्य नहीं है)

2) संसाधन कौन से कॉल अनुपलब्ध हो सकता है?

डिस्कार्ड के साथ एक एमएपी को अवरुद्ध कॉल माना जाता है?
किसी ऑब्जेक्ट का डीईएससी प्राप्त करने के लिए एक प्रश्न?
एक शेडर प्रभाव साझा करना एक विवाद माना जाता है?
अन्य क्या?

मेरी सामान्य फ्रेम है:

41 DrawPrimitives/DrawIndexedPrimitives (सबसे वस्तु instanced कर रहे हैं) पिक्सेल शेडर का छोड़ें
9 परिवर्तन/शिखर शेडर
1 setrendertarget

साथ एक शीर्ष बफर पर
7/8 ताले

धन्यवाद!

पीएस pix का स्क्रीनशॉट

http://img191.imageshack.us/img191/6800/42594100.jpg

अगर मैं एक एकल ड्रा कॉल (समान GPU भार के साथ (उदाहरण के लिए एक्स कणों या एक instanced वस्तु) के साथ एक कण इंजन) पूर्ण खेल के बजाय का उपयोग मैं एक पूर्ण नीला मिल बार और जीपीयू सीपीयू के पीछे सही ढंग से 2-3 फ्रेम ...

संपादित करें: मैं प्रभाव फ्रेमवर्क पर अधिक से अधिक ध्यान केंद्रित कर रहा हूं जो शायद इस समस्या का कारण है। मैं उन्हें बनाने के लिए स्मृति और समय बचाने के लिए अधिक वस्तुओं के बीच एक प्रभाव साझा करता हूं। क्या यह विवाद के बिना मानना ​​सुरक्षित है?

+0

हम, चल रहे पिक्स, क्या आप अलग-अलग कॉल को फ्लश करने के लिए अलग नहीं कर सकते हैं? – Bahbar

उत्तर

1

क्या उपलब्ध कराई गई जानकारी के साथ मन में आता है:

  • आप vsync के साथ डबल बफरिंग का उपयोग करें? शायद वे दोनों बैकबफर उपलब्ध होने की प्रतीक्षा कर रहे हैं। ट्रिपल बफरिंग या तत्काल प्रस्तुति का प्रयास करें।
  • क्या आपने अपना कशेरुक बफर लॉक करने की बजाय 8 बार डिस्कार्ड की बजाय एक नॉवरवाइट सर्कुलर रणनीति के साथ लॉक करने का प्रयास किया है? हो सकता है कि GPU के लिए आपके विवाद के लिए एक नया बफर पुन: आवंटित करने के लिए बहुत अधिक स्मृति दबाव हो। साथ ही, कुछ हार्डवेयर एक ही वर्टेक्स बफर को और अधिक छोड़ने की अनुमति नहीं देते हैं, इससे पहले कि यह इसकी सामग्री को प्रस्तुत करने से पहले X बार हो।
  • चूंकि आप एक ही प्रभाव साझा कर रहे हैं, क्या पैरामीटर भी साझा किए गए हैं?
+0

1) सभी प्रकार, तत्काल/डबल/ट्रिपल बफरिंग का प्रयास किया। कोई बदलाव नहीं 2) मैं अधिकतम फ्रेम पर एक बार एक बफर को छोड़ देता हूं। (8 बफर हैं) 3) एमएचएन .... नहीं, पैरामीटर अलग हैं क्योंकि वे अलग लॉजिकल क्लास हैं। – feal87

संबंधित मुद्दे