· 

第23回 並列階層のシミュレーション

前回、並列階層に対する概念的な説明をしましたが、今回は読者の皆様に具体的なイメージをつかんでいただくため、誤解を恐れず大胆に数値を仮定してシミュレーションをしてみることにします。結果の様子はできるだけよくある状況に合わせたつもりですが、個々の数字などはそのまま一人歩きされると困るものばかりですのでご注意ください。

上図のようなアーキテクチャを想定したときのシミュレーション結果を下に載せます。詳細なパラメタは最後に書くことにしてグラフの意味から説明します。このグラフは、ある計算ループを様々なハードウェア上で実行した時の実行時間を示しています。横軸がループ回転数で縦軸が実行時間(CPUサイクル数を想定した相対値)です。グラフのそれぞれの折れ線は実行方法の違いを表しており、黒が逐次実行、緑が4並列SIMD実行、青が4並列SIMD×CPU並列実行(破線が2並列CPU、実線が16並列CPU)、赤が4並列SIMD×16並列CPU×チップ並列実行(破線が2並列チップ、実線が16並列チップ)です。

 

各ループ回転数に対して最も下にある折れ線が、そのループ回転数の計算を最短時間で実行できる方法になります。黒の縦破線で領域を示し、下の方に最短時間で実行できる方法を追記しておりますが、今回の例でのおおよその傾向として、数回転以上で逐次実行よりもSIMD実行の方が速くなり、数千回転以上でSIMDとマルチコアの併用(つまり細粒度並列と中粒度並列の併用)が最速、数十万回転以上でチップ並列も併用(つまり粗粒度並列も併用)することが有利になります。

 

黒の線が逐次実行の実行時間をあらわしていますが、この線より上になると逐次実行よりも遅くなります。今回の例では、10回転程度において、マルチコア並列やチップ並列(つまり中粒度並列や粗粒度並列)を利用すると逐次実行よりも大幅に遅くなることがわかります。

前回、概念的に説明したことが、ある程度具体化されましたでしょうか。

 

最後にシミュレーションに使用したパラメタについて説明しておきます。単位のない相対値として実行時間をかきますが、CPUサイクルを想定した数値です。

 

ループ内処理時間を5としています。SIMD演算は4並列で、SIMDレジスタに転送するなどのオーバーヘッドを2としています。マルチコアチップ内のコア間の並列化オーバーヘッドを2000*CPU並列数-1)、チップ内マルチコアは最大16CPU並列、チップ間の並列化オーバーヘッドを20000*(チップ並列-1)としています。並列化オーバーヘッドは、あるホストのコアが他のコアに一つ一つ逐次的に並列実行の開始・終了することを想定し、定数*(並列数-1)としています。