FPGA開発日記

カテゴリ別記事インデックス https://msyksphinz.github.io/github_pages , English Version https://fpgadevdiary.hatenadiary.com/

プロセッサにおけるアウトオブオーダの考え方について(リオーダバッファの考え方について)

http://www-personal.umich.edu/~rovinski/images/die_shot.jpg

前回プロセッサにおけるアウトオブオーダの考え方について(リネームレジスタの例外時の処理について) - FPGA開発日記の続き。引き続きプロセッサのアウトオブオーダの仕組みについてまとめていく。

リオーダバッファとは

リオーダバッファは、アウトオブオーダで発行され各種演算ユニットで処理された命令を、処理が完了した段階で回収し、最後に順番を命令順に揃えるユニットのことを言う。 つまり命令をインオーダ完了させるためのユニットというわけだ。

以下の例では、命令がID-AからID-Dまで順番に発行されていき、その際に命令のIDを順番にリオーダバッファに格納している。

f:id:msyksphinz:20160507022509p:plain

この場合、命令がリオーダバッファに登録されると、以下のようになる。INFOの部分には、命令の種別情報や利用レジスタなどの情報が格納される。

f:id:msyksphinz:20160507022715p:plain

その後命令は各種ユニットに渡り、処理されていくのだが、そのユニットの処理時間や依存関係によって、各命令で完了するタイミングがバラバラになる。 以下の図ではUnit-1、Unit-2、Unit-3が存在し、それぞれレイテンシが異なるために命令の完了時間が異なる。

f:id:msyksphinz:20160507025155p:plain

例えば最初にID-Cの命令が完了したとしても、それより前の命令であるID-A,ID-Bの命令が完了していないため、ID-Cの命令はリオーダバッファに存在したままである。 ここでは、リオーダバッファの先頭のポインタをHEAD、リオーダバッファの後方のポインタはTAILとした。

f:id:msyksphinz:20160507024629p:plain

リオーダバッファは格納順にしか処理されないFIFOなので、ID-A、ID-Bが処理完了してコミットレディになると、ようやくID-Cもコミットとなる。これにより、命令のインオーダ完了が保たれる。

f:id:msyksphinz:20160507024707p:plain

一方で、例えばID-Bが例外を発生させたとすると、ID-Cのリオーダバッファは破棄される。

f:id:msyksphinz:20160507024904p:plain

参考文献

ヘネシー&パターソン コンピュータアーキテクチャ 定量的アプローチ 第5版

ヘネシー&パターソン コンピュータアーキテクチャ 定量的アプローチ 第5版

コンピュータアーキテクチャのもっとも有名な本。自作プロセッサを開発するならば、シングルスレッドの高速化の章はマスターしておきたい。 メモリ階層についての知識も、基礎的な内容を理解するのに丁度よい。

  • スーパスカラ マイクロプロセッサ

スーパースカラ・プロセッサ

スーパースカラ・プロセッサ

こちらもマスターしておきたい。絶版になってしまったが、古本で売られていた時にとっさに購入した。スーパスカラプロセッサに焦点を当てた高速化の技術について全般的に紹介している。 この本を読むと、サイクル精度の命令セットシミュレータによる性能評価がいかに大切かということとが分かる。

  • 高性能コンピュータ技術の基礎

高性能コンピュータ技術の基礎

高性能コンピュータ技術の基礎

こちらも分かりやすい。しっかり書いてあるし、図も比較的多め。しっかり読むと基礎的な部分はカバーできる。

  • Understanding the detailed Architecture of AMD's 64 bit Core

Chip Architect: Detailed Architecture of AMD's Opteron

こちらも実プロセッサをベースにアウトオブオーダの処理について書かれているので、一読することをお勧め。