বিদ্যমান উত্তরগুলি সত্যই হার্ডওয়্যার দিকটি চিহ্নিত করতে পারে নি, তাই এখানে on কোণে কিছুটা। প্রচলিত জ্ঞান হ'ল গুণ ও বিভাগ স্থানান্তরের চেয়ে অনেক ধীর গতিতে রয়েছে তবে আজকের আসল কাহিনীটি আরও সংক্ষিপ্ত।
উদাহরণস্বরূপ, এটি অবশ্যই সত্য যে গুণটি হার্ডওয়ারে প্রয়োগের জন্য আরও জটিল ক্রিয়াকলাপ, তবে এটি সর্বদা ধীর হয় না । এটি সক্রিয় আউট হিসাবে, add
উল্লেখযোগ্যভাবে অধিক বাস্তবায়ন জটিল xor
(অথবা সাধারণ কোন, bitwise অপারেশনে), কিন্তু add
(এবং sub
) সাধারণত তাদের অপারেশন নিবেদিত যথেষ্ট ট্রানজিস্টর পেতে যে শেষ ঠিক যেমন ফাস্ট bitwise অপারেটরদের যেমন হচ্ছে। সুতরাং আপনি গতির গাইড হিসাবে কেবল হার্ডওয়্যার বাস্তবায়ন জটিলতার দিকে নজর দিতে পারবেন না।
সুতরাং আসুন, বিশদটি দেখুন "সম্পূর্ণ" অপারেটরগুলি বনাম গুন এবং স্থানান্তরের মতো স্থানান্তরকরণের দিকে।
নাড়াচাড়া
প্রায় সকল হার্ডওয়্যারে, একটি ধ্রুবক পরিমাণে (যেমন, সংকলক সংকলন করতে পারে এমন পরিমাণের সাহায্যে) পরিমাণ দ্রুত স্থানান্তর করা দ্রুত হয় । বিশেষত, এটি সাধারণত একক চক্রের বিলম্বের সাথে এবং প্রতি চক্র 1 বা আরও ভাল এর থ্রুটপুট সহ ঘটে। কিছু হার্ডওয়্যারে (যেমন, কিছু ইন্টেল এবং এআরএম চিপস), ধ্রুবক দ্বারা নির্দিষ্ট শিফট এমনকি "ফ্রি" হতে পারে কারণ এগুলি অন্য নির্দেশিকায় তৈরি করা যেতে পারে ( lea
ইন্টেলের উপর, এআরএমের প্রথম উত্সের বিশেষ স্থানান্তর ক্ষমতা)।
একটি ভেরিয়েবল পরিমাণে স্থানান্তর করা ধূসর অঞ্চলের বেশি। পুরানো হার্ডওয়্যারে, এটি কখনও কখনও খুব ধীর ছিল এবং গতি প্রজন্ম থেকে প্রজন্মে পরিবর্তিত হয়েছিল। উদাহরণস্বরূপ, ইন্টেলের পি 4 এর প্রাথমিক প্রকাশের সময়, একটি পরিবর্তনশীল পরিমাণে স্থানান্তর করা অত্যন্ত ধীর ছিল - শিফটের পরিমাণের সাথে আনুপাতিক সময় প্রয়োজন! এই প্ল্যাটফর্মে, শিফটগুলি প্রতিস্থাপনের জন্য গুণগুলি ব্যবহার করা লাভজনক হতে পারে (অর্থাত্ বিশ্বটি উল্টোদিকে চলে গেছে)। পূর্ববর্তী ইন্টেল চিপস, পাশাপাশি পরবর্তী প্রজন্মগুলিতে একটি চলক পরিমাণে স্থানান্তর করা এত বেদনাদায়ক ছিল না।
বর্তমানের ইন্টেল চিপগুলিতে, একটি ভেরিয়েবলের পরিমাণে স্থানান্তর করা খুব দ্রুত নয় তবে এটি খুব ভয়াবহ নয়। ভেরিয়েবল শিফটগুলির ক্ষেত্রে x86 আর্কিটেকচার হ্যামস্ট্রং হয়, কারণ তারা অপারেশনটিকে অস্বাভাবিক উপায়ে সংজ্ঞায়িত করে: 0 এর পরিমাণে শিফট শর্তের পতাকাগুলিকে সংশোধন করে না, তবে অন্যান্য সমস্ত শিফ্ট করে। এটি পতাকা নিবন্ধগুলির দক্ষ নাম পরিবর্তন করতে বাধা দেয় কারণ শিফট কার্যকর না করা অবধি নির্ধারিত হতে পারে না পরবর্তী নির্দেশাবলী শিফট দ্বারা লিখিত শর্তের কোডগুলি পড়া উচিত, অথবা কিছু পূর্ব নির্দেশের। তদুপরি, শিফটগুলি কেবল পতাকা নিবন্ধের অংশে লিখিত থাকে, যার ফলে আংশিক পতাকা স্টল হতে পারে।
তারপরে এটির ফলাফলটি হ'ল সাম্প্রতিক ইন্টেল আর্কিটেকচারে, একটি চলক পরিমাণে শিফটটি তিনটি "মাইক্রো-অপারেশন" লাগে যখন অন্যান্য সাধারণ সরল ক্রিয়াকলাপগুলি (যোগ, বিটওয়াইস অপস, এমনকি গুণ) কেবল ১ গ্রহণ করে sh এই ধরনের শিফটগুলি প্রতি 2 চক্রে একবারে কার্যকর করা যেতে পারে ।
গুণ
আধুনিক ডেস্কটপ এবং ল্যাপটপের হার্ডওয়্যারটির প্রবণতা হ'ল গুণকে দ্রুত অপারেশন করা। সাম্প্রতিক ইন্টেল এবং এএমডি চিপগুলিতে, প্রকৃতপক্ষে, প্রতিটি চক্রকে একটি গুণ জারি করা যেতে পারে (আমরা এই পারস্পরিক ক্রিয়াকলাপ বলি )। লেটেন্সি , তবে, একটি গুণ 3 চক্র হয়। সুতরাং এর মানে হল যে আপনি কোনও প্রদত্ত গুণমান 3 চক্রের ফলাফলটি শুরু করার পরে পেয়েছেন তবে আপনি প্রতিটি চক্রটিতে একটি নতুন গুণ শুরু করতে সক্ষম হন। কোন মান (1 চক্র বা 3 চক্র) বেশি গুরুত্বপূর্ণ তা আপনার অ্যালগরিদমের কাঠামোর উপর নির্ভর করে। গুণটি যদি একটি গুরুত্বপূর্ণ নির্ভরশীল শৃঙ্খলার অংশ হয়, তবে বিলম্বিতা গুরুত্বপূর্ণ। যদি তা না হয় তবে পারস্পরিক তড়িৎপুট বা অন্যান্য কারণগুলি আরও গুরুত্বপূর্ণ হতে পারে।
তাদের মূল গ্রহণযোগ্যতাটি হ'ল আধুনিক ল্যাপটপ চিপগুলিতে (বা আরও ভাল), গুণগুলি একটি দ্রুত অপারেশন, এবং সম্ভবত 3 বা 4 নির্দেশক্রমের চেয়ে দ্রুততর হতে পারে যে কোনও সংকলক শক্তি হ্রাস শিফটগুলির জন্য "রাউন্ডিং" পেতে দিতে পারে। পরিবর্তনশীল শিফটগুলির জন্য, ইন্টেল-এ, উল্লিখিত ইস্যুগুলির কারণে সাধারণত গুনকেও অগ্রাধিকার দেওয়া হবে।
ছোট ফর্ম-ফ্যাক্টর প্ল্যাটফর্মে, গুণগুলি এখনও ধীর হতে পারে, কারণ একটি পূর্ণ এবং দ্রুত 32-বিট বা বিশেষত -৪-বিট গুণক তৈরি করতে প্রচুর ট্রানজিস্টর এবং শক্তি লাগে। কেউ যদি সাম্প্রতিক মোবাইল চিপগুলিতে গুণনের পারফরম্যান্সের বিশদটি পূরণ করতে পারে তবে এটি অনেক প্রশংসা হবে।
বিভক্ত করা
ভাগগুলি হ'ল হার্ডওয়ার-ভিত্তিক, গুণের চেয়ে জটিলতর অপারেশন এবং প্রকৃত কোডেও খুব কম দেখা যায় - এর অর্থ সম্ভবত এটির জন্য কম সংস্থান বরাদ্দ করা হয়েছে। আধুনিক চিপগুলির প্রবণতা এখনও দ্রুত ডিভাইডারের দিকে রয়েছে তবে আধুনিক শীর্ষ-লাইন চিপগুলি একটি বিভাজন করতে 10-40 চক্র নেয় এবং সেগুলি কেবলমাত্র আংশিক পাইপযুক্ত। সাধারণভাবে, -৪-বিট বিভাজকগুলি 32-বিট বিভাজনের চেয়েও ধীর হয়। অন্যান্য অপারেশনগুলির বিপরীতে, বিভাগ আর্গুমেন্টের উপর নির্ভর করে একটি পরিবর্তনশীল সংখ্যক চক্র গ্রহণ করতে পারে।
বিভাজনগুলি এড়াতে এবং শিফ্টগুলির সাথে প্রতিস্থাপন করুন (বা সংকলকটি এটি করতে দিন, তবে আপনার সমাবেশটি পরীক্ষা করার প্রয়োজন হতে পারে) আপনি যদি পারেন!