আমি যখন আমার ক্রস টুলচেইনের সাথে সি কোডটি কম্পাইল করি, লিঙ্কার সতর্কতার পৃষ্ঠাগুলি প্রিন্ট করে যে আমার এক্সিকিউটেবল হার্ড ফ্লোট ব্যবহার করে তবে আমার লিবিসি নরম ভাসা ব্যবহার করে। পার্থক্য কি?
আমি যখন আমার ক্রস টুলচেইনের সাথে সি কোডটি কম্পাইল করি, লিঙ্কার সতর্কতার পৃষ্ঠাগুলি প্রিন্ট করে যে আমার এক্সিকিউটেবল হার্ড ফ্লোট ব্যবহার করে তবে আমার লিবিসি নরম ভাসা ব্যবহার করে। পার্থক্য কি?
উত্তর:
হার্ড ফ্লোটগুলি অন-চিপ ফ্লোটিং পয়েন্ট ইউনিট ব্যবহার করে। সফটওয়্যারগুলিতে নরম ফ্লোটগুলি একটি অনুকরণ করে। পার্থক্য গতি। উভয়টি একই লক্ষ্য আর্কিটেকচারে ব্যবহৃত দেখতে অবাক, কারণ চিপের একটি এফপিইউ রয়েছে বা নেই। আপনি জিএমসিতে নরম ভাসমান পয়েন্ট সক্ষম করতে পারবেন - সাফ-ফ্ল্যাট দিয়ে। আপনি যদি আপনার libcটিকে হার্ডওয়্যার ফ্লোটিং পয়েন্ট ব্যবহার করেন তবে এটি পুনরায় সংকলন করতে চাইতে পারেন।
ভাসমান পয়েন্ট গণিত করার জন্য তিনটি উপায় রয়েছে:
কড়া কথায় বলতে গেলে এই সব উত্তর আমার কাছে ভুল বলে মনে হচ্ছে।
আমি যখন আমার ক্রস টুলচেইনের সাথে সি কোডটি কম্পাইল করি, লিঙ্কার সতর্কতার পৃষ্ঠাগুলি প্রিন্ট করে যে আমার এক্সিকিউটেবল হার্ড ফ্লোট ব্যবহার করে তবে আমার লিবিসি নরম ভাসা ব্যবহার করে। পার্থক্য কি?
ডেবিয়ান VFP উইকি জন্য তিনটি পছন্দের উপর তথ্য রয়েছে -mfloat-abi
,
soft
- এটি খাঁটি সফ্টওয়্যারsoftfp
- এটি একটি হার্ডওয়্যার এফপিইউ সমর্থন করে তবে এবিআই নরম সামঞ্জস্যপূর্ণ।hard
- এবিআই ফ্লোট বা ভিএফপি রেজিস্টার ব্যবহার করে।লিঙ্কার (লোডার) ত্রুটিটি হ'ল কারণ আপনার একটি ভাগ করা লাইব্রেরি রয়েছে যা পূর্ণসংখ্যার নিবন্ধগুলিতে ভাসমান পয়েন্ট মানগুলি পাস করবে। আপনি এখনও একটি সঙ্গে আপনার কোড কম্পাইল করতে -mfpu=vfp
, ইত্যাদি কিন্তু আপনি ব্যবহার করা উচিত -mfloat-abi=softfp
যাতে করে libc একটি float দরকার এটা একটি উপায় গ্রন্থাগার বুঝতে পারে পাস করা হয়।
লিনাক্স কার্নেল ভিএফপি নির্দেশাবলী অনুকরণ সমর্থন করতে পারে। স্পষ্টতই, আপনি -mfpu=none
এই ক্ষেত্রে জন্য সংকলন করা ভাল এবং কোনও লিনাক্স কার্নেল এমুলেশন উপর নির্ভর না করে সরাসরি সংকলন কোড তৈরি করতে ভাল । তবে আমি বিশ্বাস করি না যে ওপির ত্রুটিটি আসলে এই সমস্যার সাথে সম্পর্কিত। এটি পৃথক এবং অবশ্যই এর সাথে ডিল করা উচিত -mfloat-abi
।
আর্মভু 5 সিপিইউ সহ আর্মভ 5 শেয়ার করা লাইব্রেরি এটির বিপরীত; libc হার্ড ভাসা ছিল কিন্তু অ্যাপ্লিকেশানটি শুধুমাত্র ছিল নরম । ইস্যুটি নিয়ে কাজ করার কিছু উপায় রয়েছে তবে সঠিক বিকল্পগুলির সাথে পুনরায় সংশ্লেষ করা সর্বদা সহজ।
অন্য সমস্যাটি হ'ল লিনাক্স কার্নেলকে কনফেক্সট সুইচটিতে নিবন্ধগুলি সংরক্ষণ / পুনরুদ্ধার করতে ভিএফপি কার্য (বা যে কোনও এআরএম ভাসমান পয়েন্ট উপস্থিত রয়েছে) সমর্থন করতে হবে।
আপনার লিবিসিটি সফ্টওয়্যার ফ্লোটিং পয়েন্ট অপারেশনের জন্য নির্মিত হয়েছিল, যখন আপনার ইইপিটি ভাসমান পয়েন্টের জন্য হার্ডওয়্যার সমর্থন ধরে ধরে সংকলিত হয়েছিল। স্বল্প মেয়াদে, আপনি সংকলক পতাকা হিসাবে নরম ভাসা জোর করতে পারেন। (আপনি যদি জিসিসি ব্যবহার করেন তবে আমার মনে হয় এটি -সোম্যাট-ফ্লোট)
দীর্ঘ মেয়াদী, যদি আপনার টার্গেটের প্রসেসরের ফ্লোটিং পয়েন্ট ক্রিয়াকলাপগুলির জন্য হার্ডওয়্যার সমর্থন থাকে তবে আপনি সাধারণত গতির জন্য সক্ষম হার্ডওয়ার ফ্লোট সহ একটি ক্রস টুলচেন তৈরি করতে বা সন্ধান করতে চাইবেন। কিছু প্রসেসর পরিবারগুলির কিছুগুলির সাথে মডেল বৈকল্পিক রয়েছে এবং কিছুগুলি হার্ডওয়্যার সমর্থন ছাড়াই। সুতরাং, উদাহরণস্বরূপ, কেবল আপনার প্রসেসরটি একটি আর্ম হিসাবে বলা আপনার কাছে হার্ডওয়্যার ফ্লোটিং পয়েন্ট সমর্থন রয়েছে কিনা তা জানা অপ্রতুল।
গণনা হয় ফ্লোটিং-পয়েন্ট হার্ডওয়্যার দ্বারা বা সফ্টওয়্যারটিতে পূর্ণসংখ্যার গাণিতিকের উপর ভিত্তি করে করা যেতে পারে।
হার্ডওয়্যার এ এটি করা অনেক দ্রুত, তবে অনেক মাইক্রোকন্ট্রোলারের কাছে ভাসমান-পয়েন্ট হার্ডওয়্যার নেই। সেক্ষেত্রে আপনি হয় ভাসমান পয়েন্ট (সাধারণত সর্বোত্তম বিকল্প) ব্যবহার এড়াতে পারেন বা সফ্টওয়্যার প্রয়োগের উপর নির্ভর করতে পারেন যা সি লাইব্রেরির অংশ হবে be
কন্ট্রোলারদের কয়েকটি পরিবারে, উদাহরণস্বরূপ এআরএম, ভাসমান-পয়েন্ট হার্ডওয়্যার পরিবারের কিছু মডেলগুলিতে উপস্থিত থাকে তবে অন্যদের মধ্যে নেই, সুতরাং এই পরিবারেরগুলির জন্য জিসিসি উভয়কেই সমর্থন করে। আপনার সমস্যাটি মনে হচ্ছে আপনি দুটি বিকল্প মিশ্রিত করেছেন।