CPUの命令dispatchと命令issue
この記事を読んでいて、「おや」と思った。
プロセサコアは8命令発行で、10命令イシュー、16本の実行パイプラインと書かれている。これまでのプロセサはOut-of-Order実行を行うものでも4命令発行程度であり、8命令というのは例が無い。1つのスレッドから8命令を発行できる機会は少ないので、複数スレッドの合計で8命令ではないかと思われるが、それにしても強力なコアである。
「命令発行」と「命令イシュー」って違うんだっけ?「8命令発効の10命令イシュー」ってどういう事だろう・・・と思って参照先のIBMのプレゼン資料をみたところ、「命令発効=dispatch」「命令イシュー=issue」ということだった。で、dispatchとissueはどう違うのか?と聞かれたら答えられないやんけ!と思ったので、勉強し直してみた。
一般に、アウト・オブ・オーダー実行を行うプロセッサ(PC〜サーバークラスのプロセッサはほとんどこれ)は、命令をフェッチ → 命令をre-ordering queueに追加 → 命令を演算器に割り当てて実行(もっと正確に言うと命令を実行ポートに移す)→結果をキューに追加→レジスタへの書き込みという順序で行われる。なお、命令同士の依存関係を解析して、可能なら命令の順序を入れ替えてしまうのがアウト・オブ・オーダー実行であるがここでは本題では無い。
どうやら、IBMとIntelで使っている用語に違いがあるらしい[1][2]。別のIBM資料[3]を見ても、「8 fetch / dispatch, 10 issue」と書いてある。8 threads/coreのSMTなので、8 fetch/dispatchが可能なのは自然。IBMは実行ユニットごとの分散命令キューを使っているようなので、実行ユニットの数に応じて10命令issueが可能なのだろう。
Intel | IBM | |
---|---|---|
命令キューの呼ばれ方 | Retirement Unit | reservation stations |
フェッチされた命令をre-orderingキューに追加 | issue | dispatch |
re-orderingキューの命令を実行 | dispatch | issue |
ということらしい。ややこしい・・・
[1] http://stackoverflow.com/questions/23219685/what-is-the-meaning-of-instruction-dispatch
[2] http://stackoverflow.com/questions/8014739/what-exactly-is-a-dual-issue-processor#answer-8015472