2010-07-22 10 views
67

यदि कोई लाभ है तो ... दस्तावेज़ों में कुछ भी निर्णायक नहीं मिल सका।आईफोन ऐप्स संकलित करते समय armv6 पर armv7 के फायदे क्या हैं?

स्पष्ट रूप से armv7 आईओएस के नए संस्करण के लिए है ... क्या यह तेज़ है? छोटे? एक्स पर बेहतर है?

+2

छोटे सुधार: यह ARMv6 और ARMv7 है, ARM6 और ARM7 नहीं। 'V' नोट करें। – lucius

उत्तर

54

बड़े अंतरों में से एक यह है कि armv6 आर्किटेक्चर में डबल परिशुद्धता फ़्लोटिंग पॉइंट अंकगणितीय के लिए हार्डवेयर समर्थन है, जबकि armv7 केवल डबल परिशुद्धता फ़्लोटिंग पॉइंट अंकगणितीय के लिए विरासत सॉफ़्टवेयर समर्थन प्रदान करता है।

क्षतिपूर्ति करने के लिए, armv7 आर्किटेक्चर में "नीयन" इकाई है जो एकल परिशुद्धता फ़्लोटिंग पॉइंट अंकगणितीय के लिए अंधेरे से तेज़ हार्डवेयर समर्थन प्रदान करती है।

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

ऐप्पल ने armv6 और armv7 के बीच कई अंतर और इस वर्ष अपने डब्ल्यूडब्ल्यूडीसी सत्रों में से एक में त्वरित रूपरेखा के परिचय के लिए एक परिचय दिया। वीडियो अभी भी आईट्यून्स पर उपलब्ध होना चाहिए (जुलाई '10 तक)।

+5

वास्तव में, स्टीफन कैनन के अनुसार, दोनों एकल और डबल परिशुद्धता चल बिन्दु आपरेशनों हार्डवेयर में ARMv6 में प्रदर्शन कर रहे हैं: http://stackoverflow.com/questions/1622729/double-vs-float-on-the-iphone/ 1622786 # 1622786 –

+0

यह सच है। मुझे वह याद आया। – Jasarien

3

यदि आप अपने ऐप को आईपैड और सभी आईफोन/आईपॉड टॉच मॉडल पर चलाने के लिए चाहते हैं तो आपको दोनों के लिए संकलन करना होगा। पुराने आईओएस डिवाइस arm6 का उपयोग करते हैं और नए लोग arm7 का उपयोग करते हैं।

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

+0

तो इमारत के लिए ड्रॉपडाउन मेनू में सक्रिय आर्किटेक्चर का महत्व क्या है? –

+0

मेरा मानना ​​है कि उन्होंने इसे नवीनतम एसडीके में लिया था। यह आमतौर पर आपकी बिल्ड सेटिंग्स द्वारा ओवरराइड किया गया था। –

3

arm7 आइपॉड टच (3 जी जनरल) और आईफोन 3 जीएस और नए के लिए अधिक अनुकूलित है। पुराने उपकरणों के निर्माण के दौरान आपको 'मानक/arm6 + arm7' का उपयोग करने की आवश्यकता है। प्रैक्टिस में, मैंने अपने अनुप्रयोगों में ज्यादा प्रदर्शन अंतर नहीं देखा है।

79

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

जैसा कि जसारीन बताते हैं, निर्देश सेट के बीच सबसे बड़ा अंतर का क्षेत्र फ़्लोटिंग-पॉइंट ऑपरेशंस में है। Armv6 पर, छोटे बाइनरी बनाने के लिए कम थंब निर्देश सेट का उपयोग करके अनुप्रयोगों का निर्माण किया गया था, लेकिन थंब फ़्लोटिंग-पॉइंट प्रदर्शन भयानक था। इसलिए, आपको थंब को अक्षम करने की आवश्यकता है, क्या आप तेजी से फ़्लोटिंग-पॉइंट गणना चाहते थे। Armv7 पर, थंब -2 निर्देश सेट में अब यह सीमा नहीं है, इसलिए ऐप्पल आपको हर समय इसका उपयोग करके संकलित करने की सिफारिश करता है।

आप थंब बिल्ड सेटिंग को सशर्त बना सकते हैं ताकि यह पुराने उपकरणों और नए लोगों के लिए बंद हो। ऐसा करने के लिए, अपने एक्सकोड बिल्ड सेटिंग्स पर जाएं और थंब विकल्प के लिए संकलन का चयन करें। स्क्रीन के निचले बाएं मेनू पर मेनू पर जाएं और बिल्ड बिल्डिंग कंडीशन विकल्प जोड़ें चुनें। नई बिल्ड सेटिंग स्थिति में, आर्किटेक्चर के लिए एआरएमवी 6 चुनें, इसके लिए थंब बंद करें, एक और शर्त जोड़ें, इसके आर्किटेक्चर के लिए एआरएमवी 7 चुनें, और इसके लिए थंब सक्षम करें।

स्टीफन कैनन के उत्तर here के अनुसार, एकल और डबल-परिशुद्धता फ़्लोटिंग-पॉइंट ऑपरेशंस दोनों armv6 में हार्डवेयर में समर्थित हैं।मैंने पाया है कि एकल-परिशुद्धता अंकगणित इस प्लेटफ़ॉर्म पर थोड़ा बेहतर प्रदर्शन करता है, शायद कैश में फ़िट होने वाले अधिक संचालन के कारण। ARMv7 पर, नियोन SIMD फ्लोटिंग प्वाइंट इकाई केवल एकल परिशुद्धता के संचालन पर काम करता है, इसलिए वहाँ सिंगल और डबल परिशुद्धता आपरेशन के प्रदर्शन के बीच में एक विशाल अंतर हो सकता है।

अन्य प्रश्न है कि इस विषय पर ब्याज की हो सकता है शामिल हैं:

+0

Xcode 4.3 के रूप में, परियोजना प्रवास के हिस्से के रूप में, एप्पल GCC_THUMB_SUPPORT स्थापित कर रही है = नहीं बिना शर्त। कोई टिप्पणी? मुझे लगता है कि मेरे लिए अंतर्ज्ञानी काउंटर लगता है और (निश्चित रूप से/दुर्भाग्य से) इस बारे में ऐप्पल से कुछ भी नहीं है। उनके दस्तावेज़ अभी भी armv7 के लिए अंगूठे का उपयोग कहते हैं। – smparkes

+0

@smparkes - यह प्रोजेक्ट माइग्रेशन में एक गड़बड़ी हो सकती है, क्योंकि निर्देश सेट बदलना नहीं चाहिए था। एआरएमवी 7 के लिए थंब-2 निर्देश उत्पन्न होने के लिए अभी भी फायदेमंद होना चाहिए। सबसे खराब मामला, यह देखने के लिए कि सेटिंग सेटिंग कैसे बदलती है, दोनों स्थितियों के तहत अपना एप्लिकेशन (मेमोरी और प्रदर्शन) प्रोफाइल करें। हर बार जब मैंने कोशिश की है, थंब के लिए इमारत एआरएमवी 7 पर मदद की। –

+0

धन्यवाद, ब्रैड। मुझे लगता है कि मैं अपने वर्तमान ओवरराइड को एक्सकोड में अस्वीकार कर दूंगा। अब अन्य सामान 4.3 तोड़ दिया ... – smparkes

4
मेरे लिए

, ARMv7 के मुख्य लाभ कर रहे हैं :

  • अंगूठे -2
  • नियोन

नियोन स्पष्ट रूप से, के लिए आप बस फिर कंपाइल करके इसे का लाभ लेने नहीं है, लेकिन यदि आप समय निवेश कर सकते हैं यह मल्टीमीडिया/गेमिंग में तेजी लाने के कर सकते हैं कोडित किया जाना चाहिए 8. हालांकि अंगूठे -2 का एक पहलू से संचालन काफी लगभग कोई दोष (ARMv6 पर अंगूठे के विपरीत है, जो बहुत धीमी एआरएम मोड की तुलना में फ्लोटिंग प्वाइंट कोड बनाता है) के साथ कोड के आकार में एक नि: शुल्क कमी है। बेशक, एआरएमवी 7 में आपके निष्पादन योग्य का एक और संस्करण आपके निष्पादन योग्य आकार को कम नहीं करेगा, लेकिन यह आपके कोड को स्मृति, कैश इत्यादि में कम करेगा

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