मैं किसी विशेष लूप को अनलॉक करने के लिए जीसीसी को कैसे बता सकता हूं? मैंने सीयूडीए एसडीके का उपयोग किया है जहां लूप को #pragma unroll
का उपयोग करके मैन्युअल रूप से अनलॉक किया जा सकता है। क्या जीसीसी के लिए एक समान सुविधा है? मैं थोड़ी गड़बड़ कर गया लेकिन कुछ भी नहीं मिला।विशेष रूप से लूप को अनलोल करने के लिए जीसीसी को बताएं
उत्तर
जीसीसी इस से निपटने में कुछ भिन्न तरीकों से आप देता है: के रूप में देखा,
उपयोग #pragma निर्देशों,
#pragma GCC optimize ("string"...)
की तरह GCC docs में। ध्यान दें कि प्रगति शेष कार्यों के लिए अनुकूलन वैश्विक बनाता है। जीसीसी के गुण वाक्य रचना साथ#pragma GCC push_options #pragma GCC optimize ("unroll-loops") //add 5 to each element of the int array. void add5(int a[20]) { int i = 19; for(; i > 0; i--) { a[i] += 5; } } #pragma GCC pop_options
एन्नोटेट व्यक्तिगत कार्यों:: यदि आप
#pragma push_options
औरpop_options
मैक्रो चतुराई से इस्तेमाल किया है, तो आप शायद यह चारों ओर तो जैसे सिर्फ एक समारोह निर्धारित कर सकते हैं पर एक अधिक विस्तृत शोध प्रबंध के लिए GCC function attribute डॉक्स की जाँच विषय। एक उदाहरण://add 5 to each element of the int array. __attribute__((optimize("unroll-loops"))) void add5(int a[20]) { int i = 19; for(; i > 0; i--) { a[i] += 5; } }
नोट: मुझे यकीन है कि कितना अच्छा जीसीसी unrolling रिवर्स दोहराया छोरों (मैं इसे Markdown मेरी कोड के साथ अच्छा खेलने के लिए प्राप्त करने के लिए किया था) पर है नहीं कर रहा हूँ। उदाहरणों को ठीक संकलित करना चाहिए, यद्यपि।
बहुत अच्छा है कि इसके लिए एक फ़ंक्शन विशेषता है, हालांकि इसे आईओएस के लिए ऐप्पल के नवीनतम जीसीसी द्वारा अनदेखा किया गया है: "चेतावनी: 'अनुकूलन' विशेषता निर्देश अनदेखा किया गया"। (मुझे पता है कि वे एलएलवीएम में परिवर्तित हो गए हैं लेकिन मैं अभी भी कभी-कभी जीसीसी का उपयोग कर रहा हूं, क्योंकि कभी-कभी तेज़ कोड उत्पन्न होता है।) कोई भी जानता है कि इसे क्यों नजरअंदाज किया जाता है? क्या ऐप्पल की जीसीसी शाखा बहुत पुरानी है? एक तरफ ध्यान दें, जिस फ़ंक्शन पर मैं इसका उपयोग कर रहा हूं, वैसे भी जब तक मैं -O3 का उपयोग करता हूं तब तक लूप अनलॉक हो जाते हैं। – Simplex
मैंने अभी '__attribute __ ((ऑप्टिमाइज़ (" अनलोल-लूप ") को आजमाया है)) कुछ एम्बेडेड कोड के साथ और यह केवल 3% की गति में सुधार हुआ। मैन्युअल रूप से 8 गुना सुधार की गति 12% बढ़ी है और कार्यक्रम के आकार में उतना ही वृद्धि नहीं हुई है। – endolith
मेरा जीसीसी चेतावनी देता है: #pragma अनुकूलन को अनदेखा कर रहा है ... क्या यह हमेशा उपलब्ध है? – neodelphi
-funroll-loops
उपयोगी हो सकता है (हालांकि यह वैश्विक स्तर पर लूप-अनोलिंग चालू करता है, प्रति-लूप नहीं)। मुझे यकीन है कि एक #pragma
लगा सकते हैं कि ऐसा ही करने के लिए नहीं कर रहा हूँ ...
- 1. विशेष रूप से एक विशिष्ट मॉड्यूल के लिए जीसीसी झंडे (CXXFLAGS) निर्दिष्ट करने के लिए कैसे?
- 2. किसी विशेष अंतराल के लिए जावास्क्रिप्ट लूप को कैसे रोकें?
- 3. क्या थॉमस को विशेष रूप से टॉमकैट द्वारा बंद करने के लिए विशेष डिज़ाइन होना चाहिए?
- 4. एक संपत्ति को अनदेखा करने के लिए RavenDB को बताएं
- 5. जेएसपी के लिए विशेष रूप से
- 6. एलडी को बताएं कि पर्यावरण चर के माध्यम से निर्देशिकाओं को देखने के लिए
- 7. लूप अपरिवर्तनशीलताओं (विशेष रूप से "त्वरित सी ++" की Ch.3)
- 8. कोमेक को चुप रहने के लिए बताएं
- 9. किसी विशेष जीसीसी कंपाइलर
- 10. समय HashMap.put के कारण के बारे में बताएं() अनंत लूप
- 11. विशेष रूप से प्रोग्रामर
- 12. क्या मुझे नवीनतम जीसीसी संस्करण (सामान्य रूप से और विशेष रूप से आज)
- 13. क्या ऑटोमैपर अस्थायी रूप से विशेष मैपिंग को निलंबित करने के लिए "राजी" हो सकता है?
- 14. सी ++ में स्मृति आवंटन को ट्रैक करने के लिए कैसे करें (विशेष रूप से नया/हटाएं)
- 15. विशेष तरीकों को कॉल करने से .NET कोड को रोकें?
- 16. exec() विशेष रूप से
- 17. एनीमेशन अनुक्रम के दौरान क्लिक को अनदेखा करने के लिए jQuery को बताएं
- 18. किसी विशेष निर्देशिका में अस्थायी फ़ाइलों को आउटपुट करने के लिए जीसीसी/क्लैंग को कैसे निर्देशित करें
- 19. जीसीसी आउटपुट को स्टडआउट करने के लिए कैसे करें?
- 20. लूप को साफ़ करने के लिए गोटो का उपयोग
- 21. सी फॉर-लूप बॉडी डब्ल्यू/जीसीसी को संरेखित कैसे करें?
- 22. विशेष रूप से register_shutdown_function के लिए कॉल करने योग्य विधि के लिए तर्क कैसे पास करें?
- 23. चर के एलएलवीएम अनुकूलक सामग्री को बताएं
- 24. विशेष रूप से WHERE मानदंडों को अनदेखा करें
- 25. पर्यावरण चर को पुनः लोड करने के लिए ग्रहण को बताएं
- 26. एक Django कस्टम प्रबंधन कमांड को विशेष रूप से
- 27. क्रैकिंग के खिलाफ सुरक्षा - विशेष रूप से प्रोग्राम को बनाने के लिए कठिन तरीके
- 28. एक अनुवाद इकाई के केवल हिस्से के लिए जीसीसी चेतावनियों को चुनिंदा रूप से अक्षम करें?
- 29. सीएक्स-फ्रीज विशेष रूप से
- 30. लूप कम करने के लिए बेहतर है?
मुझे विश्वास नहीं है कि मैं यह कहने जा रहा हूं। यदि आपको कुछ और नहीं मिला है तो हमेशा ... डफ की डिवाइस है। अब, मैंने * क्या * मैंने उस अपराधी के लश को रखा था? मैं इसे यहाँ कहीं से जानता हूं ... – dmckee
हे क्या आप मैक्रोज़ का उपयोग कर ऐसा कर सकते हैं? शायद नहीं, तो बस इसे लिखना ही एकमात्र चीज बाकी है? – Nils
सभी गंभीरता में, मैं सुझाव देता हूं कि डफ के डिवाइस का उपयोग करने से पहले '-फनोल-लूप' के साथ उस बिट के अलग संकलन को देखने का सुझाव दें: यह अध्ययन करने के लिए एक सुंदर बात है, लेकिन आपके कोड में एक बदसूरत चीज है। – dmckee