このページの本文へ

ロードマップでわかる!当世プロセッサー事情 第70回

命令の実行順を変えて高速化するアウトオブオーダー

2010年09月27日 12時00分更新

文● 大原雄介(http://www.yusuke-ohara.com/)

  • この記事をはてなブックマークに追加
  • 本文印刷

 さて、前回の説明では「これらの結果がWritebackされる」といきなりまとめてしまったのだが、実際はもう少し複雑だ。演算の結果が本当にメモリーに格納されるのであれば、ここで書き戻しに入る。だが、上の例ではR1/R2/R4/R5といったレジスターに結果が格納され、しかもその値は次の命令で利用されることになるため、これをいちいちキャッシュに書き戻していては間に合わない。そこでレジスターへの書き戻しはRe-Order Bufferに対して行なう。

 なぜこれがRe-Order Bufferと呼ばれるかというと、これも前回説明したRegister Renamingに関係している。前回の例では、表の左列を右列に変換して実行すると説明した。

変換前 変換後
命令1 R1=Data1 R101=Data1
命令2 R2=Data2 R102=Data2
命令3 R3=R1+R2 R3=R101+R102
命令4 R1=Data3 R103=Data3
命令5 R2=Data4 R104=Data4
命令6 R4=R1+R2 R4=R103+R104

 実はこれも多少説明を端折っている。Register Renamingをきちんと行なうと、内部的には以下のように登録されるのが普通だ。

  • 命令1 R101=Data1
  • 命令2 R102=Data2
  • 命令3 R103=Data3
  • 命令4 R104=Data4
  • 命令5 R3=R105+R106(=R101+R102)
  • 命令6 R4=R107+R108(=R103+R104)

 Re-Order Bufferでは、基本的にひとつの命令に対してひとつずつ、結果を格納する新規のエントリーが作られ、そこに結果が割り当てられる仕組みになる。そのため命令5と命令6は「命令1~4が完了するのを待つ」のではなく、「R105~R108が埋められて利用可能になるのを待つ」という形でスケジューラーで待機する。

 一方で、命令1~4によりR101~R104が埋められると、これが命令5、6ではR105~R108に値が埋まったように見えるという仕組みだ。こんな感じで「レジスターの名前が変わる」ことから、Re-Order Bufferという名前になっている。

カテゴリートップへ

この連載の記事

注目ニュース

ASCII倶楽部

プレミアムPC試用レポート

ピックアップ

ASCII.jp RSS2.0 配信中

ASCII.jpメール デジタルMac/iPodマガジン