আপনার কেবলমাত্র বিপুল সংখ্যক নিবন্ধক না থাকার অনেকগুলি কারণ রয়েছে:
- এগুলি বেশিরভাগ পাইপলাইন পর্যায়ে যুক্ত রয়েছে। প্রারম্ভিকদের জন্য, আপনাকে তাদের আজীবন ট্র্যাক করতে হবে এবং ফলাফলগুলি আগের পর্যায়ে ফরোয়ার্ড করতে হবে। জটিলতা খুব দ্রুত অচল হয়ে যায় এবং তারের সংখ্যা (আক্ষরিক) জড়িত একই হারে বৃদ্ধি পায়। এটি এলাকায় ব্যয়বহুল, যার শেষ পর্যন্ত অর্থ এটি একটি নির্দিষ্ট পয়েন্টের পরে শক্তি, দাম এবং কার্য সম্পাদনে ব্যয়বহুল।
- এটি নির্দেশের এনকোডিংয়ের স্থান গ্রহণ করে। 16 নিবন্ধগুলি উত্স এবং গন্তব্যের জন্য 4 বিট গ্রহণ করে এবং অন্য 4 আপনার কাছে 3-অপারেন্ড নির্দেশনা রয়েছে (যেমন এআরএম)। এটি কেবলমাত্র রেজিস্টার নির্দিষ্ট করার জন্য গৃহীত নির্দেশের সেট কোডের এনকোডিংয়ের জায়গা। এটি শেষ পর্যন্ত ডিকোডিং, কোডের আকার এবং আবার জটিলতায় প্রভাব ফেলে।
- একই ফলাফল অর্জনের আরও ভাল উপায় আছে ...
এই দিনগুলিতে আমাদের কাছে প্রচুর নিবন্ধ রয়েছে - সেগুলি কেবল স্পষ্টভাবে প্রোগ্রাম করা হয়নি। আমাদের "রেজিস্ট্রার নামকরণ" আছে। আপনি কেবলমাত্র একটি ছোট সেট (8-32 নিবন্ধক) অ্যাক্সেস করার সময় সেগুলি আসলে অনেক বড় সেট (যেমন 64৪-২৫6) সমর্থন করে। এরপরে সিপিইউ প্রতিটি নিবন্ধকের দৃশ্যমানতা ট্র্যাক করে এবং পুনরায় নামকরণ সেটে তাদের বরাদ্দ করে। উদাহরণস্বরূপ, আপনি লোড করতে পারবেন, সংশোধন করতে পারেন, তারপরে একাধিকবার নিবন্ধে সংরক্ষণ করতে পারেন এবং এই ক্রিয়াকলাপগুলির প্রতিটি প্রকৃতপক্ষে স্বাধীনভাবে ক্যাশে মিস করা ইত্যাদির উপর নির্ভর করে সম্পাদনা করতে পারেন:
ldr r0, [r4]
add r0, r0, #1
str r0, [r4]
ldr r0, [r5]
add r0, r0, #1
str r0, [r5]
কর্টেক্স এ 9 কোর নাম পরিবর্তন করে রেজিস্ট্রেশন করে, তাই "r0" এ প্রথম লোড আসলে একটি নাম পরিবর্তিত ভার্চুয়াল রেজিস্টারে যায় - আসুন একে "ভি0" বলি। "ভি0" এ লোড, ইনক্রিমেন্ট এবং স্টোরটি ঘটে। এদিকে, আমরা আবারও লোড / মডিফাই / স্টোরটি আর -0 করতে পারব, তবে এটির নাম "ভি 1" হয়ে যাবে কারণ এটি r0 ব্যবহার করে সম্পূর্ণ স্বাধীন ক্রম ence ধরা যাক "r4" এর পয়েন্টার থেকে লোডটি ক্যাশে মিসের কারণে স্থির হয়ে গেল। এটি ঠিক আছে - আমাদের প্রস্তুত হওয়ার জন্য "r0" অপেক্ষা করার দরকার নেই। কারণ এটির নামকরণ হয়েছে, আমরা পরবর্তী সিকোয়েন্সটি "v1" (r0 তে ম্যাপযুক্ত) দিয়ে চালাতে পারি - এবং সম্ভবত এটি একটি ক্যাশে হিট এবং আমাদের কেবল দুর্দান্ত পারফরম্যান্সের জয় ছিল।
ldr v0, [v2]
add v0, v0, #1
str v0, [v2]
ldr v1, [v3]
add v1, v1, #1
str v1, [v3]
আমি মনে করি x86 আজকাল পুনরায় নামকরণকারী রেজিস্টারগুলির একটি বিশাল সংখ্যক পর্যন্ত (বলপার্ক 256)। এর অর্থ হ'ল উত্স এবং গন্তব্য কী তা প্রতিটি নির্দেশের জন্য 8 বিট বার 2 হবে। এটি কোর জুড়ে প্রয়োজনীয় তারের সংখ্যা এবং তার আকারকে ব্যাপকভাবে বাড়িয়ে তুলবে। সুতরাং প্রায় ১-3-৩২ টি রেজিস্ট্রারের আশেপাশে একটি মিষ্টি স্পট রয়েছে যার জন্য বেশিরভাগ ডিজাইনাররা সেটেল করেছেন এবং আউট-অফ-অর্ডার সিপিইউ ডিজাইনের জন্য, রেজিস্টার নামকরণ এটি প্রশমিত করার উপায়।
সম্পাদনা করুন : আদেশের বাইরে থাকা কার্য সম্পাদনের গুরুত্ব এবং এর উপর নতুন নামকরণ করুন register আপনার একবার ওওও হয়ে গেলে, নিবন্ধকের সংখ্যা এতটা গুরুত্বপূর্ণ নয় কারণ তারা কেবল "অস্থায়ী ট্যাগ" এবং আরও বড় আকারের ভার্চুয়াল রেজিস্ট্রার সেটটির নাম পরিবর্তন করে। আপনি সংখ্যাটি খুব কম হওয়া চান না, কারণ ছোট কোড সিক্যুয়েন্স লিখতে অসুবিধা হয়। এটি x86-32 এর জন্য একটি সমস্যা, কারণ সীমিত 8 টি রেজিস্টারের অর্থ প্রচুর অস্থায়ী পদক্ষেপগুলি স্ট্যাকের মধ্য দিয়ে যায় এবং মেমরিটিতে পাঠ্য / লেখার জন্য ফরোয়ার্ড করতে কোরটির অতিরিক্ত যুক্তি প্রয়োজন। আপনার যদি ওইও না থাকে তবে আপনি সাধারণত একটি ছোট কোর সম্পর্কে কথা বলছেন, এক্ষেত্রে বড় রেজিস্টার সেটটি হ'ল দাম / পারফরম্যান্স সুবিধা।
তাই রেজিস্টার ব্যাংক আকারের জন্য একটি প্রাকৃতিক মিষ্টি স্পট রয়েছে যা সিপিইউয়ের বেশিরভাগ শ্রেণির জন্য প্রায় 32 আর্কিটেটেড রেজিস্টারগুলিতে সর্বাধিক আউট হয়। x86-32 এর 8 টি নিবন্ধ রয়েছে এবং এটি অবশ্যই খুব ছোট। এআরএম 16 টি রেজিস্টার নিয়ে গেছে এবং এটি একটি ভাল আপস ise 32 রেজিস্টারগুলি কিছুটা হলেও সামান্য বেশি - আপনার শেষ 10 বা তার বেশি প্রয়োজন নেই।
এসএসই এবং অন্যান্য ভেক্টর ভাসমান পয়েন্ট কপ্রোসেসরগুলির জন্য আপনি যে অতিরিক্ত রেজিস্টার পান সেগুলির কোনওটিই স্পর্শ করে না। এগুলি অতিরিক্ত সেট হিসাবে বিবেচনা করে কারণ তারা পূর্ণসংখ্যা কোর থেকে স্বতন্ত্রভাবে চালায় এবং সিপিইউর জটিলতা তাত্পর্যপূর্ণভাবে বাড়ায় না।