比較内容
ライフゲームを、C++, OpenMP, CUDAを使用して実装した時のベンチマークです。描画にはOpenGLを使用しました。参考としてJavaScriptを使用したときの数値も載せていますが、アルゴリズムが異なるので参考程度です。
CUDA最適化内容
- メモリ配置 (pinned memory)
- Shared Memory
- Stream (パイプライン化)
- メモリコピー回数の削減
実行環境
- Core i7-6400 @3.4GHz
- 4 cores (8 logical cores)
- GeForce GTX 1070 @1.531GHz
- 1920 CUDA Cores
- 15 SMs
- 256GByte/s (256 bit x 8Gbps)
結果
Generation Per Second (この数字が大きいほど高速)
Size | 512 x 512 | 1024 x 1024 | 2048 x 2048 | 4096 x 4096 | 8192 x 8192 |
---|---|---|---|---|---|
JavaScript | 34 | 9 | 2.6 | 0.63 | 0 |
C++ | 500 | 83 | 19 | 5.35 | 1.2 |
OpenMP | 1000 | 250 | 66 | 19.61 | 4.5 |
CUDA | 1000 | 1000 | 250 | 76.92 | 18.18 |
CUDA + Optimization | 1000 | 1000 | 1000 | 125 | 43.48 |