आधुनिक सीपीयू के साथ साइकिल की गिनती (जैसे एआरएम)


14

कई अनुप्रयोगों में, एक सीपीयू जिसके अनुदेश निष्पादन में अपेक्षित इनपुट उत्तेजनाओं के साथ एक ज्ञात समय संबंध होता है, उन कार्यों को संभाल सकता है जो संबंध अज्ञात होने पर बहुत तेज़ सीपीयू की आवश्यकता होगी। उदाहरण के लिए, एक प्रोजेक्ट में मैंने वीडियो उत्पन्न करने के लिए PSOC का उपयोग किया, मैंने प्रत्येक 16 सीपीयू घड़ियों में वीडियो डेटा के एक बाइट को आउटपुट करने के लिए कोड का उपयोग किया। परीक्षण के बाद से कि क्या SPI डिवाइस तैयार है और ब्रांचिंग है यदि नहीं IIRC 13 घड़ियां लेगा, और आउटपुट डेटा के लिए एक लोड और स्टोर 11 लेगा, बाइट के बीच तत्परता के लिए डिवाइस का परीक्षण करने का कोई तरीका नहीं था; इसके बजाय, मैंने बस प्रोसेसर को प्रत्येक बाइट के लिए कोड के लायक 16 चक्रों के पहले निष्पादित करने की व्यवस्था की (मुझे विश्वास है कि मैंने एक वास्तविक अनुक्रमित लोड, एक डमी अनुक्रमित लोड और एक स्टोर का उपयोग किया था)। प्रत्येक पंक्ति का पहला SPI वीडियो शुरू होने से पहले हुआ, और हर बाद के लेखन के लिए एक 16-चक्र खिड़की थी जहां बफर बफर या अंडररून के बिना लेखन हो सकता था। ब्रांचिंग लूप ने अनिश्चितता का एक 13 चक्र विंडो उत्पन्न किया, लेकिन अनुमानित 16-चक्र निष्पादन का मतलब था कि बाद के सभी बाइट्स के लिए अनिश्चितता उसी 13 चक्र विंडो (जो बदले में 16-चक्र विंडो के भीतर फिट होती है, जब लेखन स्वीकार्य रूप से फिट हो सकता है) पाए जाते हैं)।

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

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

myloop:
  Mov r0, r0; अधिक निर्देशों को पूर्वनिर्धारित करने की अनुमति देने के लिए सरल सरल निर्देश
  Mov r0, r0; अधिक निर्देशों को पूर्वनिर्धारित करने की अनुमति देने के लिए सरल सरल निर्देश
  Mov r0, r0; अधिक निर्देशों को पूर्वनिर्धारित करने की अनुमति देने के लिए सरल सरल निर्देश
  Mov r0, r0; अधिक निर्देशों को पूर्वनिर्धारित करने की अनुमति देने के लिए सरल सरल निर्देश
  Mov r0, r0; अधिक निर्देशों को पूर्वनिर्धारित करने की अनुमति देने के लिए सरल सरल निर्देश
  Mov r0, r0; अधिक निर्देशों को पूर्वनिर्धारित करने की अनुमति देने के लिए सरल सरल निर्देश
  r2, r1, # 0x12000000 जोड़ता है; 2-शब्द निर्देश
  ; निम्नलिखित को दोहराएं, संभवतः विभिन्न ऑपरेंड के साथ
  ; जब तक कैरी नहीं होगा तब तक वैल्यू को जोड़ते रहेंगे
  itcc
  अपडेस आर 2, आर 2, # 0x12000000; 2-शब्द निर्देश, itcc के लिए अतिरिक्त "शब्द"
  itcc
  अपडेस आर 2, आर 2, # 0x12000000; 2-शब्द निर्देश, itcc के लिए अतिरिक्त "शब्द"
  itcc
  अपडेस आर 2, आर 2, # 0x12000000; 2-शब्द निर्देश, itcc के लिए अतिरिक्त "शब्द"
  itcc
  अपडेस आर 2, आर 2, # 0x12000000; 2-शब्द निर्देश, itcc के लिए अतिरिक्त "शब्द"
; ... आदि, अधिक सशर्त दो-शब्द निर्देशों के साथ
  उप r8, r8, # 1
  bpl myloop

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

यह अच्छा होगा यदि एआरएम कुछ शर्तों को निर्दिष्ट कर सकता है, जिसके तहत "यह" निर्देश समय निर्धारित करने वाला होगा (जैसे अगर कोई प्रतीक्षा राज्य या कोड-बस विवाद नहीं है, और पूर्ववर्ती दो निर्देश 16-बिट रजिस्टर निर्देश हैं, आदि) लेकिन मैंने ऐसी कोई युक्ति नहीं देखी है।

नमूना आवेदन

मान लीजिए कि एक 480p पर घटक वीडियो आउटपुट उत्पन्न करने के लिए अटारी 2600 के लिए एक बेटीबोर्ड डिजाइन करने की कोशिश कर रहा है। 2600 में 3.579MHz पिक्सेल घड़ी और 1.19MHz CPU घड़ी (डॉट घड़ी / 3) है। 480P घटक वीडियो के लिए, प्रत्येक पंक्ति को दो बार आउटपुट होना चाहिए, जिसमें 7.158MHz डॉट क्लॉक आउटपुट होता है। क्योंकि अटारी की वीडियो चिप (टीआईए) 3-बिट लूम सिग्नल और लगभग 18 एस के संकल्प के साथ चरण संकेत के रूप में 128 रंगों में से एक का उत्पादन करती है, इसलिए केवल आउटपुट को देखकर रंग को सही ढंग से निर्धारित करना मुश्किल होगा। एक बेहतर तरीका यह होगा कि रंग रजिस्टरों को लिखता है, लिखे गए मानों का पालन करें, और रजिस्टर नंबर के अनुरूप प्रत्येक रजिस्टर को टीआईए ल्यूमिनेन्स मान में फीड करें।

यह सब एक FPGA के साथ किया जा सकता है, लेकिन कुछ बहुत तेज़ एआरएम डिवाइस FPGA की तुलना में कहीं अधिक सस्ते हो सकते हैं, जिसमें आवश्यक बफरिंग को संभालने के लिए पर्याप्त RAM है (हाँ, मुझे पता है कि वॉल्यूम के लिए इस तरह की लागत का उत्पादन किया जा सकता है ' t एक वास्तविक कारक)। एआरएम को आवक घड़ी सिग्नल देखने की आवश्यकता है, हालांकि, आवश्यक सीपीयू की गति में काफी वृद्धि होगी। पूर्वनिर्धारित चक्र मायने रखता है चीजों को साफ कर सकता है।

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

शायद सबसे अच्छा तरीका यह होगा कि रंग लिखने की पहचान करने के लिए एक जोड़े असतत-तर्क वाले चिप्स का उपयोग करें और उचित मूल्यों पर रंग रजिस्टरों के निचले-बिट्स को बाध्य करें, और फिर आने वाले सीपीयू बस और टीआईए आउटपुट डेटा के नमूने के लिए दो डीएमए चैनलों का उपयोग करें, और आउटपुट डेटा उत्पन्न करने के लिए एक तीसरा डीएमए चैनल। तब सीपीयू प्रत्येक स्कैन लाइन के लिए दोनों स्रोतों से सभी डेटा को संसाधित करने, आवश्यक अनुवाद करने और आउटपुट के लिए इसे बफर करने के लिए स्वतंत्र होगा। एडेप्टर के कर्तव्यों का एकमात्र पहलू जो "वास्तविक समय" में होता है, वह COLUxx को लिखे गए डेटा का ओवरराइड होगा, और दो सामान्य लॉजिक चिप्स का उपयोग करने पर ध्यान दिया जा सकता है।

जवाबों:


7

मैं डीएमए को वोट देता हूं। यह वास्तव में कोर्टेक्स-एम 3 और ऊपर में लचीला है - और आप सभी तरह की पागल चीजें कर सकते हैं जैसे कि एक जगह से डेटा प्राप्त करना और किसी भी सीपीयू चक्र को खर्च किए बिना निर्दिष्ट दर के साथ या कुछ घटनाओं में आउटपुट करना। डीएमए बहुत अधिक विश्वसनीय है।

लेकिन विवरणों को समझना काफी कठिन हो सकता है।

एक और विकल्प इन तंग चीजों के हार्डवेयर कार्यान्वयन के साथ FPGA पर नरम-कोर है।


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

1
किसी भी मामले में, पहले एक आवेदन के साथ मैं सटीक चक्र-बैंगिंग के लिए विचार कर रहा था, मैंने मूल प्रश्न में अधिक जानकारी पोस्ट की। मैं उत्सुक हूं कि आप क्या सोचते हैं। एक और स्थिति जहां मैं साइकिल-बैंगिंग कर रहा था, एक रंगीन एलसीडी पर प्रदर्शन डेटा नष्ट कर रहा था। 8-बिट रंगों का उपयोग करके रैम में डेटा बफ़र किया जाएगा, लेकिन डिस्प्ले को 16-बिट रंगों की आवश्यकता होती है। सबसे तेज़ तरीका है जो मैंने आउटपुट डेटा के बारे में सोचा था कि लिखने के स्टाइल्स को उत्पन्न करने के लिए हार्डवेयर का उपयोग किया गया होगा, इसलिए सीपीयू को केवल डेटा को देखना होगा। क्या यह अच्छा होगा कि 8-> 16 बिट का छोटे बफर में अनुवाद किया जाए ...
सुपरकैट

1
... और फिर डीएमए को स्थानांतरित करने की व्यवस्था करें, या सबसे अच्छा तरीका क्या होगा?
सुपरकैट

4

समय की जानकारी उपलब्ध है, लेकिन, जैसा कि आपने बताया, कभी-कभी अस्पष्ट हो सकता है। कोर्टेक्स-एम 3 के लिए तकनीकी संदर्भ नियमावली की धारा 18.2 और तालिका 18.1 में बहुत अधिक समय की जानकारी है , उदाहरण के लिए, ( पीडीएफ यहाँ ), और यहाँ एक अंश:

18.2 का अंश

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

[१] शाखाएँ निर्देश के लिए एक चक्र लेती हैं और फिर लक्ष्य निर्देश के लिए पाइपलाइन पुनः लोड करती हैं। गैर-ली गई शाखाएं कुल 1 चक्र हैं। एक तत्काल के साथ ली गई शाखाएं आम तौर पर पाइपलाइन पुनः लोड का 1 चक्र (कुल 2 चक्र) हैं। रजिस्टर ऑपरेंड के साथ ली गई शाखाएं आम तौर पर पाइपलाइन रीलोड (कुल 3 चक्र) के 2 चक्र हैं। पाइपलाइन रीलोड लंबा है [कितना लंबा?] जब धीमी गति से मेमोरी तक पहुंच के अलावा 32-बिट निर्देशों को अनसाइन किया जाता है। एक शाखा संकेत कोड बस के लिए उत्सर्जित होता है जो पूर्व-लोड करने के लिए एक धीमी प्रणाली [कितना धीमा?] की अनुमति देता है । यह कर सकते हैं [यह वैकल्पिक है?] को कम धीमी स्मृति के लिए शाखा लक्ष्य जुर्माना [द्वारा कितना?], लेकिन यहां से भी कम समय कभी नहीं दिखाया गया है।

[२] आम तौर पर, लोड-स्टोर निर्देश पहले पहुँच के लिए दो चक्र और प्रत्येक अतिरिक्त पहुँच के लिए एक चक्र लेते हैं। तत्काल ऑफ़सेट वाले स्टोर एक चक्र लेते हैं।

[३] UMULL / SMULL / UMLAL / SMLAL स्रोत मूल्यों के आकार के आधार पर प्रारंभिक समाप्ति का उपयोग करते हैं [क्या आकार?] ये एक चक्र के सबसे खराब स्थिति वाले विलंबित (परित्यक्त / पुनः आरंभ) हैं। एमएलएएल संस्करण चार से सात चक्र लेते हैं और MULL संस्करण तीन से पांच चक्र लेते हैं । MLAL के लिए, हस्ताक्षरित संस्करण अहस्ताक्षरित की तुलना में एक चक्र लंबा है।

[४] आईटी निर्देशों को तह किया जा सकता है । [कब? टिप्पणी देखो।]

[५] DIV का समय लाभांश और भाजक पर निर्भर करता है । [बहु के रूप में एक ही समस्या] DIV एक चक्र की सबसे खराब स्थिति विलंबता के साथ अंतःक्रियात्मक (परित्यक्त / पुनः आरंभ) है। जब लाभांश और भाजक समान होते हैं [आकार के समान?] आकार में, विभाजन जल्दी से समाप्त हो जाता है। लाभांश और शून्य के विभाजक से बड़े भाजक के मामलों के लिए न्यूनतम समय है। शून्य का एक भाजक शून्य लौटता है (दोष नहीं), हालांकि इस मामले को पकड़ने के लिए डिबग जाल उपलब्ध है। [वे कौन सी श्रेणियां हैं, जो MUL के लिए दी गई थीं?]

[६] नींद निर्देश के लिए एक चक्र है और साथ ही कई नींद चक्र भी उपयुक्त हैं। WFE केवल एक चक्र का उपयोग करता है जब घटना बीत चुकी होती है। डब्ल्यूएफआई में प्रवेश करने के दौरान जब तक कोई रुकावट नहीं आती, तब तक डब्ल्यूएफआई सामान्य तौर पर एक चक्र से अधिक होता है।

[Takes] आईएसबी एक चक्र (शाखा के रूप में कार्य करता है) लेता है। DMB और DSB एक चक्र लेते हैं जब तक कि डेटा बफर या LSU में लंबित न हो। यदि एक बाधा के दौरान एक बाधा आती है, तो इसे छोड़ दिया जाता है / फिर से शुरू किया जाता है।

सभी उपयोग के मामलों के लिए, यह "यह निर्देश एक चक्र है, यह निर्देश दो चक्रों से अधिक जटिल होगा, यह एक चक्र है ..." सरल, धीमे, पुराने प्रोसेसर में संभव गिनती। कुछ उपयोग मामलों के लिए, आप किसी भी अस्पष्टता का सामना नहीं करेंगे। यदि आप अस्पष्टता का सामना करते हैं, तो मेरा सुझाव है:

  1. अपने विक्रेता से संपर्क करें और उनसे पूछें कि आपके उपयोग के मामले के लिए निर्देश समय क्या है।
  2. अस्पष्ट व्यवहार को निर्दिष्ट करने के लिए परीक्षण करें
  3. किसी भी प्रोसेसर संशोधन के लिए पुन: परीक्षण और विशेष रूप से विक्रेता परिवर्तन से गुजरते समय।

ये आवश्यकताएं संभवतः आपके प्रश्न का उत्तर देती हैं, "नहीं, यह एक अच्छा विचार नहीं है, जब तक कि कठिनाइयों का सामना करने लायक नहीं है" - लेकिन आप पहले से ही जानते थे कि।


1
मैं निम्नलिखित बातों पर विचार करूंगा: "पाइपलाइन पुनः लोड लंबी होती है जब धीमी मेमोरी तक पहुंच के अलावा बिना-किए गए 32-बिट निर्देशों की शाखाओं में बंटी होती है" यह नहीं कहता कि क्या यह ठीक एक चक्र जोड़ता है, और "आईटी निर्देशों को तह किया जा सकता है" t यह निर्दिष्ट नहीं किया जाएगा कि वे किन परिस्थितियों में होंगे या नहीं।
सुपरकैट

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

1
मेरा अनुमान है कि आईटी शायद (सच में) कुछ ऐसा नोट कर सकता है, "प्रतीक्षा की स्थिति या कोड-बस विवाद के अभाव में, आईटी तह की गारंटी है अगर (1) पूर्ववर्ती निर्देश एक 16-बिट निर्देश था जो एक्सेस नहीं किया था मेमोरी या प्रोग्राम काउंटर; (2) या तो अगला निर्देश एक 16-बिट निर्देश है, या पूर्ववर्ती निर्देश "अन-असाइन" शाखा का लक्ष्य नहीं था। आईटी तह अन्य अनिर्दिष्ट परिस्थितियों में भी हो सकता है। इस तरह के एक अनुमान के अनुसार कोड को व्यवस्थित किया गया था, यह सुनिश्चित करने के लिए एक पूर्वानुमानित आईटी-अनुदेश समय के साथ कार्यक्रम लिखने की अनुमति देगा।
सुपरकैट

1
वाह - मैं स्वीकार करता हूं कि मैं केवल सबसे खराब स्थिति चक्र चक्र से गुजरा था, बल्कि वास्तव में मेज के नीचे केवेट से कुश्ती की थी। मेरे अपडेट किए गए उत्तर में कुछ अन्य अस्पष्टताओं पर प्रकाश डाला गया है।
केविन वर्मियर

1
ऐसी बहुत सी स्थितियाँ हैं, जहाँ किसी को सबसे ख़राब मामलों में दिलचस्पी है, और एक उचित संख्या जहाँ किसी को सबसे अच्छी स्थिति में दिलचस्पी है (जैसे कि अगर एक SPI पोर्ट हर 16 चक्र में एक बाइट का उत्पादन कर सकता है, तो प्रत्येक बाइट में 14 चक्र लगेंगे सबसे अच्छा मामला है, और तत्परता के लिए जाँच 5 चक्र ले जाएगा, हर बाइट तत्परता के लिए जाँच हर 19 चक्र सबसे अच्छा मामला एक बार बाइट करने के लिए गति को सीमित करेगा, दो जोड़ा NOPs के साथ आँख बंद करके हर 16 चक्र सर्वश्रेष्ठ मामले में एक बाइट की गति की अनुमति होगी; )। जिन मामलों में सटीक समय की आवश्यकता होती है, वे सामान्य नहीं हैं, लेकिन वे उत्पन्न हो सकते हैं।
सुपरकैट

3

इस समस्या को गोल करने का एक तरीका यह है कि उपकरणों का उपयोग नियतात्मक या पूर्वानुमेय समय के साथ किया जाए, जैसे कि लंबन प्रोपेलर और एक्सएमएल चिप्स:

http://www.parallaxsemiconductor.com/multicoreconcept

http://www.xmos.com/

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

https://www.xmos.com/download/public/XMOS-Timing-Analyzer-Whitepaper%281%29.pdf


1
मैं सोचने लगा हूँ कि लियोन के एक्सएमओएस में शेयर हैं ... ;-)
फेडेरिको रूसो

1
मुझे बस उनके चिप्स पसंद हैं, और जो लोग वहां काम करते हैं। Parallax अच्छे उत्पादों के साथ एक अच्छी कंपनी है, साथ ही।
लियोन हेलर

1
हाँ, कोई अपराध नहीं। यह सिर्फ मुझे बताता है कि सभी जवाब (एक को छोड़कर) जहां एक्सएमओएस का उल्लेख किया गया है, आप से हैं। कुछ के बारे में उत्साही होने के साथ कुछ भी गलत नहीं है।
फेडेरिको रूसो

@Federico, @Leon - यह वही है जो मुझे XMOS के बारे में थोड़ा चिंतित करता है: दुनिया में सिर्फ 1 उपयोगकर्ता क्यों है (कम से कम यह कैसा दिखता है)? यदि यह बहुत अच्छा है, तो यह शहर की बात क्यों नहीं है? मैंने कभी किसी को इसके बारे में बात करते नहीं सुना, इसका कम इस्तेमाल किया।
स्टीवनवह जूल 6'11


2

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

इसका एक अच्छा उदाहरण अधिकांश माइक्रोचिप पीआईसी हैं। 10, 12, 16 और 18 श्रृंखलाओं में बहुत अच्छी तरह से प्रलेखित और पूर्वानुमेय निर्देश समय है। यह उस तरह के छोटे नियंत्रण अनुप्रयोगों में एक उपयोगी विशेषता हो सकती है, जिनके लिए इन चिप्स का इरादा है।

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

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

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


मैं इस बात से सहमत हूं कि सामान्य तौर पर ऐसे अनुप्रयोग जो अधिक संगणक-गहन होते हैं, सूक्ष्म समय के प्रति कम संवेदनशील हो जाते हैं, लेकिन कुछ परिदृश्य ऐसे होते हैं, जहां किसी को PIC-18 की तुलना में थोड़ा अधिक प्रसंस्करण ओम्फ की आवश्यकता हो सकती है, लेकिन इसके लिए भी पूर्वानुमान की आवश्यकता होती है। मैं सोच रहा हूं कि 16-बिट PIC आर्किटेक्चर जैसी चीजों को सीखने के लिए मुझे किस हद तक प्रयास करना चाहिए या एआरएम को किस हद तक आंकना चाहिए, यह पर्याप्त होगा।
सुपरकैट

0

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

नहीं, यह एक PIC के रूप में सरल नहीं है, लेकिन अभी भी काफी उल्लेखनीय है, अगर प्रोसेसर की घड़ी की दर में देरी / समय आ गया है। एआरएम आधारित विक्रेताओं की एक संख्या आपको घड़ी की दर को गुणा करने और 8 मेगाहर्ट्ज संदर्भ से 60MHz कहने की अनुमति देती है, इसलिए यदि आपको हर 4 निर्देशों को करने के बजाय कुछ 2mhz इंटरफ़ेस की आवश्यकता है, तो आप घड़ी को बढ़ावा दे सकते हैं (यदि आपके पास है) पावर बजट) और फिर एक टाइमर का उपयोग करें और अपने आप को घड़ियों के साथ-साथ अन्य चीजों को करने के लिए बहुत सारे दें।

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