কিছু সিপিইউতে একটি পতাকা নিবন্ধ রয়েছে (এআরএম, x86, ...), অন্যরা নেই (এমআইপিএস, ...)। সাইন, ওভারফ্লো ইত্যাদি পরীক্ষা করার জন্য শূন্য রেজিস্টার এবং শর্তসাপেক্ষ শাখা ব্যবহার করার পরিবর্তে পতাকা নিবন্ধন আপডেট করার জন্য সিএমপি নির্দেশনা থাকার সুবিধা কী?
কিছু সিপিইউতে একটি পতাকা নিবন্ধ রয়েছে (এআরএম, x86, ...), অন্যরা নেই (এমআইপিএস, ...)। সাইন, ওভারফ্লো ইত্যাদি পরীক্ষা করার জন্য শূন্য রেজিস্টার এবং শর্তসাপেক্ষ শাখা ব্যবহার করার পরিবর্তে পতাকা নিবন্ধন আপডেট করার জন্য সিএমপি নির্দেশনা থাকার সুবিধা কী?
উত্তর:
আধুনিক মাইক্রো-আর্কিটেকচারে রেজিস্টার সহ পতাকাগুলির জন্য বাস্তবায়নের ব্যয়টির নাম পরিবর্তন করা হয়েছে বা পতাকা নয় pretty আমি যে মূল পার্থক্যটি ভাবতে পারি তা হ'ল কিছু পতাকা কোনও মানের বৈশিষ্ট্যগুলি নির্দেশ করে (মানটি কি নেতিবাচক? মানটি শূন্য? মানটির কি সমান বা অদ্ভুত সমতা আছে?), আবার কেউ কেউ পূর্ববর্তী ক্রিয়াকলাপের সময় ঘটে যাওয়া একটি ইভেন্টকে উপস্থাপন করে (অ্যাড নির্দেশিকাটির কাজটি কি কার্যকর হয়েছে বা একটি ওভারফ্লো হয়েছে?) আপনি যখন 32-বিট আর্কিটেকচারে 64-বিট সংযোজন (বা 128-বিট সংযোজন করতে চান) এমআইপিএস-এর চেয়ে কম-আদর্শ-পরিস্থিতি তৈরি করেছিল -৪-বিটের আর্কিটেকচার।) বহনকারী পতাকা সহ বেশিরভাগ স্থাপত্যগুলিতে একটি বিশেষ রয়েছেadd-with-carry
নির্দেশ, যা পূর্ববর্তী যোগ নির্দেশ থেকে ক্যারি পতাকা অন্তর্ভুক্ত। এটি পতাকা নিবন্ধগুলির সাথে বহু স্থাপত্যের তুলনায় বহু-নির্ভুল গণিতের তুলনা তুলনামূলকভাবে সস্তা করে তোলে।
ফ্লিপ দিকে, শূন্য বা নন-শূন্যের জন্য একটি এন-বিট রেজিস্টার পরীক্ষা করা আশ্চর্যজনকভাবে ব্যয়বহুল। শূন্যের জন্য একটি এন-বিট রেজিস্টার পরীক্ষা করার জন্য আপনাকে এন-বিট এনওআর অপারেশন করতে হবে, যার গণনা করার জন্য ল স্তর প্রয়োজন। পতাকা সহ আর্কিটেকচারগুলিতে ALU পর্যায়ের শেষে শূন্য / নয়-শূন্য গণনার জন্য অতিরিক্ত যুক্তি নিবন্ধটি ঘড়ির গতি কমিয়ে দিতে পারে (বা ALU কে দুটি চক্র অপারেশন করতে বাধ্য করতে পারে।) এই কারণে, আমার মনে হয়, কিছু স্পেকের মতো আর্কিটেকচারে প্রতিটি গাণিতিক ক্রিয়াকলাপের দুটি সংস্করণ ছিল, একটি পতাকা সেট করে এবং একটি তা নয়।
তবে এমআইপিএস এখানে কিছু সংরক্ষণ করে না। তারা সমস্যাটিকে অন্য কোথাও সরিয়ে নিয়েছে। এমআইপিএস-এ একটি branch-on-equal
নির্দেশনা রয়েছে। এর অর্থ এই যে শাখাটি নির্দেশের অবশ্যই একটি ALU পর্যায় (বিটওয়াইজ xor
অপারেশনের মতো কিছু সহ একটি nor
একক সমান / না-সমান বিটকে হ্রাস করতে হবে) শাখাটি কোন পথে চলেছে তা নির্ধারণের আগে।
ডিসি আলফা আর্কিটেকচার একটি কৌশল ব্যবহার করে পার্থক্যটি বিভক্ত করার চেষ্টা করেছিল। ডিসি আলফার কোনও ফ্ল্যাগের নিবন্ধ নেই, তবে এ সংক্রান্ত কোনও branch-on-equal
নির্দেশনাও ছিল না । পরিবর্তে শাখার নির্দেশাবলী সমস্ত একক সাধারণ উদ্দেশ্য নিবন্ধের অবস্থার দিকে তাকান। আছে branch-on-zero
, branch-on-not-zero
, branch-on-less-than-zero
, ইত্যাদি কৌতুক যে আপনি প্রতি সাধারণ কাজের রেজিস্টার করো একটি অতিরিক্ত 65 তম বিট যে আপনি বলে দিতে পারেন অন্যান্য 64 বিট সব শূন্য বা না কিনা। এটি পতাকা নিবন্ধকৃত হওয়ার মতো করে তোলে: সমস্ত শাখার নির্দেশাবলী তাদের সিদ্ধান্ত নেওয়ার জন্য একক বিট (যা ইতিমধ্যে গণনা করা হয়েছে) দেখুন তবে এখন আপনি কীভাবে সাধারণ ALU এর সময় সেই অতিরিক্ত শূন্য সূচক বিটটি গণনা করবেন তা নির্ধারণ করতে ফিরে এসেছেন all সাইকেল. (এবং আপনি এখনও পূর্ববর্তী অপারেশন থেকে ক্যারি পতাকাটি দেখে বহু-নির্ভুল গণিতটি করতে পারবেন না))
পরীক্ষার নির্দেশাবলী থাকা যা কেবল পতাকা সেটগুলি রেজিস্টার অনাহারে আর্কিটেকচারগুলিতে নিবন্ধকের চাপ হ্রাস করার একমাত্র উপায়। আপনার যদি পর্যাপ্ত রেজিস্টার থাকে তবে তাদের মধ্যে একটি পরিবর্তন করুন এবং ফলাফল উপেক্ষা করুন। ইনপুট মান 0 সহ একটি রেজিস্টার 0 থাকার কৌশলটি কেবলমাত্র একটি এনকোডিং কৌশল আপনার পক্ষে যথেষ্ট রেজিস্টার রয়েছে যে নির্দেশাবলীর সংখ্যা বাড়ানোর চেয়ে তাদের মধ্যে 0 টি স্থির করা ভাল। এটির পরে এটি লক্ষ্য হিসাবেও ব্যবহার করা সুবিধাজনক (এটি মিথ্যা নির্ভরতার সংখ্যা হ্রাস করে)।
আবার এনকোডিং হচ্ছে। আপনি যদি শর্তটি জাম্পগুলিতে এনকোড করেন তবে আপনার কাছে 3 টি অপারেন্ড (দুটি তুলনা করতে হবে এবং লাফের লক্ষ্য) নিয়ে জাম্প থাকবে, যার মধ্যে দুটি আপনি তাত্ক্ষণিক মান হতে চান, একটি আপনি হিসাবে বড় হতে চান সম্ভব (জাম্পগুলির প্রায়শই নিজস্ব এনকোডিং ফর্ম্যাট থাকে যাতে লক্ষ্য যতটা সম্ভব বিট ব্যবহার করতে পারে)। অথবা আপনি সম্ভাবনা বাদ দিন।
পতাকা ব্যবহার আপনাকে সেগুলি সেট করার আরও সুযোগ দেয়। এটি কেবল তুলনামূলক ক্রিয়াকলাপ নয় যা পতাকা সেট করতে পারে, তবে আপনি যা চান তা। (এই সতর্কতার সাথে আপনি যে ফ্ল্যাগগুলি স্থাপন করেছেন তার আরও বেশি অপারেশন রয়েছে, পতাকাগুলি সেট করে এমন শেষ অপারেশনটি আপনি চান তা নিশ্চিত করার জন্য আপনাকে আরও সতর্ক হতে হবে)) আপনার যদি পতাকা থাকে, আপনি পতাকা নির্ধারণ করতে সক্ষম নির্দেশাবলীর সংখ্যা দ্বারা প্রায়শই শর্তের সংখ্যা (প্রায়শই 16) যাচাই করতে সক্ষম হন (আপনি যদি পতাকা ব্যবহার না করে থাকেন তবে আপনি যতগুলি শর্তসাপূর্ণ লাফ দেবেন তার সমাপ্তি হিসাবে শেষ করুন) পরীক্ষা করার মতো জিনিস রয়েছে বা এমন কিছু জিনিস রয়েছে যা আপনি সহজে পরীক্ষার অনুমতি দেন না (উদাহরণস্বরূপ বহন বা ওভারফ্লো)।
পতাকাগুলি পরীক্ষা করা সহজ এবং দ্রুত করা যায়। আপনার পরীক্ষাটি যত জটিল, চক্রের সময়টিতে (বা আপনি পাইপলাইনযুক্ত পাইপলাইন কাঠামো) এর উপর তত বেশি প্রভাব ফেলবে। এটি সহজ বাস্তবায়নের জন্য বিশেষত সত্য, যখন আপনি বইয়ের সমস্ত কৌশল ব্যবহার করে একটি উচ্চতর প্রসেসরের কাছে পৌঁছান, তখন প্রভাবটি বেশ ন্যূনতম হয়।
পতাকা থাকার অর্থ অনেকগুলি নির্দেশাবলীর একাধিক ফলাফল (প্রাকৃতিক ফলাফল এবং প্রতিটি পরিবর্তিত পতাকা) রয়েছে that এবং একটি মাইক্রো-আর্কিটেকচার পিওভি থেকে, একাধিক ফলাফল খারাপ হয় (আপনাকে তাদের সমিতির উপর নজর রাখতে হবে)। যখন আপনার কাছে পতাকাগুলির একটি মাত্র সেট থাকে, যা নির্ভরতাগুলি প্রবর্তন করে (পতাকাটি যদি ব্যবহার না করা হয় তবে অপ্রয়োজনীয়) আপনাকে অন্য কোনও উপায় পরিচালনা করতে হবে। আবার এটি সহজ বাস্তবায়নের জন্য বিশেষত সত্য, যখন আপনি বইয়ের সমস্ত কৌশল ব্যবহার করে একটি উচ্চতর প্রসেসরের কাছে পৌঁছান, অতিরিক্ত অসুবিধাগুলি প্রসেসরের বাকী অংশগুলি দ্বারা বামন হয়ে যায়।
একটি 32-বিট মেশিনে, একটি "অ্যাড-উইথ ক্যারি" মাল্টি-স্পষ্টতা সংযোজন ক্রমের অংশ হিসাবে ব্যবহৃত নির্দেশকে 65 বিট মূল্যবান অপারেশন গ্রহণ করতে হবে এবং 33 বিটের সমষ্টি গণনা করতে হবে। উত্স-নিবন্ধের নির্দিষ্টকরণগুলি সনাক্ত করবে যেখানে 64 অপারেন্ড বিটগুলি কোথা থেকে আসবে এবং গন্তব্য-নিবন্ধের স্পেসিফিকেশন বলবে যে ফলাফলের নীচের 32 বিটগুলি কোথায় যেতে হবে, তবে "একটি অতিরিক্ত যুক্ত করুন" অপারেন্ড বা উপরের বিটের সাথে কী করবেন ফলাফলের? অতিরিক্ত অপারেন্ড কোথা থেকে আসা উচিত এবং অতিরিক্ত ফলাফলের বিটটি কোথায় যাওয়া উচিত ছিল সেই নির্দেশের অংশ হিসাবে নির্দিষ্ট করার মঞ্জুরি দেওয়া মাঝারিভাবে কার্যকর হবে তবে এটি সাধারণত অপকোডে কোনও অতিরিক্ত ক্ষেত্রকে ন্যায়সঙ্গত করার পক্ষে তেমন কার্যকর হবে না। ক্যারি পতাকাটি হ্যান্ডেল করার জন্য একটি নির্দিষ্ট "অবস্থান" থাকা কোনও নির্দেশ-সময়সূচী দৃষ্টিকোণ থেকে কিছুটা বিশ্রী হতে পারে তবে এটি '
যদি একাধিক নির্ভুল গাণিতিককে অনুমতি দেওয়ার জন্য কোনও নির্দেশিকা নকশার চেষ্টা করা হয় তবে প্রতিটি নির্দেশ দুটি দু'টি 32-বিট অপারেশন এবং একটি 32-বিট গন্তব্য অপারেন্ডের মধ্যে সীমাবদ্ধ ছিল, চারটি নির্দেশে একজন 64-বিট "অ্যাড" প্রয়োগ করতে পারে: "সেট r5 + 1 যদি r0 + r2 বহন করে বা অন্যথায় শূন্য হয়; গণনা r4 = r1 + r3; গণনা r5 = r4 + r5; গণনা r4 = r0 + r2 "তবে এর বাইরে যেতে প্রতিটি অতিরিক্ত শব্দের জন্য তিনটি নির্দেশের প্রয়োজন হবে। পরিপূরক উত্স এবং গন্তব্য হিসাবে ক্যারি পতাকা উপলভ্য হওয়া শব্দের প্রতি এক নির্দেশের জন্য ব্যয় হ্রাস করে।
দ্রষ্টব্য, বিটিডব্লিউ, যে নির্দেশনা বিট রেজিস্টারের আপডেট হয়েছে কিনা তা নির্দেশের বিস্তৃত নিয়ন্ত্রণের বাইরে থাকা আদেশ কার্যকর করতে পারে কি না, যেহেতু পতাকা বিটগুলি ব্যবহার করে বা সংশোধন করে যে নির্দেশাবলী অবশ্যই একে অপরের সাথে সম্পর্কিত তাদের ক্রম বজায় রাখতে পারে, তবে নির্দেশাবলী যা নাও পারে অবাধে পুনর্বিন্যাস করা। ক্রম দেওয়া:
ldr r0,[r1]
add r0,r0,r2
eors r4,r5,r6
একটি এক্সিকিউশন ইউনিট মোটামুটি সহজেই সনাক্ত করতে পারে যে তৃতীয় নির্দেশটি পড়া থেকে ডেটা পড়ার অপেক্ষা না করেই কার্যকর করা যেতে পারে [r1]
, তবে দ্বিতীয় নির্দেশটি adds r0,r0,r2
যদি কেবল তখনই সম্ভব হত যদি এক্সিকিউশন ইউনিট নিশ্চিত করতে পারত যে সময়কালে কোনও কিছু ব্যবহার করার চেষ্টা করা হয়েছিল পতাকাগুলি, শূন্য পতাকাটি তৃতীয় নির্দেশে প্রতিষ্ঠিত মানটি ধারণ করবে তবে ক্যারি পতাকাটি দ্বিতীয়টিতে মান ধারণ করবে।
সহজ উত্তর ... দ্রুত সস্তা মেমোরি অপারেশনের জন্য কেবল নির্দেশ ব্যতীত কোনও অভ্যন্তরীণ বসের ব্যবহারের প্রয়োজন হয় না। এটি কোনও স্ট্যাক বা প্রক্রিয়া বিট সহ কোনও স্মৃতিবিহীন স্ট্যাক বিল হিসাবে ব্যবহার করা যেতে পারে।