স্থির পয়েন্ট বনাম ভাসমান পয়েন্ট গণনার তুলনামূলক যোগ্যতা?


9

আমার কাছে একটি ডিজিটাল সিগন্যাল প্রসেসিং সিস্টেম রয়েছে যা ডাবল যথার্থ ফ্লোটিং পয়েন্ট নম্বর ব্যবহার করে দ্রুত এক্স ৮86 মেশিনে চালিত হয় । এটি আমার কাছে ঘটেছিল যে আমি সত্যিই ভাসমান পয়েন্ট উপস্থাপনের বিশাল গতিশীল পরিসীমাটি ব্যবহার করছি না - সমস্ত পরিমাণটি ± 32768 এর মধ্যে সহজেই ফিট করে fit

আমার প্রশ্ন: এটি কি সম্ভব যে স্থির পয়েন্ট গণনাগুলিতে স্যুইচ করা সংখ্যার যথার্থতা (উচ্চ অগ্রাধিকার) বা গণনার সময় (নিম্ন অগ্রাধিকার) এ কোনও সুবিধা প্রদান করবে?

অবশ্যই, উত্তর নির্দিষ্ট পয়েন্ট গণনার জন্য কতগুলি বিট উপলব্ধ তা নির্ভর করে। আদর্শ নির্দিষ্ট-পয়েন্ট সিস্টেমগুলি কতগুলি নির্ভুলতার ব্যবহার করে? X86-64-তে 64 বিট ( 16 বিট পূর্ণসংখ্যার অংশ, 48 বিট ভগ্নাংশ অংশ ) সহ কার্যকরভাবে স্থির-পয়েন্ট গণনা করা সম্ভব ?

আমি সবসময় ভেবেছিলাম যে ফিক্স-পয়েন্ট গণনাগুলি কেবলমাত্র সিপিইউ শক্তি সীমাবদ্ধ এমন পরিস্থিতিতে ব্যবহার করা হত - যখন সিপিইউ পাওয়ার কোনও উদ্বেগ নয় তখন ফিক্সড-পয়েন্ট গণনাগুলি কী বোঝায়?


ডাবল-স্পষ্টতা ভাসমান-পয়েন্ট মান আপনাকে যে significant 15 টি উল্লেখযোগ্য পরিসংখ্যান দেয় তার চেয়ে বেশি আপনার কী দরকার? যদিও বিস্তৃত সাধারণীকরণগুলি খারাপ, আমি বলব যে আপনি যদি সমস্ত স্থির-পয়েন্ট ডিএসপি সিস্টেমগুলির সমষ্টি দেখেন তবে 16-বিট পূর্ণসংখ্যার সর্বাধিক সাধারণ ফর্ম্যাট হতে পারে।
জেসন আর

উত্তর:


7

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

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

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

আপনি যদি প্রক্রিয়াটি দ্রুত করতে চান তবে এটি করার উপায় হ'ল ডাবল-স্পষ্টতা ভাসমান থেকে একক নির্ভুলতা ফ্লোটে পরিবর্তন করা। এটি গতিতে উল্লেখযোগ্য বৃদ্ধি ঘটায়। এটি অবশ্যই আপনার সংখ্যাগত নির্ভুলতা হ্রাস করবে।


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

একক নির্ভুলতার ফ্লোটে 23 বিট ম্যান্টিসি রয়েছে, ডাবলসের মধ্যে 52 বিট রয়েছে।
পল আর

ডাবল স্পষ্টতা ভাসমান পয়েন্টের বিকল্প হিসাবে আমি 16 বিটস ইন্টিজার + 48 বিট ভগ্নাংশের পরামর্শ দিচ্ছি। আমি 32768 উল্লেখ করেছি যাতে আমার মানগুলি এই ব্যাপ্তিতে সহজেই ফিট হয়ে যায়। এই মানগুলিতে সীমাবদ্ধতা দেওয়া, আমি মনে করি Q16.48 ডাবল নির্ভুলতা ভাসমান পয়েন্টের চেয়ে আরও বেশি সংখ্যক নির্ভুলতা সরবরাহ করবে।
নিবোট

1
@ নিবোট ঠিক আছে। ডাবলসের -16 থেকে +16 পর্যন্ত ভাল নির্ভুলতা থাকবে এবং ভগ্নাংশের পূর্ণসংখ্যার -32769 এবং +32768 পর্যন্ত অন্য কোথাও ভাল নির্ভুলতা থাকবে। তারা অবশ্যই এর বাইরে কিছু উপস্থাপন করতে পারেনি। এগুলি ডাবলসের থেকেও ধীর হবে। আমার জন্য সীমিত পরিসীমা এবং ধীর গতি চুক্তি ভঙ্গকারী হবে, তবে ওয়াইএমএমভি।
জিম ক্লে

6

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

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

তবে মেমরি এবং প্রসেসরের ক্যাশে পদক্ষেপগুলিও বিবেচনা করুন। ডেটা ক্যাশে সম্পূর্ণরূপে একটি বৃহত গণনা ফিট করার জন্য ছোট ডেটা ধরণের (শর্ট ইন্টার এবং ফ্লোট) এর চতুর ব্যবহার কোনও খাঁটি এফপিইউ ব্যান্ডউইথ সুবিধাগুলি অফসেট করতে পারে।


2
পারফরম্যান্সের ক্ষেত্রে ক্যাশে ইস্যুগুলির গুরুত্বের উল্লেখ করার জন্য +1। আধুনিক x86 প্রসেসরের উপর, ক্যাশে মাথায় রেখে আপনার অ্যালগরিদম ডিজাইন করা পারফরম্যান্সে বিশাল প্রভাব ফেলতে পারে।
জেসন আর

5

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

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


আমি আগ্রহী বৃদ্ধি সংখ্যাসূচক সঠিকতা, সমানে সঙ্কুচিত করে আসছি না।
নিবোট

দ্বিগুণের তুলনায় সংক্ষিপ্ত নির্ভুলতার উন্নতি করতে আপনি কীভাবে নির্দিষ্ট পয়েন্টটিকে দেখেন, যার 52 টি বিটস যথার্থতা এবং ইতিমধ্যে একটি বিশাল গতিশীল পরিসর রয়েছে?
পল আর

ঠিক আছে, আমি 52 টিরও বেশি বিট সহ একটি স্থির-পয়েন্ট ফর্ম্যাট ব্যবহার করতে পারি।
নিবোট

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

3

এখানে সরবরাহ করা খুব ভাল উত্তর ছাড়াও কয়েকটি জিনিস মূল্যবান:

  • এমন পরিস্থিতিতে রয়েছে যেখানে আপনার প্রক্রিয়া করা ডেটার গতিশীল পরিসরে আপনার যদি খুব বুনিয়াদি প্রয়োজনীয়তা থাকে তবে তার উপর সঞ্চালিত কিছু ক্রিয়াকলাপের জন্য আপনার এখনও খুব ভাল নির্ভুলতার প্রয়োজন হবে - উদাহরণস্বরূপ আপনি একটি আইআইআর ফিল্টার প্রয়োগ করতে চাইবেন যা তুলনামূলকভাবে ছোট সহগ প্রয়োজন; এবং এগুলি কেটে ফেলা অস্থিরতার কারণ হতে পারে। আপনার সিস্টেমে মতামত পাওয়া মাত্রই, একটি নির্দিষ্ট সুযোগের কোয়ান্টাইজেশন / কাটছাঁট করার সমস্যাগুলি নির্দিষ্ট পয়েন্টটি ব্যবহার করার সময় আপনাকে পিছনে কাটাবে - ফিল্টার টপোলজি এবং ট্র্যাঙ্কেশন / ভগ্নাংশ-সংরক্ষণ প্রকল্পগুলির মতো বিষয় সম্পর্কে আপনাকে আরও বেশি যত্নবান হতে হবে।
  • অনেকগুলি ডিএসপি / ডিএসসি আর্কিটেকচারের বিপরীতে, x86 এর মধ্যে স্যাচুরেটেড পূর্ণসংখ্যা অপারেশন নেই (ভাল, এটি এসএসইতে আছে, স্ট্যান্ডার্ড স্কেলার কোডে নয়)। এর অর্থ হল যে অতিরিক্ত প্রবাহের ক্ষেত্রে, খারাপ জিনিসগুলি ঘটতে পারে - চিহ্নগুলি পরিবর্তন করে এবং "মোড়ানো" এর মান দেয়। আপনাকে অতিরিক্ত সতর্কতা অবলম্বন করতে হবে ওভারফ্লো এবং গতিশীল পরিসীমা নিয়ে, বা অপারেন্ডস রেঞ্জগুলিতে পরীক্ষা ছিটানোসব আপনার কোড জুড়ে। এটি কর্মক্ষমতা গুরুতরভাবে আঘাত করতে পারে। তুলনা করে, ভাসমান বিন্দুগুলি এই সমস্যার জন্য আরও স্থিতিস্থাপক, কারণ বৃহত গতিশীল পরিসর আপনাকে আরও "হেডরুম" দেয় এবং ওভারফ্লোগুলি বিপর্যয়কর ব্যর্থতার দিকে পরিচালিত করে না। ডেস্কটপ কম্পিউটারে চলমান বেশিরভাগ অডিও সিগন্যাল প্রসেসিং কোড -1.0 .. 1.0 ব্যাপ্তি, একক বা ডাবল নির্ভুলতা ব্যবহার করছে; সুতরাং এটি হেডরুমের কয়েক শতাধিক ডিবি দেয়। আমি উভয় পদ্ধতির সাথে অডিও সিগন্যাল প্রসেসিং কোড লিখেছি এবং ভাসমান পয়েন্ট ব্যবহার করার সময় কেবলমাত্র কয়েকটি জায়গা থাকে যখন আমাকে স্পষ্টভাবে সিগন্যালটি ক্লিপ / পরিপূর্ণ করতে হয় - সাধারণত সংকেত প্রক্রিয়াকরণ শৃঙ্খলের শেষে বা যেখানে প্রতিক্রিয়া দেখা দেয় সেখানে।

1

কিছু বিষয় বিবেচনা করুন:

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

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


আমি বোঝাতে চাইছি না যে আমি আমার পরিমাণগুলি ধারণ করতে 16-বিট শর্টস ব্যবহার করব, বরং 16-বিট পূর্ণসংখ্যার অংশ এবং 48-বিট ভগ্নাংশের অংশযুক্ত 64-বিট নির্দিষ্ট পয়েন্ট বিন্যাসের মতো কিছু। অনুপ্রেরণাটি হ'ল, যদি আমি ভাসমান পয়েন্ট ফর্ম্যাটে বেশিরভাগ এক্সপোশন বিট ব্যবহার না করে থাকি তবে পরিবর্তে significant বিটগুলি অতিরিক্ত উল্লেখযোগ্য সংখ্যা সরবরাহ করার জন্য যদি আমার সংখ্যাগত নির্ভুলতা উন্নত হয়?
নিবোট

আপনার আসল প্রশ্নের সাথে আপনার 16-বিট পূর্ণসংখ্যার + 48-বিট ভগ্নাংশ যুক্ত করা উচিত। এটা দেখতে অনেকটা215বিভ্রান্তি সৃষ্টি করছে
ক্রিস্টোফার ফেল্টন

আরও একটি জিনিস: এটি আমার কাছে মনে হয় যে স্ট্যাক ওভারফ্লো (ডিএসপি.এস.এস. এর পরিবর্তে, এখানে) অপরটির তুলনায় একটি ফর্ম্যাট সম্পর্কে ভাল কারণগুলি জানতে গভীর জায়গা হবে get
হেলটনবাইকার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.