হার্ড এবং নরম ভাসমান পয়েন্ট সংখ্যাগুলির মধ্যে পার্থক্য কী?


99

আমি যখন আমার ক্রস টুলচেইনের সাথে সি কোডটি কম্পাইল করি, লিঙ্কার সতর্কতার পৃষ্ঠাগুলি প্রিন্ট করে যে আমার এক্সিকিউটেবল হার্ড ফ্লোট ব্যবহার করে তবে আমার লিবিসি নরম ভাসা ব্যবহার করে। পার্থক্য কি?


এটি যদি আর্ম আর্কিটেকচার হয় তবে দয়া করে ট্যাগগুলিতে রাখুন :-)
নীল পিপেনব্রিংক

4
@ নীল পিপেনব্রিন্ক: এমআইপিএস চিপগুলিতেও এই সমস্যা রয়েছে
জাভিয়ের

উত্তর:


101

হার্ড ফ্লোটগুলি অন-চিপ ফ্লোটিং পয়েন্ট ইউনিট ব্যবহার করে। সফটওয়্যারগুলিতে নরম ফ্লোটগুলি একটি অনুকরণ করে। পার্থক্য গতি। উভয়টি একই লক্ষ্য আর্কিটেকচারে ব্যবহৃত দেখতে অবাক, কারণ চিপের একটি এফপিইউ রয়েছে বা নেই। আপনি জিএমসিতে নরম ভাসমান পয়েন্ট সক্ষম করতে পারবেন - সাফ-ফ্ল্যাট দিয়ে। আপনি যদি আপনার libcটিকে হার্ডওয়্যার ফ্লোটিং পয়েন্ট ব্যবহার করেন তবে এটি পুনরায় সংকলন করতে চাইতে পারেন।


4
"একই লক্ষ্য আর্কিটেকচারে উভয়ই ব্যবহার করা অবাক করা" এটি একটি লাইব্রেরির জন্য যথার্থতা-সমালোচনামূলক অংশগুলিতে মেশিন-স্বতন্ত্র এবং বিট-হুবহু (নরম ভাসমান) এবং ছোট ছোট বিচ্যুতি ডোনগুলির অংশগুলিতে দ্রুত (হার্ড ফ্লোট) হওয়ার অর্থটি তৈরি করতে পারে can ব্যাপার না।
ফিলল্যাব

এটি 32-বিট এআরএম এ ঘটে।
অ্যারন ফ্র্যাঙ্ক

31

ভাসমান পয়েন্ট গণিত করার জন্য তিনটি উপায় রয়েছে:

  • আপনার সিপিইউতে যদি এফপিইউ থাকে তবে ভাসমান নির্দেশাবলী ব্যবহার করুন। (দ্রুত)
  • আপনার সংকলকটি পূর্ণসংখ্যার গাণিতিকগুলিতে ভাসমান পয়েন্ট গণিতকে অনুবাদ করুন। (ধীর)
  • ভাসমান নির্দেশাবলী এবং কোনও এফপিইউবিহীন সিপিইউ ব্যবহার করুন। আপনার সিপিইউ একটি ব্যতিক্রম (রিজার্ভড ইন্সট্রাকশন, আনপিমিলিমেন্টেড ইন্সট্রাকশন বা অনুরূপ) উত্পন্ন করবে এবং যদি আপনার ওএস কার্নেলে কোনও ভাসমান পয়েন্ট এমুলেটর অন্তর্ভুক্ত থাকে তবে সেগুলি সেই নির্দেশাবলীর (সবচেয়ে ধীরতম) অনুকরণ করবে।

23

কড়া কথায় বলতে গেলে এই সব উত্তর আমার কাছে ভুল বলে মনে হচ্ছে।

আমি যখন আমার ক্রস টুলচেইনের সাথে সি কোডটি কম্পাইল করি, লিঙ্কার সতর্কতার পৃষ্ঠাগুলি প্রিন্ট করে যে আমার এক্সিকিউটেবল হার্ড ফ্লোট ব্যবহার করে তবে আমার লিবিসি নরম ভাসা ব্যবহার করে। পার্থক্য কি?

ডেবিয়ান VFP উইকি জন্য তিনটি পছন্দের উপর তথ্য রয়েছে -mfloat-abi,

  • soft - এটি খাঁটি সফ্টওয়্যার
  • softfp- এটি একটি হার্ডওয়্যার এফপিইউ সমর্থন করে তবে এবিআই নরম সামঞ্জস্যপূর্ণ।
  • hard- এবিআই ফ্লোট বা ভিএফপি রেজিস্টার ব্যবহার করে।

লিঙ্কার (লোডার) ত্রুটিটি হ'ল কারণ আপনার একটি ভাগ করা লাইব্রেরি রয়েছে যা পূর্ণসংখ্যার নিবন্ধগুলিতে ভাসমান পয়েন্ট মানগুলি পাস করবে। আপনি এখনও একটি সঙ্গে আপনার কোড কম্পাইল করতে -mfpu=vfp, ইত্যাদি কিন্তু আপনি ব্যবহার করা উচিত -mfloat-abi=softfpযাতে করে libc একটি float দরকার এটা একটি উপায় গ্রন্থাগার বুঝতে পারে পাস করা হয়।

লিনাক্স কার্নেল ভিএফপি নির্দেশাবলী অনুকরণ সমর্থন করতে পারে। স্পষ্টতই, আপনি -mfpu=noneএই ক্ষেত্রে জন্য সংকলন করা ভাল এবং কোনও লিনাক্স কার্নেল এমুলেশন উপর নির্ভর না করে সরাসরি সংকলন কোড তৈরি করতে ভাল । তবে আমি বিশ্বাস করি না যে ওপির ত্রুটিটি আসলে এই সমস্যার সাথে সম্পর্কিত। এটি পৃথক এবং অবশ্যই এর সাথে ডিল করা উচিত -mfloat-abi

আর্মভু 5 সিপিইউ সহ আর্মভ 5 শেয়ার করা লাইব্রেরি এটির বিপরীত; libc হার্ড ভাসা ছিল কিন্তু অ্যাপ্লিকেশানটি শুধুমাত্র ছিল নরম । ইস্যুটি নিয়ে কাজ করার কিছু উপায় রয়েছে তবে সঠিক বিকল্পগুলির সাথে পুনরায় সংশ্লেষ করা সর্বদা সহজ।

অন্য সমস্যাটি হ'ল লিনাক্স কার্নেলকে কনফেক্সট সুইচটিতে নিবন্ধগুলি সংরক্ষণ / পুনরুদ্ধার করতে ভিএফপি কার্য (বা যে কোনও এআরএম ভাসমান পয়েন্ট উপস্থিত রয়েছে) সমর্থন করতে হবে।


4
আধুনিক জিসিসি (~ 4.8 +) সংস্করণগুলি 'মাল্টি-লিব' সমর্থন করে, যা হার্ড ফ্লোট এবং নরম ফ্লোট লাইব্রেরি রয়েছে। পূর্ববর্তী সংস্করণগুলির জন্য আপনার নির্দিষ্ট সংস্করণ সহ একটি সংকলক তৈরি করা আবশ্যক। 'মাল্টি-লিব' জিসিসি বিতরণের সাথে সংযোগ করার সময় মাঝে মাঝে সঠিক লাইব্রেরির পাথ প্রয়োজন হয় কারণ লাইব্রেরির বেশ কয়েকটি সংস্করণ রয়েছে (সংকলকটি তৈরি করতে আরও দীর্ঘ সময় প্রয়োজন)। ডিরেক্টরিগুলির নামগুলি 'এইচএফ', 'হার্ডফ', 'লিবিফ্ফ', বা 'হার্ড-ফ্লোট' হতে পারে তবে এগুলি সাধারণত নিয়মিত 'নরম' ডিরেক্টরি বা কাছের অবস্থানে থাকে।
নির্মম আওয়াজ

এটি সঠিক উত্তর। ফ্লোটের জন্য কলিং রূপান্তরটির জন্য আপনার কোড এবং libc এর মধ্যে মিল থাকা দরকার। এটি এখনও কোনও অমিলের সাথে কাজ করতে পারে, যদি আপনি কখনও কোনও ভাসমান বিন্দু libc ফাংশন কল না করেন।
টোর ক্লিংবার্গ

13

আপনার লিবিসিটি সফ্টওয়্যার ফ্লোটিং পয়েন্ট অপারেশনের জন্য নির্মিত হয়েছিল, যখন আপনার ইইপিটি ভাসমান পয়েন্টের জন্য হার্ডওয়্যার সমর্থন ধরে ধরে সংকলিত হয়েছিল। স্বল্প মেয়াদে, আপনি সংকলক পতাকা হিসাবে নরম ভাসা জোর করতে পারেন। (আপনি যদি জিসিসি ব্যবহার করেন তবে আমার মনে হয় এটি -সোম্যাট-ফ্লোট)

দীর্ঘ মেয়াদী, যদি আপনার টার্গেটের প্রসেসরের ফ্লোটিং পয়েন্ট ক্রিয়াকলাপগুলির জন্য হার্ডওয়্যার সমর্থন থাকে তবে আপনি সাধারণত গতির জন্য সক্ষম হার্ডওয়ার ফ্লোট সহ একটি ক্রস টুলচেন তৈরি করতে বা সন্ধান করতে চাইবেন। কিছু প্রসেসর পরিবারগুলির কিছুগুলির সাথে মডেল বৈকল্পিক রয়েছে এবং কিছুগুলি হার্ডওয়্যার সমর্থন ছাড়াই। সুতরাং, উদাহরণস্বরূপ, কেবল আপনার প্রসেসরটি একটি আর্ম হিসাবে বলা আপনার কাছে হার্ডওয়্যার ফ্লোটিং পয়েন্ট সমর্থন রয়েছে কিনা তা জানা অপ্রতুল।


8

গণনা হয় ফ্লোটিং-পয়েন্ট হার্ডওয়্যার দ্বারা বা সফ্টওয়্যারটিতে পূর্ণসংখ্যার গাণিতিকের উপর ভিত্তি করে করা যেতে পারে।

হার্ডওয়্যার এ এটি করা অনেক দ্রুত, তবে অনেক মাইক্রোকন্ট্রোলারের কাছে ভাসমান-পয়েন্ট হার্ডওয়্যার নেই। সেক্ষেত্রে আপনি হয় ভাসমান পয়েন্ট (সাধারণত সর্বোত্তম বিকল্প) ব্যবহার এড়াতে পারেন বা সফ্টওয়্যার প্রয়োগের উপর নির্ভর করতে পারেন যা সি লাইব্রেরির অংশ হবে be

কন্ট্রোলারদের কয়েকটি পরিবারে, উদাহরণস্বরূপ এআরএম, ভাসমান-পয়েন্ট হার্ডওয়্যার পরিবারের কিছু মডেলগুলিতে উপস্থিত থাকে তবে অন্যদের মধ্যে নেই, সুতরাং এই পরিবারেরগুলির জন্য জিসিসি উভয়কেই সমর্থন করে। আপনার সমস্যাটি মনে হচ্ছে আপনি দুটি বিকল্প মিশ্রিত করেছেন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.