4.1と同じ環境でPython版OpenFDTDの計算時間を測定します。
表示する計算時間は全体の計算時間(ofd.logのtotal行)です。
標準版と同じくnovectorモードとvectorモードを実装しています。
また、単精度と倍精度を選択することができますが、倍精度で計算する利点はないので、
ここではすべて単精度で計算します。
表9-4-1にCPU版の計算時間を示します。
8スレッドまたは8プロセスで2~3倍速くなります。
Numba並列はmpi4pyより少し速くなります。
また、novectorモードとvectorモードの計算時間はほぼ同じです。
これからCPUでは使用メモリーの小さいnovectorモードを推奨します。
なお、ハイパースレッディングの効果はないので物理コア数を推奨します。
スレッド数 プロセス数 | Numba並列 | mpi4py | ||
---|---|---|---|---|
novector | vector | novector | vector | |
1 | 37.8秒 (1.0) | 40.2秒 (1.0) | 37.9秒 (1.0) | 40.4秒 (1.0) |
2 | 25.3秒 (1.5) | 26.4秒 (1.5) | 32.4秒 (1.2) | 34.4秒 (1.2) |
4 | 16.2秒 (2.3) | 16.9秒 (2.4) | 17.7秒 (2.1) | 18.6秒 (2.2) |
8 | 13.0秒 (2.9) | 15.3秒 (2.6) | 16.8秒 (2.3) | 17.7秒 (2.3) |
16 | 12.5秒 (3.0) | 15.6秒 (2.6) | 24.0秒 (1.6) | 21.6秒 (1.9) |
表9-4-2にベンチマーク問題を変えたときの計算時間を示します。
表4-2-2と比べると同条件(共有メモリー並列、novectorモード、単精度)で、
Python版とC版の計算時間はほぼ同じです。
ベンチマーク | novector | vector |
---|---|---|
100 | 13.0秒 | 15.3秒 |
200 | 98.7秒 | 113.7秒 |
300 | 322.6秒 | 374.8秒 |
400 | 766.1秒 | 811.0秒 |
表9-4-3にGPU版の計算時間を示します。
GPU版はCPU版(表9-4-2)の約5倍速くなります。
GPUでも使用メモリーが小さく速いnovectorモードを推奨します。
表4-4-1と比べると同条件(novectorモード、単精度)で、
GPUではPython版の計算時間はC版の約1.2倍です。
ベンチマーク | novector | vector |
---|---|---|
100 | 3.9秒 | 4.1秒 |
200 | 21.3秒 | 23.5秒 |
300 | 66.2秒 | 74.0秒 |
400 | 152.8秒 | メモリー不足 |