Register Renaming
রেজিস্টার রিনেমিং
প্রতিটা write-কে একটা তাজা physical register-এ পাঠানো, যাতে একই architectural register নামের পুনর্ব্যবহার থেকে তৈরি নকল WAR/WAW dependency ভেঙে যায় — সত্যিকারের RAW dependency অক্ষত রেখে।
also: rename table, RAT, register alias table, physical register
ISA যতগুলো [[register|architectural register]] প্রকাশ করে (x86-64-এ ১৬টা), hardware-এ তার চেয়ে অনেক বেশি physical register থাকে (আধুনিক Intel/Apple core-এ ২০০-৬০০+)। প্রতিটা write একটা নতুন, free physical register পায়; একটা rename table (RAT) সবসময় জানে কোন architectural নাম এই মুহূর্তে কোন physical register নির্দেশ করছে।
কেন লাগে: I1: R1=R2+R3 তারপর I2: R1=R4+R5 — I2-এর
সাথে I1-এর কোনো data flow নেই, শুধু R1 নামের কাকতালীয়
পুনর্ব্যবহার (WAW)। Renaming-এর পর দুটো ভিন্ন physical
register লেখে — সংঘর্ষ অদৃশ্য। কিন্তু সত্যিকারের RAW dependency
(I2 যদি I1-এর ফলাফল সত্যিই পড়ত) renaming ভাঙে না — শুধু সঠিক
physical register-এর মাধ্যমে ট্র্যাক করে।
কেন বেশি architectural register যথেষ্ট না: প্রতিটা loop iteration নিজেই একটা নতুন name-সংঘর্ষের উৎস — register সংখ্যা যতই বাড়ান, iteration সংখ্যা সবসময় বেশি থাকবে। আর বেশি architectural register মানে instruction encoding-এ বেশি bit খরচ — তাই সমাধান architectural সংখ্যা বাড়ানো না, physical register hardware-এ লুকিয়ে রাখা।
Tomasulo-র অ্যালগরিদম (IBM 360/91, ১৯৬৭) প্রথম এই ধারণা প্রয়োগ করে — reservation station দিয়ে, “renaming” শব্দ ছাড়াই।