出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2024/06/18 04:29 UTC 版)
Scoreboarding とは、CDC 6600で用いられた、命令の衝突がなくハードウェアが利用できる状態のときにアウト・オブ・オーダー実行を行うためにパイプラインを中央管制的にスケジュールするための方法である。Scoreboarding では、すべての命令のデータ依存性が記録され、各命令は過去に発行したまだ完了していない命令との衝突がないとスコアボードが判断した場合のみ解放される。ある命令の実行が安全ではないと判断され、実行を停止した場合には、その命令が発行されたときに存在していたすべての依存関係が解決するまでスコアボードが実行のフローを監視しつづける。
命令はインオーダーでデコードされ、以下の4つのステージを経て実行される。
スコアボードを制御する詳細なアルゴリズムを示す:
function issue(op, dst, src1, src2)
wait until (!Busy[FU] AND !Result[dst]); // FU は、操作 'op' を実行できる任意の機能ユニット
Busy[FU] ← Yes;
Op[FU] ← op;
Fi[FU] ← dst;
Fj[FU] ← src1;
Fk[FU] ← src2;
Qj[FU] ← Result[src1];
Qk[FU] ← Result[src2];
Rj[FU] ← not Qj;
Rk[FU] ← not Qk;
Result[dst] ← FU;
function read_operands(FU)
wait until (Rj[FU] AND Rk[FU]);
Rj[FU] ← No;
Rk[FU] ← No;
function execute(FU)
// FU が実行するべきことをすべて行う
function write_back(FU)
wait until (