本当は怖いHPC

HPC屋の趣味&実益ブログ

CPUの命令dispatchと命令issue

news.mynavi.jp

この記事を読んでいて、「おや」と思った。

プロセサコアは8命令発行で、10命令イシュー、16本の実行パイプラインと書かれている。これまでのプロセサはOut-of-Order実行を行うものでも4命令発行程度であり、8命令というのは例が無い。1つのスレッドから8命令を発行できる機会は少ないので、複数スレッドの合計で8命令ではないかと思われるが、それにしても強力なコアである。

「命令発行」と「命令イシュー」って違うんだっけ?「8命令発効の10命令イシュー」ってどういう事だろう・・・と思って参照先のIBMのプレゼン資料をみたところ、「命令発効=dispatch」「命令イシュー=issue」ということだった。で、dispatchとissueはどう違うのか?と聞かれたら答えられないやんけ!と思ったので、勉強し直してみた。

一般に、アウト・オブ・オーダー実行を行うプロセッサ(PC〜サーバークラスのプロセッサはほとんどこれ)は、命令をフェッチ → 命令をre-ordering queueに追加 → 命令を演算器に割り当てて実行(もっと正確に言うと命令を実行ポートに移す)→結果をキューに追加→レジスタへの書き込みという順序で行われる。なお、命令同士の依存関係を解析して、可能なら命令の順序を入れ替えてしまうのがアウト・オブ・オーダー実行であるがここでは本題では無い。

どうやら、IBMIntelで使っている用語に違いがあるらしい[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

[3] https://www.ibm.com/developerworks/community/wikis/form/anonymous/api/wiki/61ad9cf2-c6a3-4d2c-b779-61ff0266d32a/page/f1abe75a-a2b2-43dd-9d75-7dae28f5bc5f/attachment/3d574a4b-b414-42c8-85b0-f941115d569f/media/2014-06%20Power%208%20Servers%20June.pdf

【広告】