5. EEM-MOMの計算時間

EEM-MOMでは連立一次方程式の解法に直接法と反復法(間接法)を選択することができます。

直接法

直接法については、CPU/GPUで以下のように扱います。
CPUでは修正コレスキー法は行列の対称性が利用でき、 LU法と比べて計算時間と必要メモリーが半分になりますので、修正コレスキー法を使用します。 またSIMD(SSEまたはAVX)を使用することによって約2倍速くなります。
GPUではLU法が実装されています。
表1は直接法のときの、CPU1〜8スレッドとGPUの計算時間を、要素数を変えて測定したものです。 ()内はCPU1スレッドとの速度比です(以下同じ)。
CPUでは並列計算の効果は高いですが、 GPUではCPU1スレッドの約4倍でありこれはCPUの8スレッドに少し劣ります。 GPU版のLU法には改良の余地があります。なお、直接法はマルチGPUに対応していません。

表1 EEM-MOMの計算時間(直接法)
CPU/GPU 解法 要素数=9408 要素数=14700要素数=24300
CPU 1スレッド修正コレスキー法+SSE107.2秒(1.0)382.8秒(1.0)1674.4秒(1.0)
CPU 2スレッド修正コレスキー法+SSE 50.4秒(2.1)182.9秒(2.1) 797.6秒(2.1)
CPU 4スレッド修正コレスキー法+SSE 27.0秒(4.0) 98.0秒(3.9) 424.4秒(3.9)
CPU 8スレッド修正コレスキー法+SSE 19.2秒(5.6) 74.2秒(5.2) 406.7秒(4.1)
GPU X 1 LU法 24.0秒(4.5) 88.1秒(4.3) 390.1秒(4.3)

反復法

反復法では、CPU/GPUともに共役勾配法を使用します。
表2は反復法の計算時間です。
反復法はマルチGPUに対応していますので1GPUと2GPUの結果を示します。
CPUのマルチスレッドでは2倍程度しか速くならず、 一方GPUではCPU1スレッドに比べて1GPUでは14〜20倍、2GPUでは15〜28倍速くなります。

表2 EEM-MOMの計算時間(反復法)
CPU/GPU 解法 要素数=9408 要素数=14700 要素数=24300
CPU 1スレッド共役勾配法+SSE36.9秒(1.0) 112.5秒(1.0) 430.5秒(1.0)
CPU 2スレッド共役勾配法+SSE20.8秒(1.8) 63.6秒(1.8) 246.9秒(1.7)
CPU 4スレッド共役勾配法+SSE18.9秒(2.0) 59.4秒(1.9) 232.7秒(1.9)
CPU 8スレッド共役勾配法+SSE18.7秒(2.0) 58.3秒(1.9) 232.4秒(1.9)
GPU X 1 共役勾配法 2.6秒(14.2) 6.5秒(17.3) 21.1秒(20.4)
GPU X 2 共役勾配法 2.4秒(15.4) 5.1秒(22.1) 15.4秒(28.0)
反復回数 300 400 600

直接法と反復法の比較

直接法の計算時間は要素数だけで決まり要素数の3乗に比例します。
一方反復法の計算時間は要素数の2乗と反復回数の積に比例し、反復回数は計算モデルに依存します。
反復法の収束が速いときは反復法が、遅いときは直接法が有利になります。
CPUではマルチスレッド時の速度比は直接法の方が高いために多くの場合直接法が有利です。
GPUでは直接法の速度比が低いために直接法と反復法のどちらがよいかは収束状況によります。
なお、どちらを用いても計算結果は同じです。
また、計算に必要なメモリーは、計算方法(直接法/反復法)、CPU/GPU、逐次/並列で異なりますので、 取扱説明書を参考にして下さい。


図1 計算モデル(立方体、平面波入射)