命令あたりのサイクル (CPI) – なぜ重要なのか?

HPC

この記事は、inside HPC に公開されている「Cycles Per Instruction – Why it matters」の日本語参考訳です。


特定のコード領域やアプリケーション全体がどのように動作しているか測定するには、命令がリタイアするのに費やした平均サイクル数を調べます。これにより、システムにおけるレイテンシーを知ることができ、アプリケーションがどのように動作しているか有益な情報が得られます。

命令あたりのサイクル (CPI) は 2 つの値の比率です。分子は使用された CPU サイクル数で、実行された命令数である分母で除算されます。これは比率であることから、コード領域の 1 つのバージョンの実行を他のバージョンと比較する際に、最適化が作用しているか理解するため一方の値を一定に保つことが重要です。多くの CPU サイクルが費やされていても多くの命令が実行されているなら、比率は同じになる可能性があり、計測により改善は見られないでしょう。最終的な目標は、アプリケーション全体と特定のコード領域の CPI を低く抑えることです。

スレッドの CPI を算出するのは容易であり、命令がリタイアするまでに費やした時間またはサイクル数をカウントすることで計算できます。コアごとの CPI を調べるには、適切な比率になるようにハードウェア・コア上で実行されるすべてのスレッドを収集する必要があります。例えば、コードのある領域が 1200 サイクルで 600 個の命令を実行する場合、CPI は 1200/600 = 2 となります。しかし、理論的にはコアの CPI は 0.5 になるべきであり、この場合十分なワークがコアに送られておらず 1/4 のみの能力が活用されていることを意味します。例えば、コアのワークロードにさらに多くのスレッドを追加できる場合、CPI はコアが処理できる最大値まで減少します。CPI メトリックは、スレッドとコアレベルで何が発生しているか理解するのに非常に重要なメトリックです。

このメトリックを理解することで、ハードウェア要素あたりのワークを最大化するのに役立つガイドラインが得られます。インテル® Xeon Phi™ プロセッサーでは、それぞれ同時に 4 つのスレッドを実行できる 72 個のコアが搭載されています。CPI が十分に低くならない場合、コアにさらに多くのワークを加えるべきです。インテル® Xeon Phi™ プロセッサー向けのガイドラインとして、スレッドが 36 以下であればそれぞれのスレッドをタイルに配置します。また、37 から 73 スレッドの間であれば、コアごとに 1 スレッドを割り当てます。さらに、73 から 145 スレッドの場合、それぞれのコアに 2 スレッドを割り当てます。もちろん、CPI を減らすのは各スレッドが実行するワークに依存しています。

HPC アプリケーションには多くの最適化手法がありますが、コアおよびスレッドレベルで何が起こっているかを理解し、スレッドやコアごとのワークロードの最大化を試みることは常に有益です。それにより、スレッドとコアの状況を観察して、それに応じたワークを割り当てることによってアプリケーションに関する新しい見地を得られます。

無料の 30 日間のインテル® Parallel Studio XE 評価版をダウンロード

タイトルとURLをコピーしました