मुझे आईफोन के बारे में पता नहीं है लेकिन एक कंबल बयान है कि अंगूठे एआरएम की तुलना में धीमी है बिल्कुल सही नहीं है। 32 बिट चौड़े शून्य प्रतीक्षा राज्य स्मृति को देखते हुए, अंगूठे थोड़ा धीमा होगा, संख्या 5% या 10% की तरह होगी। अब अगर यह थंब 2 है, तो यह एक अलग कहानी है, ऐसा कहा जाता है कि अंगूठे 2 तेजी से दौड़ सकता है, मुझे नहीं पता कि आईफोन का क्या अनुमान है कि यह अंगूठे 2 नहीं है।
यदि आप शून्य-प्रतीक्षा-स्थिति 32 बिट मेमोरी से बाहर नहीं हैं तो आपके परिणाम अलग-अलग होंगे। एक बड़ी बात 32 बिट चौड़ी मेमोरी है। यदि आप गेमबॉय एडवांस परिवार की तरह 16 बिट चौड़ी बस पर चल रहे हैं, और उस मेमोरी या रोम पर कुछ प्रतीक्षा राज्य हैं, तो थंब आसानी से प्रदर्शन के लिए एआरएम चला सकता है, भले ही यह एक ही कार्य करने के लिए अधिक अंगूठे निर्देश लेता है।
अपने कोड का परीक्षण करें! ऐसी परीक्षा का आविष्कार करना मुश्किल नहीं है जो आपके द्वारा रुचि रखने वाले नतीजे प्रदान करता हो या नहीं। बांह को दूर करने के लिए यह उतना आसान है जितना अंगूठे दूर हाथ से उड़ाता है। कौन खरोंच करता है परवाह करता है, यह कितना तेज़ है कि यह आज आपके कोड को कितना तेज़ करता है।
एआरएम के लिए परीक्षण कोड प्रदर्शन में वर्षों से जो मैंने पाया है वह यह है कि आपका कोड और आपका कंपाइलर बड़ा कारक है। तो थंब सिद्धांत में कुछ प्रतिशत धीमा है क्योंकि यह एक ही कार्य को छूने के लिए कुछ प्रतिशत अधिक निर्देशों का उपयोग करता है। लेकिन क्या आप जानते थे कि आपका पसंदीदा कंपाइलर भयानक हो सकता है और बस कंपाइलर्स स्विच करके आप कई गुना तेजी से चल सकते हैं (जीसीसी उस श्रेणी में गिरती है)? या एक ही कंपाइलर का उपयोग और अनुकूलन विकल्पों को मिलाकर। किसी भी तरह से आप उपकरण का उपयोग करने के बारे में स्मार्ट होने के द्वारा हाथ/अंगूठे अंतर को छाया कर सकते हैं। आपको शायद यह पता चलेगा लेकिन आपको यह जानकर आश्चर्य होगा कि कितने लोग सोचते हैं कि कोड को संकलित करने का तरीका एकमात्र तरीका है और बेहतर प्रदर्शन पाने का एकमात्र तरीका समस्या पर अधिक स्मृति या अन्य हार्डवेयर फेंकना है।
यदि आप आईफोन पर हैं तो मुझे लगता है कि वो लोग एलएलवीएम का उपयोग कर रहे हैं?मुझे कई तरीकों से एलएलवीएम अवधारणा पसंद है और जब मैं परिपक्व हो जाता हूं तो इसे अपने दैनिक ड्राइवर के रूप में उपयोग करने के लिए उत्सुक हूं, लेकिन यह उस विशेष उत्पाद के लिए 10-20% (या बहुत अधिक) धीमा कोड उत्पन्न करने के लिए पाया गया था जो मैं कर रहा था। मैं बांह मोड में था, मैंने अंगूठे मोड की कोशिश नहीं की, और मेरे पास एक एल 1 और एल 2 कैश था। अगर मैंने वास्तव में अंगूठे की अंगूठी की तुलना करने के लिए कैश के बिना परीक्षण किया था, तो शायद मैं कुछ प्रतिशत धीमी गति से अंगूठे को देखता हूं, लेकिन यदि आप इसके बारे में सोचते हैं (जिसे मैं उस समय में रूचि नहीं रखता) तो आप हाथ कोड से दो गुना कोड को कैश कर सकते हैं शायद यह इंगित करें कि कार्य के लिए कुल मिलाकर कुछ प्रतिशत अधिक कोड है, इसके अलावा इसमें काफी अधिक कैशिंग करके औसत औसत समय थंब कम करना काफी तेज़ हो सकता है। मुझे कोशिश करनी पड़ सकती है।
यदि आप llvm का उपयोग कर रहे हैं, तो आपको अनुकूलन करने के लिए कई स्थानों की दूसरी समस्या है। सी से बाइटकोड में जाकर आप ऑप्टिमाइज़ कर सकते हैं, फिर आप बाइटकोड को अनुकूलित कर सकते हैं, फिर आप अपने सभी बाइटकोड को मर्ज कर सकते हैं और पूरी तरह अनुकूलित कर सकते हैं, फिर जब बाइट कोड से असेंबलर में जा रहे हैं तो आप अनुकूलित कर सकते हैं। यदि आपके पास केवल 3 स्रोत फाइलें थीं, और मान ली गई थी कि प्रति अवसर केवल दो अनुकूलन स्तर थे, जिन्हें ऑप्टिमाइज़ नहीं किया गया है या ऑप्टिमाइज़ नहीं किया जा रहा है, जीसीसी के साथ आपके पास परीक्षण के लिए 8 संयोजन होंगे, प्रयोगों की संख्या लगभग उच्च परिमाण का क्रम है । आप वास्तव में भाग सकते हैं, सैकड़ों से हजारों। एक परीक्षण के लिए मैं चल रहा था, सी को बाइटकोड चरण पर opimizing नहीं, फिर अलग होने पर बाइटकोड अनुकूलित नहीं है, लेकिन बाइटकोड फ़ाइलों को एक बड़े (ger) में विलय करने के बाद अनुकूलित। सर्वोत्तम एलसीसी सर्वोत्तम परिणामों का उत्पादन करने के तरीके पर अनुकूलित है।
नीचे पंक्ति ... परीक्षण, परीक्षण, परीक्षण।
संपादित करें:
मैं शब्द बाईटकोड को इस्तेमाल किया गया है, मुझे लगता है कि सही शब्द LLVM दुनिया में bitcode है। .bc फ़ाइलों में कोड मेरा मतलब है ...
यदि आप एलएलवीएम का उपयोग कर सी से एआरएम में जा रहे हैं, तो बीच में बिटकोड (बीसी) है। सी से बीसी चरण पर अनुकूलित करने के लिए कमांड लाइन विकल्प हैं। एक बार बीसी आप प्रति फ़ाइल अनुकूलित कर सकते हैं, बीसी से बीसी। यदि आप चुनते हैं कि आप दो या अधिक बीसी फ़ाइलों को बड़ी बीसी फाइलों में विलय कर सकते हैं, या बस सभी फ़ाइलों को एक बड़ी बीसी फ़ाइल में बदल सकते हैं। फिर इन संयुक्त फ़ाइलों में से प्रत्येक को भी अनुकूलित किया जा सकता है।
मेरा सिद्धांत, कि इसके पीछे केवल कुछ परीक्षण मामले हैं, यह है कि यदि आप एक पूर्ण बीसी फाइल में पूरा प्रोग्राम/प्रोजेक्ट नहीं रखते हैं, तो ऑप्टिमाइज़र की अधिकतम राशि होती है जानकारी जिसके साथ अपना काम करना है। तो इसका मतलब है कि सी से बीसी तक कोई ऑप्टिमाइज़ेशन नहीं है। फिर सभी बीसी फाइलों को एक बड़ी बीसी फाइल में मर्ज करें। एक बार जब आप एक बड़ी बीसी फ़ाइल के रूप में पूरी चीज रखते हैं तो ऑप्टिमाइज़र को ऑप्टिमाइज़ेशन चरण को निष्पादित करने, आशा को अधिकतम करने और आशा की गुणवत्ता को उम्मीद करने दें। फिर अनुकूलित बीसी फ़ाइल से एआरएम असेंबलर पर जाएं। Llc के लिए डिफ़ॉल्ट सेटिंग ऑप्टिमाइज़ेशन के साथ है, आप उस अनुकूलन को अनुमति देना चाहते हैं क्योंकि यह एकमात्र चरण है जो लक्ष्य के लिए अनुकूलित करने के बारे में जानता है। बीसी अनुकूलन के लिए बीसी सामान्य हैं और विशिष्ट लक्ष्य (AFAIK) नहीं हैं।
आपको अभी भी परीक्षण, परीक्षण, परीक्षण करना होगा। आगे बढ़ें और चरणों के बीच अनुकूलन के साथ प्रयोग करें, देखें कि क्या यह आपके प्रोग्राम को तेज़ या धीमा कर देता है।
ओह रैंडम -1 वोट के साथ कोई स्पष्टीकरण नहीं। अच्छा है। – Justicle
वाह एक और। उत्तम दर्जे का प्रयास लोग - हम सभी बहुत कुछ सीख रहे हैं। – Justicle
+1 - मुझे एक उचित प्रश्न की तरह लगता है (मुझे डर लगता है कि केवल शून्य तक वापस आ जाता है ...) –