2008-11-17 13 views
6

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

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

और अब सवाल: क्या किसी के पास इस तरह के कार्य के साथ एचडब्ल्यू के किसी भी हिस्से पर अनुभव है कोई सॉफ्टवेयर? कोई वास्तविक जीवन उदाहरण वास्तव में सहायक होगा। मेरे पास कई ओएस और कई हार्डवेयर पर हमारे सॉफ़्टवेयर को चलाने का विकल्प है। इसलिए यदि आप किसी भी हार्डवेयर पर इस तरह के अनुमान के लिए कोई उपकरण जानते हैं तो एक मौका है जिसका मैं इसका उपयोग कर सकता हूं या कम से कम एक विचार प्राप्त कर सकता हूं। पता के लिए मैं केवल eCosPro OS पर सीपीयू लोड को मापने के बारे में जानता हूं।

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

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

उत्तर

4

ठीक है आप महसूस करते हैं कि यह अस्वीकरण से भरा हुआ है & चेतावनियां - सीपीयू गति, मेमोरी गति, कैश हिट, एमएमयू पेज टेबल फ्लश, बस विवाद, आदि ... (यदि यह एक भारी ड्यूटी एम्बेडेड सिस्टम है) सभी कारक निर्णय में महत्वपूर्ण ....

यह कहकर कि .... मैं यह क्या करूँगा। रीयल-टाइम ऑपरेटिंग सिस्टम (मेरे साथ रहें), शायद फ्रीआरटीओएस (फ्री, क्या आश्चर्य है) या यू/सी-ओएस-द्वितीय (वाणिज्यिक उपयोग के लिए मुफ्त नहीं, शायद $ 3K) जैसी कुछ। ये कर्नेल आपको निष्क्रिय CPU चक्र (निष्क्रिय कार्य स्पिन पाश) गिनने के लिए कोड को वाद्य यंत्र की अनुमति देते हैं।

तो अपने पूरे एप्लिकेशन (या ग्राहक के आवेदन) को उस बोर्ड पर एकमात्र (गैर-निष्क्रिय) कार्य के रूप में चलाएं जिसे आप सहमत हैं (उदा। एमपीसी 860 बोर्ड, एआरएम 7 बोर्ड, आदि ...)। आरटीओएस के माध्यम से बोर्ड पर% सीपीयू को मापें। (उदाहरण के लिए "60 मेगाहट्र्ज पर चलने वाले फ्लिबर बोर्ड पर, हमारे आवेदन ने सीपीयू का 12% उपयोग किया।")

उन्हें बिना अधिक देने के, या इसके विपरीत, यह उनके लिए जाने के लिए एक उचित उचित लंबाई की तरह लगता है।

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

शुभकामनाएं!

+0

यह एक उचित अनुमान की तरह लगता है। –

+0

यह जेस्पर पोस्ट पढ़ने से पहले, मैं ऐसा करने की योजना बना रहा था। और इस तथ्य के बावजूद कि सीपीयू उपयोग मुझे अधिक प्रासंगिक जानकारी देता है, ग्राहक एमआईपीएस चाहता है और मैं यह देखने की कोशिश करूंगा कि मैं आईसीई से एमआईपीएस जानकारी प्राप्त कर सकता हूं या नहीं। – Ilya

+0

इलिया - क्षमा करें, मैंने काफी "लूप बंद नहीं किया" - चलो 60 मेगाहर्ट्ज पर आपका सीपीयू ~ 50 एमआईपीएस प्रदान करता है .... इसलिए यदि आपका प्रोग्राम 10% CPU (90% निष्क्रिय) का उपयोग करता है, तो इसका उपयोग कर रहा है 50 एमआईपीएस = 5 एमआईपीएस का लगभग 10%। – Dan

2

क्या आपके पास सिम्युलेटर या डीबगर जांच है जो आपको निर्देश गणना दे सकती है? आपको सही लक्ष्य मंच के लिए इसे करने की भी आवश्यकता नहीं है, केवल एक मोटा निर्देश गणना होगी।

यदि सब कुछ विफल हो जाता है, तो इसे अपने प्लेटफ़ॉर्म पर चलाएं, अपने-मेगाहर्ट्ज/ग्राहक के-मेगाहर्ट्ज के भाग के साथ रनटाइम को स्केल करें। इससे आपको बहुत का अनुमान लगाया जाएगा कि ग्राहक किस तरह के रनटाइम का अनुभव करेगा।

+0

ग्रेट विचार, क्या आप जानते हैं * कोई * जांच जो यह कर सकती है? मेरे मंच पर अनुमान ग्राहक को संतुष्ट करेगा। – Ilya

+0

मुझे दुर्भाग्यवश, विभिन्न डीबगर जांच का उपयोग करने का अधिक अनुभव नहीं है, मुझे केवल इतना ही पता है कि आप उनके साथ क्या कर सकते हैं। – JesperE

+0

किसी भी तरह से धन्यवाद, मैं यहां एक परिणाम प्राप्त करने के बाद परिणाम पोस्ट करूंगा :) – Ilya

0

आई/एस ऑपरेटिंग सिस्टम के साथ एक सिस्टम के लिए "कमजोर" मीट्रिक है।

बुनियादी तथ्य में, आप क्या करना है बाहर बुरी से बुरी हालत अनुदेश पथ

  1. आंकड़ा और गिनती कितने चक्र यह निष्पादित करने के लिए ले जाता है (इसका मतलब है कि सीपीयू के लिए विधानसभा पढ़ने और समीक्षा करने सीपीयू हैंडबुक जो आपको # चक्रों के बारे में बताती है)।
  2. अब अपनी वास्तविक समय की बाधाओं को समझें।
  3. फिर आप सबसे खराब केस चक्रों के लिए # 1 का उपयोग करते हैं। सीपीयू ऊपर/नीचे की ओर समायोजित करें जब तक कि यह वास्तविक समय की बाधाओं में फिट न हो जाए।
  4. एक झुकाव कारक जोड़ें।
+0

यह बहुत लंबी सड़क है ... :) सॉफ्टवेयर को बड़ा और जटिल छोड़ दिया गया है। – Ilya

0

पहली चीज़ जो आपको करने की आवश्यकता है, वह सही संचालन के लिए कुछ प्रकार के मानदंडों के साथ आना है। यह एप्लिकेशन की प्रकृति पर बहुत निर्भर होने जा रहा है - आपके मानदंड में "3ms में कोड x निष्पादित करना होगा" या "100ms से कम विलंब होना चाहिए"। कोई भी मानदंड जो मात्रात्मक माप से संबंधित नहीं है, वह मुश्किल होगा क्योंकि यह व्यक्तिपरक होगा।

सही संचालन के लिए अपने मानदंडों को ढूंढने से आपको कोड के महत्वपूर्ण भाग मिलेंगे।ध्यान रखें कि ये सामान्य संचालन के बजाय कोने के मामलों में पाए जा सकते हैं।

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

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

मैं JesperE के सुझाव से कहाँ अलग हैं मेगाहर्ट्ज पर ध्यान केंद्रित नहीं सुझाव है बल्कि लक्ष्य की वास्तविक MIPS है। उदाहरण के लिए, परीक्षण कोड पर अपने कोड को संकलित और निष्पादित करें - यदि आपके पास एक प्रोफाइलर है जो कि बेहतर हो सकता है। फिर ग्राहक के लक्ष्य के लिए अपना कोड संकलित करें और परिणामी निष्पादन योग्य में निर्देशों की संख्या की मोटा तुलना करें। आप निष्पादन समय की गणना में परीक्षण और लक्ष्य प्रोसेसर के सापेक्ष एमआईपीएस के साथ इस अनुपात को शामिल कर सकते हैं।

0

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

+0

सवाल यह था कि कैसे मापें ... मेरे दिमाग को पार करने का विचार :) – Ilya

+0

1. जब आप प्रवेश करते हैं और महत्वपूर्ण दिनचर्या से बाहर निकलते हैं तो पिन को टॉगल करें। समय को मापने के लिए पिन पर दायरे का प्रयोग करें। 2. असेंबली फ़ाइलों को आउटपुट करने के लिए अपने कंपाइलर को सेट करें और निर्देशों की संख्या के अनुमानित अनुमान के लिए प्रत्येक दिनचर्या के लिए कोड की रेखाओं की गणना करें – geometrikal

+0

यह वास्तव में संभव नहीं है, मेरा कोडबेस औसत एम्बेडेड ओएस कोड बेस से बड़ा है। सबसे लंबी दिनचर्या ढूंढना पर्याप्त नहीं है, सबसे लंबे समय तक निष्पादन पथ अधिक उपयुक्त है, लेकिन तकनीकी रूप से कठिन है। – Ilya

0

अधिकांश आधुनिक दिन डिबगर्स आपको उपभोग किए गए निर्देशों को देखने की क्षमता देते हैं; RVDS। इसके अलावा, आप वास्तव में मंच पर चलने के बिना उपभोग किए गए निर्देशों का एक सभ्य विचार प्राप्त करने के लिए प्रोसेसर अनुकरणकर्ताओं का उपयोग कर सकते हैं (यदि आपका कोड कोडेक या क्रिप्टोग्राफिक मॉड्यूल जैसे स्टैंडअलोन है और बोर्ड पर निर्भर नहीं है) - ध्यान दें कि यह आपको निर्देश देगा, चक्र नहीं चक्र आपके बोर्ड के विवरण से प्रभावित होंगे (उदाहरण के लिए, प्रतीक्षा राज्य, स्मृति पहुंच आदि)

0

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

आप अपने प्रोसेसर आर्किटेक्चर को निर्दिष्ट नहीं करते हैं लेकिन यह क्षमता मौजूद हो सकती है।

0

RapiTime दावा आपके लक्ष्य के लिए सबसे खराब-मामले निष्पादन समय का संभाव्य अनुमान दे सकते हैं। मैंने इसे व्यक्तिगत रूप से उपयोग नहीं किया है, लेकिन उनके प्रस्तुतियों को देखा है ...

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

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