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

Out-of-Order Execution

আউট-অফ-অর্ডার এক্সিকিউশন

যেই instruction প্রস্তুত (তার সব operand পাওয়া গেছে) সেটাই আগে execute করা, program-এ লেখা ক্রম না মেনে — কিন্তু চূড়ান্ত ফলাফল সবসময় program order-এই ঘটেছে বলে দেখানো।

also: OOO, out-of-order

প্রথম বাস্তব বাস্তবায়ন: CDC 6600 (১৯৬৪), James Thornton-এর scoreboard — প্রতিটা register-এর জন্য একটা bit রাখে যা বলে তার মান লেখার pending instruction আছে কি না।

সমস্যা যেটা এটা সমাধান করে: in-order execution-এ একটা ধীর instruction (যেমন cache-miss করা LOAD) তার পরে লেখা সব instruction-কে আটকে রাখে, এমনকি সম্পূর্ণ স্বাধীন হলেও। Out-of-order সেই স্বাধীন instruction-গুলোকে আগে চালিয়ে এই অপচয় এড়ায়।

সম্পূর্ণ ভুল ধারণা: out-of-order মানে output-ও এলোমেলো ক্রমে আসে — না, চূড়ান্ত ফলাফল সবসময় program order semantics মেনে চলে, [[reorder-buffer]] এই গ্যারান্টি দেয়। WAR/WAW-এর মতো মিথ্যা dependency ভাঙতে [[register-renaming]] লাগে — সত্যিকারের data dependency (RAW) কখনো ভাঙা হয় না, শুধু re-order করা হয় কখন সেটা resolve হবে।