जब मैं अपने क्रॉस टूलचेन के साथ सी कोड संकलित करता हूं, तो लिंकर चेतावनियों के पृष्ठों को प्रिंट करता है और कहता है कि मेरा निष्पादन योग्य हार्ड फ्लोट का उपयोग करता है लेकिन मेरा libc मुलायम फ्लोट का उपयोग करता है। क्या फर्क पड़ता है?हार्ड और मुलायम फ्लोटिंग पॉइंट नंबरों के बीच क्या अंतर है?
उत्तर
हार्ड फ्लोट ऑन-चिप फ्लोटिंग पॉइंट यूनिट का उपयोग करते हैं। सॉफ्ट फ्लोट सॉफ्टवेयर में एक अनुकरण करते हैं। अंतर गति है। दोनों को एक ही लक्ष्य आर्किटेक्चर पर इस्तेमाल करना अजीब बात है, क्योंकि चिप में या तो एफपीयू है या नहीं। आप जीसीसी में सॉफ्ट-फ्लोटिंग पॉइंट को सॉफ्ट-फ्लोट के साथ सक्षम कर सकते हैं। यदि आप इसका उपयोग करते हैं तो आप हार्डवेयर फ्लोटिंग पॉइंट का उपयोग करने के लिए अपने libc को पुन: संकलित करना चाह सकते हैं।
"एक ही लक्ष्य आर्किटेक्चर पर दोनों को देखने के लिए अजीब बात है" यह पुस्तकालय के लिए समझ में आता है मशीनों से स्वतंत्र और बिट-सटीक (मुलायम फ्लोट) सटीकता-महत्वपूर्ण भागों और तेज़ (हार्ड फ्लोट) में उन हिस्सों में हों जहां छोटे विचलन कोई फर्क नहीं पड़ता। – PhilLab
ऐसा लगता है जैसे आपका libc सॉफ़्टवेयर फ़्लोटिंग पॉइंट ऑपरेशंस के लिए बनाया गया था, जबकि आपके exe को फ़्लोटिंग पॉइंट के लिए हार्डवेयर समर्थन मानने के लिए संकलित किया गया था। संक्षेप में, आप एक कंपाइलर ध्वज के रूप में मुलायम फ्लोट को मजबूर कर सकते हैं। (यदि आप जीसीसी का उपयोग कर रहे हैं तो मुझे लगता है कि यह -मोफ्ट-फ्लोट है)
लंबे समय तक, यदि आपके लक्ष्य के प्रोसेसर के पास फ्लोटिंग पॉइंट ऑपरेशंस के लिए हार्डवेयर समर्थन है, तो आप आमतौर पर हार्डवेयर फ्लोट सक्षम के साथ क्रॉस टूलचेन बनाना या खोजना चाहते हैं गति। कुछ प्रोसेसर परिवारों में कुछ मॉडल प्रकार होते हैं जिनमें कुछ हार्डवेयर समर्थन के बिना होते हैं। तो, उदाहरण के लिए, केवल यह कहकर कि आपका प्रोसेसर एक एआरएम है, यह जानने के लिए अपर्याप्त है कि क्या आपके पास हार्डवेयर फ़्लोटिंग पॉइंट समर्थन है या नहीं।
वहाँ चल बिन्दु गणित करने के लिए तीन तरीके हैं:
- उपयोग नाव निर्देश आपके CPU एक एफपीयू है। (तेज़)
- क्या आपका कंपाइलर पूर्ण अंकगणितीय के लिए अंकगणित बिंदु अंकगणित का अनुवाद करता है। (धीमी)
- कोई एफपीयू वाले फ्लोट निर्देश और सीपीयू का उपयोग करें। आपका सीपीयू एक अपवाद उत्पन्न करेगा (आरक्षित निर्देश, अनुपूरक निर्देश या इसी तरह), और यदि आपके ओएस कर्नेल में एक फ्लोटिंग पॉइंट एमुलेटर शामिल है तो यह उन निर्देशों (धीमे) को अनुकरण करेगा।
गणना या तो फ्लोटिंग-पॉइंट हार्डवेयर या पूर्णांक अंकगणितीय के आधार पर सॉफ़्टवेयर में किया जा सकता है।
हार्डवेयर में ऐसा करना बहुत तेज़ है, लेकिन कई माइक्रोकंट्रोलर में फ्लोटिंग-पॉइंट हार्डवेयर नहीं है। उस स्थिति में आप या तो फ्लोटिंग पॉइंट (आमतौर पर सबसे अच्छा विकल्प) का उपयोग करने से बच सकते हैं या सॉफ्टवेयर में कार्यान्वयन पर भरोसा कर सकते हैं, जो सी लाइब्रेरी का हिस्सा होगा।
नियंत्रकों के कुछ परिवारों में, उदाहरण के लिए एआरएम, फ्लोटिंग पॉइंट हार्डवेयर परिवार के कुछ मॉडलों में मौजूद है लेकिन दूसरों में नहीं, इसलिए इन परिवारों के लिए जीसीसी दोनों का समर्थन करता है। आपकी समस्या यह प्रतीत होती है कि आपने दो विकल्पों को मिश्रित किया है।
कड़ाई से बोलते हुए, ये सभी उत्तर मेरे लिए गलत लगते हैं।
जब मैं अपने पार toolchain के साथ सी कोड संकलन, चेतावनी देता है कि मेरा निष्पादन कठिन तैरता का उपयोग करता है, लेकिन मेरी libc नरम तैरता का उपयोग करता है के संयोजक प्रिंट पृष्ठों की है। क्या फर्क पड़ता है?
डेबियन VFP wiki-mfloat-abi
के लिए तीन विकल्प के बारे में जानकारी है,
soft
- यह शुद्ध सॉफ्टवेयरsoftfp
है - यह एक हार्डवेयर एफपीयू का समर्थन करता है, लेकिन ABI नरम संगत है।hard
- एबीआई फ्लोट या VFP रजिस्टरों का उपयोग करता है।
लिंकर (लोडर) त्रुटि इसलिए है क्योंकि आपके पास एक साझा लाइब्रेरी है जो पूर्णांक रजिस्टरों में फ़्लोटिंग पॉइंट मान पास करेगी। तुम अब भी, आदि एक -mfpu=vfp
के साथ अपने कोड संकलन कर सकते हैं, लेकिन आप -mfloat-abi=softfp
का उपयोग करना चाहिए ताकि अगर libc एक नाव की जरूरत है यह एक तरह से पुस्तकालय को समझता में पारित हो जाता है।
लिनक्स कर्नेल VFP निर्देश के अनुकरण का समर्थन कर सकते हैं। जाहिर है, आप बेहतर इस मामले के लिए -mfpu=none
साथ संकलित करने के लिए कर रहे हैं और संकलन सीधे किसी भी लिनक्स कर्नेल अनुकरण पर निर्भर रहने के बजाय कोड उत्पन्न की है। हालांकि, मुझे विश्वास नहीं है कि ओपी की त्रुटि वास्तव में इस मुद्दे से संबंधित है। यह अलग है और -mfloat-abi
के साथ भी निपटाया जाना चाहिए।
Armv5 shared library with ArmV7 CPU इस एक के विपरीत है; libc कठिन नाव था, लेकिन आवेदन केवल नरम था। इस मुद्दे के आसपास काम करने के कुछ तरीके हैं, लेकिन सही विकल्पों के साथ पुन: संकलन हमेशा सबसे आसान है।
एक और मुद्दा यह है कि लिनक्स कर्नेल VFP कार्य (या जो भी एआरएम चल बिन्दु मौजूद है) एक संदर्भ स्विच पर बचाने के लिए/रजिस्टर बहाल समर्थन करना चाहिए है।
आधुनिक जीसीसी (~ 4.8 +) संस्करण 'बहु-lib' का समर्थन करते हैं, जिनमें हार्ड फ्लोट और मुलायम फ्लोट लाइब्रेरी हैं। पहले के संस्करणों के लिए आवश्यक था कि आपके पास एक विशिष्ट संस्करण के साथ बनाया गया कंपाइलर था। कभी-कभी 'बहु-lib' gcc वितरण से लिंक करते समय सही लाइब्रेरी का पथ आवश्यक होता है क्योंकि पुस्तकालयों के कई संस्करण होते हैं (कंपाइलर बनाने के लिए अधिक समय की आवश्यकता होती है)। निर्देशिका नाम 'एचएफ', 'हार्डफ', 'libhf', या 'हार्ड-फ्लोट' हो सकते हैं लेकिन वे आमतौर पर नियमित 'मुलायम' निर्देशिका या पास के स्थान के अंतर्गत होते हैं। –
यह सही जवाब है। फ्लोट्स के लिए कॉलिंग रूपांतरण आपके कोड और libc के बीच मेल खाना चाहिए। यह अभी भी मेल नहीं खा सकता है, अगर आप कभी भी फ्लोटिंग पॉइंट libc फ़ंक्शंस को कभी भी कॉल नहीं करते हैं। –
- 1. फ्लोटिंग पॉइंट नंबरों के लिए एंड्रॉइड नंबरपिकर
- 2. हार्ड रैप और मुलायम लपेटो के बीच अंतर?
- 3. पर्ल प्रिंट फ्लोटिंग-पॉइंट नंबरों के लिए सटीकता क्या है?
- 4. फ्लोटिंग-पॉइंट
- 5. क्या कॉस (ए) फ्लोटिंग पॉइंट
- 6. फ्लोटिंग पॉइंट सदस्यों
- 7. सी - फ्लोटिंग पॉइंट राउंडिंग
- 8. रूबी फ्लोटिंग पॉइंट त्रुटियां
- 9. एंड्रॉइड फ्लोटिंग पॉइंट गणित प्रदर्शन
- 10. "1.0f" और "1.f" के बीच क्या अंतर है?
- 11. एसक्यूएल सेट फ्लोटिंग पॉइंट परिशुद्धता
- 12. फ्लोटिंग पॉइंट तुलना में समस्याएं
- 13. पायथन में फ्लोटिंग पॉइंट परिशुद्धता क्या परिभाषित करता है?
- 14. जीसीसी वीसी के फ्लोटिंग पॉइंट मॉडल स्विच के बराबर है?
- 15. "गिट चेकआउट-एफ" और "गिट रीसेट - हार्ड हेड" के बीच क्या अंतर है?
- 16. क्या गिट रीसेट - हार्ड हेड और गिट चेकआउट के बीच कोई अंतर है?
- 17. क्या "गिट रीसेट - हार्ड हैश" और "गिट चेकआउट हैश" के बीच कोई अंतर है?
- 18. समूहों में फ़्लोटिंग-पॉइंट नंबरों की सॉर्ट सूची
- 19. नकारात्मक शून्य फ्लोटिंग पॉइंट मान के लिए उपयोग करता है?
- 20. # {} $ {} और% {} के बीच क्या अंतर है?
- 21. [अपरिभाषित] और [,] के बीच क्या अंतर है?
- 22. $ और $$ के बीच क्या अंतर है?
- 23. के बीच क्या अंतर है:। और: आर !?
- 24. भिन्नता और '-' के बीच क्या अंतर है?
- 25. "$^एन" और "$ +" के बीच क्या अंतर है?
- 26. रूबी बिगडेसिमल सैनिटी चेक (फ्लोटिंग पॉइंट न्यूब)
- 27. फिक्स्ड पॉइंट प्रोसेसिंग: uint16_t और uint_fast16_t के बीच क्या अंतर है?
- 28. फ़्लोटिंग पॉइंट एड वी। फ्लोटिंग पॉइंट की सापेक्ष गति क्या है
- 29. फ्लोटिंग पॉइंट मानों पर "राउंड आधा अप"
- 30. सी सहयोगी में फ्लोटिंग पॉइंट ऑपरेशंस हैं?
यदि यह एआरएम आर्किटेक्चर है तो कृपया इसे टैग में रखें :-) –
@Nils Pipenbrinck: एमआईपीएस चिप्स में भी यह समस्या है – Javier