আধুনিক প্রসেসরগুলিতে বিট-ওয়াইজ অপারেশনগুলির তুলনায় দ্রুততর কেন?


72

আমি জানি যে বিট-ওয়াইজ অপারেশনগুলি আধুনিক প্রসেসরের উপর এত দ্রুত, কারণ তারা সমান্তরালভাবে 32 বা 64 বিটগুলিতে পরিচালনা করতে পারে, তাই বিট-ওয়াইজ অপারেশনগুলি কেবল একটি ঘড়ির চক্র নেয় take তবে সংযোজন একটি জটিল অপারেশন যা কমপক্ষে একটি এবং সম্ভবত এক ডজন বিট বুদ্ধিমান অপারেশন নিয়ে গঠিত, তাই আমি স্বাভাবিকভাবেই ভেবেছিলাম এটি 3-4 গতি কম হবে। আমি একটি সাধারণ বেঞ্চমার্কের পরে অবাক হয়ে দেখলাম যে সংযোজন হ'ল বিট-ওয়াইজ অপারেশনের (এক্সওআর, ওআর, এবং ইত্যাদি) হিসাবে ঠিক তত দ্রুত। কেউ কি এ বিষয়ে আলোকপাত করতে পারেন?




1
হ্যাঁ, আমার পরীক্ষাগুলিতেও গুণটি খুব দ্রুত ছিল। এটি সংযোজনের তুলনায় মাত্র 2x ধীর ছিল, যখন বিভাগটি 30x (!) বারের চেয়ে কম ছিল।
একাকী নাসস

রাষ্ট্রীয় অত্যাধুনিক সমান্তরাল উপসর্গ গাছ adders কম্প্যাক্ট ওভারভিউ: ডেভিড হ্যারিস সমান্তরাল উপসর্গ নেটওয়ার্কের একটি বর্গীকরণ সূত্র: pages.hmc.edu/harris/research/taxonomy.pdf
Franki

আরও বিশদভাবে বলা হয়েছে: পিএইচডি জুন চেনের ডক্টরাল থিসিস "বাইনারি এবং মডুলোর জন্য সমান্তরাল-উপসর্গ কাঠামো {2n − 1, 2n, 2n + 1} সংযোজক" ডিজিটাল.ইলবারি.কস্টেট.ইডু
চ্যাট_চেন_কস্টেট_0664D_10070.pdf

উত্তর:


104

সংযোজনটি দ্রুত কারণ সিপিইউ ডিজাইনাররা এটি দ্রুত করার জন্য প্রয়োজনীয় সার্কিট্রিতে রেখেছিল। এটি বিটওয়াইজ অপারেশনগুলির তুলনায় উল্লেখযোগ্যভাবে আরও বেশি গেট নেয়, তবে সিপিইউ ডিজাইনাররা এটির পক্ষে উপযুক্ত বলে বিচার করেছেন enough Https://en.wikedia.org/wiki/Adder_( ইলেক্ট্রনিক্স) দেখুন ।

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


মন্তব্যগুলি বর্ধিত আলোচনার জন্য নয়; এই কথোপকথন চ্যাটে সরানো হয়েছে ।
DW

38

এর বেশ কয়েকটি দিক রয়েছে।

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

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

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


6
+1 টি। হ্যাঁ, বেশিরভাগ প্রসেসর ক্লকড, তবে কয়েকটি ক্লকলেস সিপিইউ বাণিজ্যিকভাবে উপলব্ধ।
ডেভিড ক্যারি

2
আরেকটি সম্ভাবনা হ'ল কোনও প্রসেসর একটি 16-বিট টুকরা এবং তিনটি 17-বিট পিস হিসাবে একটি 64-বিট রেজিস্টার সংরক্ষণ করতে পারে, যেখানে প্রতিটি টুকরার অতিরিক্ত বিটগুলি নীচে থেকে পিছনে রাখা থাকে। একটি সংযোজন যা একটি বিটওয়াইজ অপারেশন বা একটি স্টোরের পরে অনুসরণ করা হয় ক্যারিটি প্রচার করতে 1-2 অতিরিক্ত চক্রের প্রয়োজন হতে পারে, তবে একটি সংযোজন যা অন্য সংযোজন অনুসরণ করে তা করা হয় না। তদ্ব্যতীত, "স্টোর" ক্ষেত্রে, অতিরিক্ত প্রচারের সময় স্টোরটির কার্য সম্পাদন বিলম্বিত করতে পারে তবে কোডটির জন্য এটি "অপেক্ষা" করার প্রয়োজন হবে না।
সুপারক্যাট

3
@ সুপের্যাট পেন্টিয়াম 4 ডাবল স্পিড সহ (প্রসেসরের বাকী তুলনামূলক) এএলইউর সাথে এমনটি কিছু করেছিল যা উপরের অর্ধেকের বিটগুলির আগে অর্ধ-চক্রের পরবর্তী ক্রিয়াকলাপের জন্য কম 16 বা 32 বিট প্রস্তুত থাকে।
জেফ্রি বোসবুম

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

2
সিমড ইন্টিজার অ্যাড প্রায়শই সিমডি বুলিয়ানের তুলনায় কম থ্রুপুট হয় যদিও তাদের সাধারণত একই বিলম্ব হয়। ব্রডওয়েলের মাধ্যমে পেন্টিয়ামআইআই থেকে ইনটেল সিপিইউগুলি কেবল paddwপ্রতি ঘড়িতে 2 তে ভেক্টর-ইন অ্যাড যোগ করতে পারে (উদাহরণস্বরূপ ), তবে বুলিয়ান (যেমন pand) প্রতি ঘড়িতে 3 এ at (স্কাইলেক তিনটি ভেক্টর এক্সিকিউশন পোর্টগুলিতে একটি ভেক্টর সংযোজক রাখে))
পিটার কর্ডেস

24

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

উদাহরণস্বরূপ, একটি সাধারণ প্রসেসরের প্রতিটি নির্দেশাবলীর জন্য 3 টি ধাপ থাকতে পারে: আনয়ন, সম্পাদন এবং সঞ্চয়। যে কোনও সময়, 3 টি নির্দেশাবলী প্রক্রিয়াজাত করা হচ্ছে: একটি আনয়ন করা হচ্ছে, একটি কার্যকর করা হচ্ছে এবং একজন তার ফলাফল সংরক্ষণ করে। একে পাইপলাইন বলা হয় এবং এই উদাহরণে 3 টি ধাপ রয়েছে। আধুনিক প্রসেসরগুলির 15 টিরও বেশি স্টেপ সহ পাইপলাইন রয়েছে। যাইহোক, পাশাপাশি, বেশিরভাগ গাণিতিক অপারেশনগুলি সাধারণত এক পর্যায়ে সম্পাদন করা হয় (আমি ALU দ্বারা 2 নম্বর যোগ করার অপারেশন সম্পর্কে বলছি, নিজেই নির্দেশ সম্পর্কে নয় - প্রসেসরের আর্কিটেকচারের উপর নির্ভর করে, নির্দেশের প্রয়োজন হতে পারে স্মৃতি থেকে আর্গুমেন্ট আনা, শর্তাবলীর সম্পাদন, মেমরিতে ফলাফল সংরক্ষণের জন্য আরও চক্র।

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

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

এছাড়াও, মনে রাখবেন যে এটি আপনার পক্ষে জটিল মনে হতে পারে, তবে হার্ডওয়্যারগুলিতে খুব দ্রুত সমান্তরালে করা যেতে পারে।


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

12

প্রসেসরগুলি ক্লকড, তাই কিছু নির্দেশাবলী স্পষ্টভাবে অন্যদের চেয়ে দ্রুত সম্পন্ন করা যেতে পারে, তারা একই পরিমাণে চক্রটি ভালভাবে নিতে পারে।

আপনি সম্ভবত দেখতে পাবেন যে রেজিস্টার এবং এক্সিকিউশন ইউনিটগুলির মধ্যে ডেটা পরিবহনের জন্য প্রয়োজনীয় সার্কিট্রি অ্যাড্রেসারের তুলনায় উল্লেখযোগ্যভাবে জটিল।

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


মন্তব্যগুলি বর্ধিত আলোচনার জন্য নয়; এই কথোপকথন চ্যাটে সরানো হয়েছে ।
গিলস

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

12

সংযোজন যথেষ্ট গুরুত্বপূর্ণ হয় না একটি বহন বিট একটি 64-বিট সঁচায়ক মাধ্যমে তরঙ্গায়িত করার জন্য এটা অপেক্ষা আছে: যে জন্য শব্দটি হল বহন-lookahead যোজক এবং তারা মূলত 8-বিট CPU- র (এবং তাদের Alus) এবং ঊর্ধ্বমুখী অংশ। প্রকৃতপক্ষে, আধুনিক প্রসেসরগুলির সম্পূর্ণ গুনের জন্য খুব বেশি কার্যকর সময় প্রয়োজন হয় না: প্রসেসরের ডিজাইনারের টুলবক্সে ক্যারি-লুকএইড আসলেই একটি পুরানো (এবং তুলনামূলকভাবে সাশ্রয়ী মূল্যের) সরঞ্জাম।


পূর্ণসংখ্যার গুণটি x86 এর এডিডির তুলনায় অবশ্যই উচ্চতর বিলম্ব এবং কম থ্রুপুট। তবে এটি আশ্চর্যজনকভাবে দ্রুত বিবেচনা করে একটি দ্রুত গুণক তৈরি করতে কত সংযোজক লাগে: উদাহরণস্বরূপ নেহালিমের পর থেকে ইন্টেল এবং রাইজেন থেকে এএমডি, 8/16/32/64-বিট স্কেলার পূর্ণসংখ্যা গুণ 1 পি ট্রান্সপুট সহ একটি 3 চক্রের বিলম্ব (একটি সম্পূর্ণ-পাইপলাইন এক্সিকিউশন ইউনিট)। এটি প্রতি ঘড়ি 3 বা 4 এর এডিডি থ্রুপুটটির সাথে তুলনা করে তবে ইন্টেল পেন্টিয়াম পি 5 এর 9 টি চক্রের আইএমএল ল্যাটেন্সি তুলনায় আশ্চর্যজনক। জিনিসগুলি সিমডের জন্য সমান: ভেক্টর-ইন গুণ বহুগুণ যোগের তুলনায় উচ্চতর বিলম্ব এবং কম থ্রুপুট তবে তবুও দ্রুত।
পিটার কর্ডেস

হ্যাঁ, এখনকার তুলনায় গুণাবলী অন্যান্য নির্দেশের তুলনায় অনেক বেশি ব্যয়বহুল ছিল। 2 টিরও বেশি নির্দেশাবলীর ব্যয় করে এড়িয়ে যাওয়া সাধারণত এটি মূল্যহীন নয় এবং কখনও কখনও 2-নির্দেশের বিকল্পও এটির জন্য উপযুক্ত নয় (যেমন একটি শিফ্ট + অ্যাড leaনির্দেশিকা সহ)।
পিটার

9

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

(নির্দেশ চক্র, ঘড়ি চক্র নয় - উদাহরণস্বরূপ - পাইপলাইনযুক্ত না থাকায় এবং নির্দেশিকা ক্যাশে না থাকার কারণে 6502 প্রতি নির্দেশে সর্বনিম্ন দুটি ঘড়ির চক্র নেয়)

আপনি যে আসল ধারণাটি মিস করতে পারেন তা হ'ল সমালোচনামূলক পথ : একটি চিপের মধ্যে, এক চক্রের মধ্যে পরিচালিত হওয়া দীর্ঘতম ক্রিয়াকলাপটি হার্ডওয়্যার স্তরে, চিপটি কতটা দ্রুত আটকে যায়।

এর ব্যতিক্রম হ'ল (খুব কম ব্যবহৃত এবং কঠোরভাবে বাণিজ্যিকীকরণ করা) অ্যাসিনক্রোনাস যুক্তি, যা যুক্তি প্রচারের সময়, ডিভাইসের তাপমাত্রা ইত্যাদির উপর নির্ভর করে বিভিন্ন গতিতে সত্যিকার অর্থে কার্যকর হয় does


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

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

6502 পাইপলাইনযুক্ত ছিল - এটি পূর্ববর্তীটির শেষ চক্রের সময় পরবর্তী নির্দেশের প্রথম বাইটটি পড়েছিল। অন্যথায় আনা / ডিকোড / এক্সিকিউট করা কমপক্ষে তিনটি চক্র হত।
gnasher729

8

গেট স্তরে, আপনি সঠিক যে সংযোজন করতে আরও বেশি কাজ লাগে এবং এভাবে আরও বেশি সময় লাগে। তবে, এই ব্যয়টি যথেষ্ট তুচ্ছ যে বিষয়টি বিবেচ্য নয়।

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

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

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


7

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

এই পছন্দটি একটি জটিল চক্র প্রক্রিয়াজাত করা যেতে পারে যে জটিল অপারেশন হতে পারে কি সীমাবদ্ধ। অপারেশনগুলি হবে যা 16 এ করা যেতে পারে তবে 15 ন্যাং দেরিতে নয়। সুতরাং এন = 16 পছন্দ করা মানে এমন একটি ক্রিয়াকলাপ একটি চক্রের মধ্যে করা যেতে পারে, এন = 15 চয়ন করার অর্থ এটি করা যায় না।

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

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

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

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


6

আমাকে এমন কয়েকটি জিনিস সংশোধন করতে দিন যা আপনার বিদ্যমান উত্তরে বর্ণিতভাবে উল্লেখ করা হয়নি:

আমি জানি যে বিটওয়াইজ অপারেশনগুলি আধুনিক প্রসেসরের উপর এত দ্রুত, কারণ তারা সমান্তরালভাবে 32 বা 64 বিটগুলিতে পরিচালনা করতে পারে,

এটা সত্য. একটি সিপিইউকে "এক্সএক্স" বিট হিসাবে সাধারণত লেবেল করা (সর্বদা নয়) এর অর্থ হল এর বেশিরভাগ সাধারণ কাঠামো (রেজিস্টার প্রস্থগুলি, ঠিকানার যোগ্য র্যাম ইত্যাদি) আকারের XX বিট (প্রায়শই "+/- 1" বা সামসুচ) থাকে। তবে আপনার প্রশ্নের ক্ষেত্রে, আপনি নিরাপদে ধরে নিতে পারেন যে 32 বিট বা 64 বিট সহ একটি সিপিইউ স্থির সময়ে 32 বা 64 বিটের উপর কোনও বেসিক বিট ক্রিয়াকলাপ করবে।

সুতরাং বিটওয়াইজ অপারেশনগুলি কেবল একটি ক্লকচক্র নেয়।

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

তবে অ্যাডিশন একটি জটিল অপারেশন

না, পূর্ণসংখ্যা যোগ করা একটি সহজ অপারেশন; পাশাপাশি বিয়োগ পূর্ণ হার্ডওয়্যারগুলিতে সংযোজকগুলিকে বাস্তবায়ন করা খুব সহজ এবং তারা তাদের জিনিসগুলি তাত্ক্ষণিকভাবে বেসিক বিট ক্রিয়াকলাপ হিসাবে করে।

এটি কমপক্ষে একটি এবং সম্ভবত এক ডজন বিটওয়াইজ অপারেশন নিয়ে গঠিত, তাই আমি স্বাভাবিকভাবেই ভেবেছিলাম এটি 3-4 গতি কম হবে।

এটি অনেক ট্রানজিস্টারের হিসাবে 3-4 বার লাগবে, তবে তুলনামূলকভাবে যে বড় চিত্র উপেক্ষিত।

আমি একটি সাধারণ বেঞ্চমার্কের পরে অবাক হয়ে দেখলাম যে সংযোজন যে কোনও বিটওয়াইজ অপারেশন (এক্সওআর, ওআর, এবং ইত্যাদি) এর মতোই দ্রুত। কেউ কি এ বিষয়ে আলোকপাত করতে পারেন?

হ্যাঁ: পূর্ণসংখ্যা যোগটি সামান্য দিকের ক্রিয়া (অন্যদের তুলনায় আরও কয়েকটি বিট সহ তবে এখনও) is পর্যায়ে কিছু করার দরকার নেই, জটিল অ্যালগরিদম, ঘড়ি বা অন্য কোনও কিছুর প্রয়োজন নেই।

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


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

হ্যাঁ, সংযোজকরা মোটামুটি সহজ। যা সত্যই চিত্তাকর্ষক তা হ'ল আধুনিক x86 সিপিইউগুলি একটি সম্পূর্ণ পাইপলাইনযুক্ত 3-চক্রের বিলম্বিত 64-বিট পূর্ণসংখ্যার গুণক সহ । (উদাহরণস্বরূপ 3 imul rax, rcxসি ল্যাটেন্সি রয়েছে এবং ইনটেল স্যান্ডিব্রিজে পরিবারে এএমডি রাইজেন 1 পি প্রতি 1 টি থ্রুটপুট রয়েছে)। এমনকি -৪-বিট পূর্ণ-গুণ (আরডিএক্স: র্যাক্সে 128 বিটের ফলাফল উত্পাদন করে) একই লম্বা এবং থ্রুপুট রয়েছে তবে এটি 2 টি উওপ হিসাবে প্রয়োগ করা হয়েছে (যা বিভিন্ন পোর্টের সমান্তরালে চলমান)। ( নির্দেশাবলী সারণী এবং একটি দুর্দান্ত মাইক্রোয়ার্ক গাইডের জন্য agner.org/optimize দেখুন )।
পিটার

[অ্যাড-উইথ-ক্যারি] জটিলতার অন্য স্তরে রয়েছে (প্রোগ্রামিং ভাষা স্তর, এসেম্বলি / মেশিন কোড স্তর নয় । এটি ভাষার উপর নির্ভর করে। এসি সংকলক যখন 16-বিট সিপিইউকে লক্ষ্য করে আপনার জন্য সংযোজন / অ্যাডিসি প্রবাহিত করতে হয়) দুটি uint32_tমান সংযোজন.এটি আজও 32-বিট লক্ষ্যগুলিতে int64_t এর জন্য প্রাসঙ্গিক AV AVR একটি 8-বিট আরআইএসসি মাইক্রোকন্ট্রোলার, সুতরাং 32-বিট পূর্ণসংখ্যার জন্য 4 নির্দেশাবলীর প্রয়োজন: Godbolt.org/g/wre0fM
পিটার

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