プロセッサの動作と性能
要点と定義
プロセッサは、命令を解読して制御し、演算器やレジスタを使って処理します。演算の基本には論理回路があります。半加算器は1ビットずつの二つの入力を加え、和の下位ビットと桁上がりを出力します。たとえば入力が1と0なら、和は1、桁上がりは0です。入力がともに1なら、和の下位ビットは0、桁上がりは1になります。
プロセッサ性能の指標にはクロック周波数とCPIがあります。CPI(Cycles Per Instruction)は、実行した命令数に対するクロックサイクル数の平均です。実行時間は、命令数と平均CPIから総サイクル数を求め、その総サイクル数をクロック周波数で割って見積もれます。
高速化では、複数の命令を同時に実行するスーパスカラと、コンパイラが並列実行できる動作を一つの長い命令語にまとめるVLIWを区別します。前者はプロセッサが複数の演算器へ命令を振り分け、後者はコンパイル時に並列性を見つけて命令語に配置する方式です。
SIMDは、一つの命令を複数のデータに適用する並列処理方式です。たとえば同じ加算を、複数組の数値にまとめて行えます。
アムダールの法則は、処理のうち並列化できる割合とプロセッサ数から、理想化した速度向上比を考える法則です。並列化できない直列部分が残る場合、その部分の時間はプロセッサを増やしても短縮されず、速度向上には上限があります。
適用条件と例
平均CPIが測定値として与えられた場合、命令数に平均CPIを掛ければ総サイクル数になります。たとえば単一コアで3億命令を実行し、全体の平均CPIが1.2、クロック周波数が2.4 GHzなら、総サイクル数は3億×1.2=3.6億サイクルです。1秒あたり24億サイクルなので、実行時間の見積りは3.6億÷24億=0.15秒です。この計算は、与えられた平均CPIと周波数を使った見積りです。割込みや待ち時間が常にない、と一般化するものではありません。
スーパスカラでは、同じコア内で互いに依存せず実行できる命令が並んでいることが、同時実行の条件になります。VLIWではコンパイラが並列実行可能と判断した動作を命令語にまとめます。どちらも並列化できる仕事がなければ、演算器を増やすだけで同じ割合の高速化が得られるわけではありません。
SIMDは同じ命令を複数データに適用するため、データごとに異なる命令を選ぶ処理とは性質が異なります。アムダールの法則を使うときは、並列化できない部分が残るかを確認します。並列化できない割合をs、プロセッサ数をNとすると、理想化した速度向上比はNを増やしても1/sに近づきます。たとえば直列部分が全体の4分の1なら、理想化した上限は4倍です。
誤りやすい点
スーパスカラは複数コアを指す言葉ではなく、一つのコア内で複数命令を並行実行する方式です。SIMDは複数データへの同一命令の適用、VLIWはコンパイラが複数の動作を一つの長い命令語にまとめる方式です。命令の数、データの数、並列性を決める主体を分けて考えます。
ここまでが冒頭部分です。ログインすると、無料でも1日2節まで全文をお読みいただけます。
アプリでこの節を読む