2009-07-29 14 views
25

मैं सोच रहा था कि आईफोन 3 जीएस पर एआरएम बनाम थंब कोड प्रदर्शन पर किसी को भी कोई कठोर संख्या है। विशेष रूप से गैर-फ़्लोटिंग पॉइंट (वीएफपी या एनईओएन) कोड के लिए - मुझे थंब मोड में फ़्लोटिंग पॉइंट प्रदर्शन वाले मुद्दों से अवगत है।आईफोन 3 जीएस पर एआरएम बनाम थंब प्रदर्शन, गैर फ्लोटिंग पॉइंट कोड

क्या कोई ऐसा बिंदु है जहां बड़े एआरएम निर्देशों का अतिरिक्त कोड आकार प्रदर्शन का खतरा बन जाता है? दूसरे शब्दों में, यदि मेरा निष्पादन योग्य कोड उपलब्ध स्मृति की तुलना में अपेक्षाकृत छोटा है, तो क्या कोई मापा गया है थंब मोड चालू करने के लिए प्रदर्शन अंतर?

कारण मैं पूछता हूं कि जब मैं "-मर्म" विकल्प का उपयोग कर एक्सकोड में नियॉन विशिष्ट स्रोत फ़ाइलों के लिए एआरएम सक्षम कर सकता हूं, तो यह सिम्युलेटर बिल्ड को तोड़ देता है क्योंकि जीसीसी x86 बना रहा है। मैं सोच रहा था कि मुझे बस "अंगूठे के रूप में संकलित" बंद करना चाहिए और इसके साथ किया जाना चाहिए।

+2

ओह रैंडम -1 वोट के साथ कोई स्पष्टीकरण नहीं। अच्छा है। – Justicle

+3

वाह एक और। उत्तम दर्जे का प्रयास लोग - हम सभी बहुत कुछ सीख रहे हैं। – Justicle

+0

+1 - मुझे एक उचित प्रश्न की तरह लगता है (मुझे डर लगता है कि केवल शून्य तक वापस आ जाता है ...) –

उत्तर

13

मुझे आईफोन के बारे में पता नहीं है लेकिन एक कंबल बयान है कि अंगूठे एआरएम की तुलना में धीमी है बिल्कुल सही नहीं है। 32 बिट चौड़े शून्य प्रतीक्षा राज्य स्मृति को देखते हुए, अंगूठे थोड़ा धीमा होगा, संख्या 5% या 10% की तरह होगी। अब अगर यह थंब 2 है, तो यह एक अलग कहानी है, ऐसा कहा जाता है कि अंगूठे 2 तेजी से दौड़ सकता है, मुझे नहीं पता कि आईफोन का क्या अनुमान है कि यह अंगूठे 2 नहीं है।
यदि आप शून्य-प्रतीक्षा-स्थिति 32 बिट मेमोरी से बाहर नहीं हैं तो आपके परिणाम अलग-अलग होंगे। एक बड़ी बात 32 बिट चौड़ी मेमोरी है। यदि आप गेमबॉय एडवांस परिवार की तरह 16 बिट चौड़ी बस पर चल रहे हैं, और उस मेमोरी या रोम पर कुछ प्रतीक्षा राज्य हैं, तो थंब आसानी से प्रदर्शन के लिए एआरएम चला सकता है, भले ही यह एक ही कार्य करने के लिए अधिक अंगूठे निर्देश लेता है।

अपने कोड का परीक्षण करें! ऐसी परीक्षा का आविष्कार करना मुश्किल नहीं है जो आपके द्वारा रुचि रखने वाले नतीजे प्रदान करता हो या नहीं। बांह को दूर करने के लिए यह उतना आसान है जितना अंगूठे दूर हाथ से उड़ाता है। कौन खरोंच करता है परवाह करता है, यह कितना तेज़ है कि यह आज आपके कोड को कितना तेज़ करता है।

एआरएम के लिए परीक्षण कोड प्रदर्शन में वर्षों से जो मैंने पाया है वह यह है कि आपका कोड और आपका कंपाइलर बड़ा कारक है। तो थंब सिद्धांत में कुछ प्रतिशत धीमा है क्योंकि यह एक ही कार्य को छूने के लिए कुछ प्रतिशत अधिक निर्देशों का उपयोग करता है। लेकिन क्या आप जानते थे कि आपका पसंदीदा कंपाइलर भयानक हो सकता है और बस कंपाइलर्स स्विच करके आप कई गुना तेजी से चल सकते हैं (जीसीसी उस श्रेणी में गिरती है)? या एक ही कंपाइलर का उपयोग और अनुकूलन विकल्पों को मिलाकर। किसी भी तरह से आप उपकरण का उपयोग करने के बारे में स्मार्ट होने के द्वारा हाथ/अंगूठे अंतर को छाया कर सकते हैं। आपको शायद यह पता चलेगा लेकिन आपको यह जानकर आश्चर्य होगा कि कितने लोग सोचते हैं कि कोड को संकलित करने का तरीका एकमात्र तरीका है और बेहतर प्रदर्शन पाने का एकमात्र तरीका समस्या पर अधिक स्मृति या अन्य हार्डवेयर फेंकना है।

यदि आप आईफोन पर हैं तो मुझे लगता है कि वो लोग एलएलवीएम का उपयोग कर रहे हैं?मुझे कई तरीकों से एलएलवीएम अवधारणा पसंद है और जब मैं परिपक्व हो जाता हूं तो इसे अपने दैनिक ड्राइवर के रूप में उपयोग करने के लिए उत्सुक हूं, लेकिन यह उस विशेष उत्पाद के लिए 10-20% (या बहुत अधिक) धीमा कोड उत्पन्न करने के लिए पाया गया था जो मैं कर रहा था। मैं बांह मोड में था, मैंने अंगूठे मोड की कोशिश नहीं की, और मेरे पास एक एल 1 और एल 2 कैश था। अगर मैंने वास्तव में अंगूठे की अंगूठी की तुलना करने के लिए कैश के बिना परीक्षण किया था, तो शायद मैं कुछ प्रतिशत धीमी गति से अंगूठे को देखता हूं, लेकिन यदि आप इसके बारे में सोचते हैं (जिसे मैं उस समय में रूचि नहीं रखता) तो आप हाथ कोड से दो गुना कोड को कैश कर सकते हैं शायद यह इंगित करें कि कार्य के लिए कुल मिलाकर कुछ प्रतिशत अधिक कोड है, इसके अलावा इसमें काफी अधिक कैशिंग करके औसत औसत समय थंब कम करना काफी तेज़ हो सकता है। मुझे कोशिश करनी पड़ सकती है।

यदि आप llvm का उपयोग कर रहे हैं, तो आपको अनुकूलन करने के लिए कई स्थानों की दूसरी समस्या है। सी से बाइटकोड में जाकर आप ऑप्टिमाइज़ कर सकते हैं, फिर आप बाइटकोड को अनुकूलित कर सकते हैं, फिर आप अपने सभी बाइटकोड को मर्ज कर सकते हैं और पूरी तरह अनुकूलित कर सकते हैं, फिर जब बाइट कोड से असेंबलर में जा रहे हैं तो आप अनुकूलित कर सकते हैं। यदि आपके पास केवल 3 स्रोत फाइलें थीं, और मान ली गई थी कि प्रति अवसर केवल दो अनुकूलन स्तर थे, जिन्हें ऑप्टिमाइज़ नहीं किया गया है या ऑप्टिमाइज़ नहीं किया जा रहा है, जीसीसी के साथ आपके पास परीक्षण के लिए 8 संयोजन होंगे, प्रयोगों की संख्या लगभग उच्च परिमाण का क्रम है । आप वास्तव में भाग सकते हैं, सैकड़ों से हजारों। एक परीक्षण के लिए मैं चल रहा था, सी को बाइटकोड चरण पर opimizing नहीं, फिर अलग होने पर बाइटकोड अनुकूलित नहीं है, लेकिन बाइटकोड फ़ाइलों को एक बड़े (ger) में विलय करने के बाद अनुकूलित। सर्वोत्तम एलसीसी सर्वोत्तम परिणामों का उत्पादन करने के तरीके पर अनुकूलित है।

नीचे पंक्ति ... परीक्षण, परीक्षण, परीक्षण।

संपादित करें:

मैं शब्द बाईटकोड को इस्तेमाल किया गया है, मुझे लगता है कि सही शब्द LLVM दुनिया में bitcode है। .bc फ़ाइलों में कोड मेरा मतलब है ...

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

मेरा सिद्धांत, कि इसके पीछे केवल कुछ परीक्षण मामले हैं, यह है कि यदि आप एक पूर्ण बीसी फाइल में पूरा प्रोग्राम/प्रोजेक्ट नहीं रखते हैं, तो ऑप्टिमाइज़र की अधिकतम राशि होती है जानकारी जिसके साथ अपना काम करना है। तो इसका मतलब है कि सी से बीसी तक कोई ऑप्टिमाइज़ेशन नहीं है। फिर सभी बीसी फाइलों को एक बड़ी बीसी फाइल में मर्ज करें। एक बार जब आप एक बड़ी बीसी फ़ाइल के रूप में पूरी चीज रखते हैं तो ऑप्टिमाइज़र को ऑप्टिमाइज़ेशन चरण को निष्पादित करने, आशा को अधिकतम करने और आशा की गुणवत्ता को उम्मीद करने दें। फिर अनुकूलित बीसी फ़ाइल से एआरएम असेंबलर पर जाएं। Llc के लिए डिफ़ॉल्ट सेटिंग ऑप्टिमाइज़ेशन के साथ है, आप उस अनुकूलन को अनुमति देना चाहते हैं क्योंकि यह एकमात्र चरण है जो लक्ष्य के लिए अनुकूलित करने के बारे में जानता है। बीसी अनुकूलन के लिए बीसी सामान्य हैं और विशिष्ट लक्ष्य (AFAIK) नहीं हैं।

आपको अभी भी परीक्षण, परीक्षण, परीक्षण करना होगा। आगे बढ़ें और चरणों के बीच अनुकूलन के साथ प्रयोग करें, देखें कि क्या यह आपके प्रोग्राम को तेज़ या धीमा कर देता है।

+0

+1 आपके एलएलवीएम अंतर्दृष्टि के लिए धन्यवाद – slf

+0

क्या आप इस पर विस्तार कर सकते हैं? "सी पर बाइटकोड चरण को ऑप्टिमेट नहीं कर रहा है, फिर अलग होने पर बाइटकोड को अनुकूलित नहीं कर रहा है, लेकिन बाइटकोड फ़ाइलों को एक बड़े (ger) में विलय करने के बाद अनुकूलित करना।सर्वोत्तम एलसीसी सर्वोत्तम परिणामों का उत्पादन करने के तरीके पर अनुकूलित हो रहा है। " – slf

+0

आईफोन 3 जीएस में कॉर्टेक्स-ए 8 है जो थंब -2 का समर्थन करता है। हालांकि, मुझे नहीं पता कि एक्सकोड आपको इसका उपयोग करने देगा या नहीं। क्या आप एक लक्ष्य को लक्षित कर सकते हैं विशिष्ट आईफोन संशोधन? –

4

प्रदर्शन/कोड आकार/बिजली खपत व्यापार बंद के लिए एआरएम/थंब से इस पीडीएफ को देखें।

Profile Guided Selection of ARM and Thumb Instructions
      - कंप्यूटर विज्ञान, राजीव गुप्ता

+0

एक लिंक वास्तव में एक उत्तर नहीं है, लेकिन मैंने इसे एक अच्छे लिंक के साथ अपडेट किया है। –

+0

यह निष्कर्ष निकाला है कि एआरएम कोड बड़े कोड, उच्च आई-कैश ऊर्जा उत्पन्न करता है लेकिन तेज़; थंब कोड छोटे कोड, कम आई-कैश ऊर्जा उत्पन्न करता है लेकिन धीमा। –

+0

ठीक है, लेकिन यह 2002 का एक पेपर है ... – Antonio

1

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

प्रदर्शन मतभेदों पर सटीक संख्या देना मुश्किल है, क्योंकि यह पूरी तरह से आपके कोड पर निर्भर करता है।

आप एक्सकोड में प्रति-आर्किटेक्चर कंपाइलर झंडे सेट कर सकते हैं, जो सिम्युलेटर बिल्ड को तोड़ने से बचेंगे। एक्सकोड बिल्ड सेटिंग दस्तावेज देखें।

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