2015-01-12 5 views
8

मैं अपनी परियोजनाओं के लिए सी का उपयोग कर एसटीएम 32 प्रोसेसर पर कॉर्टेक्स-एम कोर के लिए कुछ फर्मवेयर विकसित करने जा रहा हूं, और वेब पर खोज करने के लिए मुझे कई अलग-अलग कंपाइलर्स मिल गए हैं: कील, आईएआर , लिनारो, यागार्टो और GNU Tools for ARM Embedded Processorsएआरएम कॉर्टेक्स-एम कंपाइलर मतभेद

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

क्या जेनरेट कोड इन कंपाइलरों के बीच आकार/गति के मामले में इतना अलग है? क्या कोई तुलना तालिका है? (मुझे वेब पर केवल स्टेल इंफोस मिल गए हैं)

+0

क्या आपकी मुख्य चिंता सीख रही है? तो आप कंपाइलर के प्रदर्शन के बारे में क्यों परवाह करते हैं? लिनारो और यागार्टो जीसीसी (विभिन्न पुस्तकालयों) के दो संस्करण हैं। मैं आखिरी [जिसे आपने लिंक किया है] चुनूंगा (https://launchpad.net/gcc-arm-embedded)। गति/आकार संख्या हमेशा सिंथेटिक बेंचमार्क पर आधारित होती है। अपना कोड लें और विभिन्न कंपाइलरों के साथ संकलित करें। आम तौर पर वे जिस तरह से कोड संकलक से अधिक परिणाम प्रतिबिंबित करेंगे। हां, अलग 'सी' कार्यान्वयन के साथ एक ही एल्गोरिदम। –

+0

मेरी मुख्य चिंता स्पष्ट रूप से सीख रही है, लेकिन प्रदर्शन हासिल करने के लिए एक बुरी चीज नहीं है (और इसमें बहुत मज़ा आता है)। हालांकि मैं आपके सुझावों का पालन करता हूं कि एक ही कोड को विभिन्न कंपेलरों को ले जाया जाए और मैं जांच करूंगा कि मुझे कौन सा परिचित हो गया है। टिप्पणी –

+0

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

उत्तर

3

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

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

कोई सही जवाब नहीं है, कोई सार्वभौमिक "सर्वश्रेष्ठ" नहीं है, यह दर्शक की नजर में है। आपके लिए कौन सा टूल उपयोग करना आसान है, जो आपको गुई या सुंदर रंगों या ध्वनि कार्ड ध्वनियों या जो भी हो, के लिए बेहतर लगता है। और वहां से जाओ।

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

कॉर्टेक्स-एमएस armv6m और armv7m परिवारों में विभाजित हैं, v6m (प्रांतस्था-एम 0) केवल अंगूठे 2 एक्सटेंशन की एक छोटी संख्या, armv7m के अंगूठे के बारे में 150 thumbv2 एक्सटेंशन हैं, इसलिए आपको यह जानने की ज़रूरत है कि आपके उपकरण क्या समर्थन करते हैं और गलत चिप पर गलत सामग्री का उपयोग नहीं करते हैं। फिर कंपाइलर्स यदि वे सभी जानते हैं तो वे एक ही स्रोत कोड से विभिन्न निर्देश मिश्रणों का उत्पादन कर सकते हैं। अलग-अलग कमांड लाइन विकल्पों का उपयोग करके उसी कंपाइलर या परिवार के भीतर आप बहुत अलग कोड प्राप्त कर सकते हैं। और उसके बाद एक कॉर्टेक्स-एम 4 के साथ कैश के साथ यदि आपके पास ऐसी चीज है, तो कोड कैश लाइनों में कोड कैसे है, इस पर निर्भर करता है कि आपको काफी अलग प्रदर्शन मिल सकता है, इसलिए बेंचमार्किंग प्रत्येक ब्लॉब के लिए स्वयं में एक शोध प्रोजेक्ट है सी कोड जिसे आप बेंचमार्क करना चाहते हैं। एक एकल कंपाइलर के भीतर प्रदर्शन सीमा किसी अन्य कंपाइलर को छाया दे सकती है या ओवरलैप महत्वपूर्ण नहीं हो सकता है।

यदि आपके पास टूल्स तक पहुंच है तो आप प्रतिस्पर्धात्मक टूल का उपयोग करके सीखने और नौकरी में जाने में सक्षम होने और नौकरी के लिए सही टूल के रूप में जो भी देखते हैं, उसे चुनकर व्यावसायिक रूप से मूल्य जोड़ते हैं। एक किल घर में और तुरंत या एक gnu घर काम करने में सक्षम हो और तुरंत काम करते हैं। यदि आप केवल नौकरी कर रहे हैं और नौकरी एक किल हाउस के लिए है तो आप नौकरी खो सकते हैं।

+0

अत्यंत विस्तृत टिप्पणी के लिए धन्यवाद! मैं thumb2 एक्सटेंशन और compilers के लिए समर्थन पर संगतता की जांच करूंगा, मैं आपको बता दूंगा कि मैं कहां उतरूंगा –

3

हमने कुछ तुलना की है; आईएआर और कील आमतौर पर डिफ़ॉल्ट सेटिंग्स के साथ जीसीसी से बेहतर प्रदर्शन करते हैं। लेकिन कुछ कंपाइलर झंडे के साथ आप जीएआर को आईएआर और कील के नतीजे के करीब आ सकते हैं।

आपके द्वारा उल्लेख किए गए कुछ कंपाइलर्स एकीकृत विकास वातावरण हैं। अन्य सिर्फ सादे कंपाइलर्स हैं। कुछ लोग आपके लिए संकलित, संपादक और डीबगर के साथ एक एकीकृत वातावरण पसंद करते हैं। दूसरों को अपना पर्यावरण स्थापित करना पसंद करते हैं। यह स्वाद का मामला है।

यागार्टो के अतिरिक्त, एआरएम के लिए जीसीसी का "कोड सॉर्केरी" वितरण भी है।