このような実行を行うために、スコアボードは図6.4に示す3種類のテーブルを持っている。

図6.4 スコアボードの状態テーブル

命令状態テーブルは、デコードされた各命令が前回記したIssue、 Read Operands、 Execute、 Write Backの4つのステージのどこの段階にあるかを示している。論理的にはこのテーブルは、Write Backを終わって完了した命令が上から取り除かれ、新たにデコードされた命令が下に追加されるFIFO(First In First Out)構造である。 実行ユニット状態テーブルは、1つの表というよりは、それぞれのエントリが各実行ユニットに対応して設けられており、その実行ユニットが処理を実行中(Busy)であるか、Busyの場合は、どの命令を処理しており、結果を格納するレジスタ番号(Fi)、入力オペランドのレジスタ番号(Fj、Fk)、そして入力オペランドが共通レジスタファイルになく先行命令で計算される場合は、その結果を生成する実行ユニットの番号(Qj、Qk)や、先行命令による処理が終わり、Qj、Qkの実行ユニットから結果が書き込まれたかどうかを示す情報(Rj、Rk)を保持する。

レジスタ状態テーブルは、レジスタファイルの各エントリごとに、そのエントリに結果を書き込む実行ユニットの番号保持する。

そして、スコアボードは、命令デコードユニットや各実行ユニットからの情報に基づいて、これらのテーブルを更新し、また、これらのテーブルの状態から、ハザードの存在をチェックし、必要ならストール挿入しながらIssueからWrite Backの実行を制御する。

まず、命令デコードユニットが命令をデコードして命令状態テーブルに登録する。そしてイシューユニットは命令状態テーブルのエントリをチェックし、まだイシュー状態になっていない命令に対してレジスタ状態テーブルを見て、処理結果を書き込むレジスタが先行命令で使用されていないか(WAWハザード)をチェックする。WAWハザードが無く、かつ、その命令で使用する実行ユニットの状態テーブルのエントリをチェックし、実行ユニットが使用可能である(構造ハザードがない)ことを確認して命令をイシューする。そして、命令状態テーブルをイシュー状態に変更する。

次に、実行ユニットは、レジスタ状態テーブルを見て必要なオペランドの状態をチェックする。両方のオペランドが先行命令で書き込まれることが無くすでにレジスタファイルに存在する場合は、命令のオペランドとして指定されたレジスタからオペランドを読み出して実行(Execute)を開始する。

一方、オペランドが先行命令で計算中の場合は、レジスタ状態テーブルからそれを計算する実行ユニットの番号を読出して、実行ユニット状態テーブルに書き込み、計算の終了を待つ。そして先行命令での処理が終わりオペランドが使用可能になると、命令の実行を開始する。

命令の実行が終了すると、実行ユニットはスコアボードに実行終了を通知する。スコアボードは実行終了した命令が書き込むレジスタ番号を実行ユニット状態テーブルから知り、実行ユニット状態テーブルの命令の中で、同じ番号のレジスタからのデータを待っている命令が無い(WARハザードでない)ことを確認し、状態テーブルの結果格納フィールドで指定されたレジスタに結果を書き込む。そしてスコアボードはレジスタ状態テーブルを書き換え、実行を完了した命令を命令状態テーブルから消し、実行ユニット状態テーブルのエントリのBusyをリセットする。

なお、ここでの記述は1つの命令に着目して書かれているが、実際のハードウェアでは、命令状態テーブルに存在する全ての命令について、これらの処理が並列的に実行される。

このようにスコアボード方式では、命令デコードの段階ではハザードのチェックを行わず、次々と命令をデコードして命令状態テーブルに書き込む。そして、これらの状態テーブルを参照して、ハザードがあり処理を実行できない命令を後回しにして、実行可能な命令を見つけ出して実行するので、プログラム順では後にある命令でも、ハザードが無ければ先に実行することが出来る。このように命令の実行は、プログラム順とは異なるので、Out of Order(アウトオブオーダ)実行と呼ばれる。

なお、アメリカ出張などの折に、トイレや自動販売機などに「Out of Order」なる札が掛かっているのを見ることがあるが、これは後から来た人が先の人を追い抜いて使用して良いという意味ではなく、「故障」(で貴方の命令=Orderを実行できません)と言う意味であるので、間違えないようにして戴きたい。

このようなスコアボードを使う制御方法により、CDC6600は、プログラム順に命令を実行するインオーダ実行と比べてFORTRANプログラムでは1.7倍、人間が書いたアセンブラのプログラムでは2.5倍の性能を達成したと報告されている。しかし、CDC6600の時代は、キャッシュも無く、遅いメインメモリを直接アクセスしており、また、コンパイラもソフトウェアパイプラインなどの手法が開発される前の時代であり、この性能向上をそのまま、現代のプロセサに当てはめることは出来ない。

なお、CDC6600のメインアーキテクトは、スパコンの天才と言われるSeymour Cray氏とJames Thornton氏であるが、スコアボードはThornton氏の考案であり、Thorntonアルゴリズムとも呼ばれる。