Foundationপ্রথম নীতি থেকে
LEVEL 3 · CPU Architecture

Reorder Buffer

রিঅর্ডার বাফার

একটা circular buffer যেখানে instruction program order অনুযায়ী entry পায়, এলোমেলো ক্রমে execute হয়ে সেই entry-তে ফলাফল জমা করে, কিন্তু কঠোরভাবে মাথা থেকে, in-order commit হয় — এটাই out-of-order CPU-তে precise exception সম্ভব করে।

also: ROB, in-order commit, precise exception

Dispatch-এর সময় প্রতিটা instruction ROB-এর লেজে (tail) একটা entry পায়, program order অনুযায়ী। Execution unit-গুলো instruction যেকোনো ক্রমে চালায় — ফলাফল সরাসরি architectural state-এ না গিয়ে প্রথমে নিজের ROB entry-তে জমা হয়, entry “সম্পন্ন” চিহ্নিত হয়।

প্রতি cycle-এ ROB-এর মাথা (head) পরীক্ষা হয়: সম্পন্ন হলে commit — ফলাফল architectural state-এ যায়, entry সরে যায়। মাথার instruction সম্পন্ন না হলে, পিছনের সব entry সম্পন্ন থাকলেও কেউ commit করতে পারে না (head-of-line blocking) — commit সবসময় program order, execution যতই এলোমেলো হোক।

কেন এটাই precise exception সম্ভব করে: কোনো instruction-এ exception ঘটলে, সেটা মাথায় পৌঁছালে CPU ঘোষণা করে — এর আগে সব commit হয়েছে (বৈধ), এর পরের সব ROB entry flush (বাতিল, যেন কখনো ঘটেইনি)। বাইরে থেকে মনে হয় CPU সরল, in-order ক্রমে চলছিল। ROB ছাড়া এই গ্যারান্টি অসম্ভব — কিছু “পরের” instruction হয়তো আগেই architectural state আপডেট করে ফেলেছে, ফিরিয়ে নেওয়ার উপায় নেই।

James Smith ও Andrew Pleszkun ১৯৮৫-এ এই সমাধান formalize করেন। Apple M1-এর ৬৩০-entry ROB (২০২০) এখনো পর্যন্ত সবচেয়ে বড়দের একটা।