(7/8)7 MultiThread による実行性能
図8: MPI とMultiThread の比較(3 次元ポアッソン方程式)
MultiThread による並列化効率を議論するため、図8 に、三次元ポアッソン方程式をR&BSOR 法で解いた場合の演算速度を示す。格子点数は1283、格子はカルテシアンとし、離散化は差分法( 二次精度中心差分) を用いた。また、並列化の手法として自動並列化、MPI化、MultiThread 化を用いた。
R&B SOR 法は、並列化指示行を挿入することで自動並列化が可能となる。また、MultiThread 化には、バリア同期(Dissemination) を用い、1 反復中に三カ所用いた。そして、誤差の足し込みのため、mutex lock()、mutex unlock() を用いた。MPI 化は、同期通信を用い、1 反復中に隣接領域と4 回のデータ交換を行い、誤差の足し込みにMPI All reduce()を用いた。
並列化手段として、MultiThread を行った場合、わずかではあるが、MPI による並列化よりも良い結果が得られた。MultiThread における同期待ちのコストは、MPI の場合の通信コストよりも低く押さえることが可能である。そのため、SMP マシンでは、MultiThread化することで、MPI での並列性能よりも良い性能が得られる。
自動並列化の場合、高い演算性能が得られているが、本ベンチマークでは自動並列化が極めて容易であり、MultiThread やMPI のサブルーチンコールが無い分、1 CPU あたりの性能が高い。また、CPU 数が増えた場合でもその効果が現われている。また、8 CPU から16 CPU でスーパーリニアとなっているが、16 CPU の場合、計算すべきデータ量がキャッシュサイズに収まるために現れたと考えられる。