6.4 計算時間

3.1と同じ環境でPython版OpenSTFの計算時間を測定します。
計算時間の全体(ost.logの"total"行)を表示します。
計算時間の大部分はpart-2(SOR法による連立一次方程式の求解)が占めます。
標準版と同じくnovectorモードとvectorモードを実装しています。

6.4.1 CPU版の計算時間

表6-4-1にCPU版の計算時間を示します。
8スレッドまたは8プロセスで約6倍速くなります。
Numba並列とmpi4pyの計算時間はほぼ同じです。
また、novectorモードとvectorモードの計算時間はほぼ同じです。
これからCPUでは使用メモリーの少ないnovectorモードを推奨します。
なお、ハイパースレッディングの効果はないので物理コア数を推奨します。

表6-4-1 Python版の計算時間(CPU、ベンチマーク300、単精度、()内は1スレッドとの速度比)
スレッド数
プロセス数
Numba並列mpi4py
novectorvectornovectorvector
1118.9秒 (1.0)108.5秒 (1.0)118.6秒 (1.0)113.7秒 (1.0)
2 61.1秒 (1.9) 59.7秒 (1.8) 61.0秒 (1.9) 55.8秒 (2.0)
4 31.6秒 (3.8) 29.3秒 (3.7) 31.8秒 (3.7) 29.1秒 (3.9)
8 20.2秒 (5.9) 18.3秒 (5.9) 21.1秒 (5.6) 19.1秒 (6.0)
16 17.3秒 (6.9) 18.3秒 (5.9) 23.7秒 (5.0) 22.0秒 (5.2)

表6-4-2にベンチマーク問題を変えたときの計算時間を示します。

表6-4-2 Python版の計算時間(CPU、Numba並列8スレッド、単精度)
ベンチマークnovectorvector
300 20.2秒 18.3秒
400 47.1秒 44.5秒
500 89.7秒 88.2秒
600160.2秒152.8秒

以上からCPUでは、使用メモリーが少ないnovectorモードを推奨します。
表3-2-2と比べると同条件(CPU、novectorモード、単精度)で、 Python版はC版の約1.5倍の計算時間がかかっています。

6.4.2 GPU版の計算時間

表6-4-3にGPU版の計算時間を示します。
GPUではCPUと異なりvectorモードがnovectorモードの約5倍速くなります。
これからGPUでは使用メモリーは増えますがvectorモードを推奨します。
表3-4-1と比べるとGPUではC版とPython版(vectorモード)の計算時間はほぼ同じです。

表6-4-3 Python版の計算時間(GPU、単精度)
ベンチマークnovectorvector
300 15.4秒 3.2秒
400 35.6秒 6.9秒
500 68.5秒13.3秒
600117.4秒23.2秒

図6-4-1に表6-4-2と表6-4-3の4ケースの計算時間を示します。


図6-4-1 Python版の計算時間(CPU:8スレッド、単精度)