目次

9.4 計算時間

4.1と同じ環境でPython版OpenFDTDの計算時間を測定します。
表示する計算時間は全体の計算時間(ofd.logのtotal行)です。
標準版と同じくnovectorモードとvectorモードを実装しています。
また、単精度と倍精度を選択することができますが、倍精度で計算する利点はないので、 ここではすべて単精度で計算します。

9.4.1 CPU版の計算時間

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

表9-4-1 Python版の計算時間
(CPU、ベンチマーク100、単精度)
スレッド数
プロセス数
Numba並列mpi4py
novectorvectornovectorvector
137.8秒 (1.0)40.2秒 (1.0)37.9秒 (1.0)40.4秒 (1.0)
225.3秒 (1.5)26.4秒 (1.5)32.4秒 (1.2)34.4秒 (1.2)
416.2秒 (2.3)16.9秒 (2.4)17.7秒 (2.1)18.6秒 (2.2)
813.0秒 (2.9)15.3秒 (2.6)16.8秒 (2.3)17.7秒 (2.3)
1612.5秒 (3.0)15.6秒 (2.6)24.0秒 (1.6)21.6秒 (1.9)

表9-4-2にベンチマーク問題を変えたときの計算時間を示します。
表4-2-2と比べると同条件(共有メモリー並列、novectorモード、単精度)で、 Python版とC版の計算時間はほぼ同じです。

表9-4-2 Python版の計算時間
(CPU、Numba並列8スレッド、単精度)
ベンチマークnovectorvector
100 13.0秒 15.3秒
200 98.7秒113.7秒
300322.6秒374.8秒
400766.1秒811.0秒

9.4.2 GPU版の計算時間

表9-4-3にGPU版の計算時間を示します。
GPU版はCPU版(表9-4-2)の約5倍速くなります。
GPUでも使用メモリーが小さく速いnovectorモードを推奨します。
表4-4-1と比べると同条件(novectorモード、単精度)で、 GPUではPython版の計算時間はC版の約1.2倍です。

表9-4-3 Python版の計算時間
(GPU、単精度)
ベンチマークnovectorvector
100 3.9秒 4.1秒
200 21.3秒23.5秒
300 66.2秒74.0秒
400152.8秒メモリー不足