2011-12-21 11 views
6

मैं वर्तमान में एसडीएल के साथ एक परियोजना विकसित कर रहा हूं। यह मूल रूप से स्क्रीन पर छवियों (सतहों) खींचता है और चलता है।मेमोरी ब्लॉक (या एक एसडीएल सतह) को साफ़ करने का सबसे तेज़ तरीका कौन सा है?

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

जबकि पिछले समाधान छोटी सतहों के लिए ठीक काम करते हैं, तो वे तेजी से धीमे हो जाते हैं क्योंकि सतह बड़ी हो जाती है, इसलिए मैं एक सबसे तेज़ तरीका ढूंढ रहा था जिसे मैं एक स्मृति ब्लॉक (शून्य) साफ़ कर सकता था।

इसके अलावा, एक दोस्त ने इंगित किया कि सिम निर्देशों का उपयोग करना वास्तव में काम कर सकता है लेकिन आखिरी बार मैंने एएसएम 8085 पर किया था, इस पर कोई अंतर्दृष्टि भी उपयोगी हो सकती है।

उत्तर

13

सबसे तेज़ तरीका memset का उपयोग करना है।

memset(ptr, 0, length); 

यह स्वचालित रूप से आर्किटेक्चर कि यह * समर्थन पर SIMD उपयोग करता है। आप इसे हरा नहीं जा रहे हैं। यह पहले से ही मेमोरी बाध्य है, इसलिए यह ज़ीरो लिख रहा है जितना तेज़ प्रोसेसर उन्हें थूक सकता है। मुझे नहीं पता कि किसने आपको बताया कि memset बड़े ब्लॉक के लिए धीमा है, लेकिन आपको उस व्यक्ति को सुनना बंद कर देना चाहिए।

* कुछ टूलचेन हैं जो आपको तेजी से memset नहीं देते हैं। यह असंभव है कि आप एक का उपयोग कर रहे हैं।

+1

<यह नहीं पता कि कौन आपको बताता है कि बड़े ब्लॉक के लिए मेमसेट धीमा है, लेकिन आपको उस व्यक्ति को सुनना बंद करना चाहिए।> असल में, यह केवल एसडीएल कार्यों पर लागू होता है, पूरी तरह से स्मृति की जांच नहीं करता है। <* कुछ टूलचेन हैं जो आपको तेज़ मेमसेट नहीं देते हैं> कुछ पीआईसी एमसीयू टूलचेन्स, उदाहरण के लिए (स्पष्ट रूप से मामला नहीं) – NeonMan

+0

ठीक है, एक पीआईसी माइक्रोकंट्रोलर पर एसडीएल चलाने के लिए थोड़ा अजीब बात है, आखिरकार, और पीआईसी में सिम नहीं है। –

+0

वाईएमएमवी। मेरा अनुभव यह है कि स्मृति आमतौर पर बहुत धीमी होती है। मैंने केवल बाइट सेट के लिए स्रोत पर देखा है। मुझे अपनी सफलता लिखने में बड़ी सफलता मिली है (बड़े क्षेत्रों के लिए) मध्यम वर्गों के लिए बड़े लिखने का उपयोग करें (केवल छोर पर छोटे लिखने का उपयोग नीसमी के रूप में करें)। –

3

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