प्रदर्शन के लिए एआरएम निर्देशों की तुलना अंगूठे के निर्देश कैसे करते हैं?


11

एक सहकर्मी ने उल्लेख किया कि थम्ब निर्देश एआरएम निर्देशों की तुलना में काफी धीमा था (यह एक AT91SAM7S32 प्रोसेसर के लिए था)। क्या ये सच है? एक निर्देश के प्रदर्शन लाभ दूसरे पर सेट किए गए हैं?

जवाबों:


11

सामान्य रूप में

एआरएम निर्देशों की तुलना में, मेरे निर्देश आंतरिक रूप से धीमा नहीं हैं, बल्कि क्षमता में अधिक सीमित हैं। यदि आपके कोड को केवल THUMB निर्देशों की कार्यक्षमता की आवश्यकता है, तो यह ARM की तुलना में कम जगह घेरेगा, लेकिन निर्देशों की संख्या समान होगी और, अन्य चीजें समान होने के कारण समान गति से चलती हैं। यदि आपके कोड को अधिक कार्यक्षमता की आवश्यकता है, तो इसे लागू करने के लिए एआरएम निर्देशों की तुलना में अधिक THUMB निर्देशों की आवश्यकता होगी और इसे फिर से लेना होगा, फिर से अन्य चीजें बराबर हो रही हैं (नीचे देखें)

दो कारणों से छोटे आकार के निर्देशों के कारण THUMB माइक्रोकंट्रोलर में लोकप्रिय है:

  1. कार्यक्रम की जगह अक्सर सीमित होती है
  2. कई माइक्रोकंट्रोलर के पास अपने आंतरिक फ्लैश में 16-बिट डेटा बसें होती हैं

दूसरे कारण के लिए, जब आपके कोड को ARM अनुदेश सेट से कार्यक्षमता की आवश्यकता नहीं होती है, तो THUMB कोड वास्तव में तेजी से चलता है। ऐसा इसलिए है क्योंकि आपके निर्देश को दो के बजाय फ्लैश से एक I / O चक्र में लाया जा सकता है। आपके फ्लैश इंटरफ़ेस की गति के आधार पर, वह दूसरा रीड प्रति अनुदेश एक या एक से अधिक प्रतीक्षा-चक्रों को उकसा सकता है जहां आपका सीपीयू बस रुका हुआ है और कुछ भी नहीं कर सकता है।

यह एक समस्या से कम हो जाता है यदि आप निष्पादित करने से पहले अपने कोड को रैम में कॉपी कर सकते हैं (जिसे मैंने आमतौर पर हाल के एआरएम माइक्रोकंट्रोलर के लिए 32-बिट के रूप में देखा है), जहां एकमात्र चिंता कोड घनत्व है। उसके लिए, कई उपकरण यह खोजने की कोशिश करेंगे कि दिए गए फ़ंक्शन के लिए कौन सा प्रतिनिधित्व अधिक कुशल है। यदि संकलक कम निर्देशों में THUMB कोड का उत्पादन कर सकता है, लेकिन यदि ARM कम निर्देशों में आपको ARM से मिलता है। केइल के लिए यह डिफ़ॉल्ट मोड है, अगर मैं सही ढंग से याद करता हूं।

आपकी विशिष्ट चिप

आपके विशेष चिप (AT91SAM7S32) के लिए प्रलेखन में उल्लेख किया गया है कि फ्लैश कंट्रोलर में एक प्रीफैच बफर होता है जो चीजों को और अधिक कुशल बनाने के लिए एक्सेस की भविष्यवाणी कर सकता है, जो एआरएम इंस्ट्रक्शन निष्पादन में सुधार कर सकता है। हालांकि, यह भी कहा गया है कि प्रीफैच "दोहरी 32-बिट" बफर है जो "16-बिट एक्सेस" का अनुकूलन करता है जो "थम्ब मोड में चल रहा है" के लिए सबसे उपयुक्त है, जो इंगित करता है कि यह गति बढ़ाने का इरादा नहीं है। एआरएम निर्देश, लेकिन अपने कोर को THUMB मोड में तेजी से चलाने की अनुमति देने के लिए।

आरेखों से, ऐसा लगता है कि आपकी चिप पर फ्लैश वास्तव में एक 32 बिट डेटा बस है। प्रीफ़ेचर पूरे 32 बिट्स को पढ़कर, CPU को 16 (THUMB मोड में) और पूरे 32 बिट्स को कैशिंग करके काम करता है। अगले चक्र के दौरान, जब सीपीयू दूसरे 16 बिट्स को पढ़ता है, तो इस बार कैश से, फ्लैश नियंत्रक अगले 32 बिट्स को पढ़ रहा है और इसे कैशिंग कर रहा है। इस तरह से THUMB कोड एक प्रारंभिक प्रतीक्षा से अधिक के बिना चल सकता है, भले ही फ्लैश की गति CPU कोर गति की तुलना में थोड़ी धीमी हो। धारा 19.2.2 "ऑपरेशन पढ़ें" में अधिक विवरण हैं।

चूंकि आपकी फ्लैश एक 32 बिट बस है (जैसा कि मैं बता सकता हूं), अगर आपका सीपीयू और फ्लैश घड़ियां समान हैं, तो THUMB आपको केवल एआरएम पर कोड घनत्व देगा। यदि आप चाहते हैं कि आपका CPU कोर फ़्लैश की तुलना में तेज़ी से चले (और ध्यान दें, तो मैंने इस चिप के सभी समय की समीक्षा नहीं की; मुझे लगता है कि सीपीयू तेज़ी से चल सकता है क्योंकि वे आपको प्रतीक्षा करने की स्थिति सेट करने देते हैं), प्रीफैच की गति से वास्तविक फ्लैश एक्सेस में कमी के कारण THUMB को लाभ। हालाँकि, वह गति लाभ प्रति-अनुदेश लाभ है। यदि एआरएम निर्देशों बनाम THUMB निर्देशों की संख्या काफी बड़ी है, तो यह प्रति निर्देश गति को आगे बढ़ाएगा, जिसके परिणामस्वरूप ARM की गति प्रति-तीव्र गति होगी।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.