Unity 勉強メモ

ゲームエンジンのUnityを勉強するブログです。

行列積の計算を理想的な環境で測定し直してみた

ディスクトップ環境を入れていない理想的なlinux環境を用意したので、 そこで行列積ルーチンの速度を測定して見ました。

実験環境

  • CPU: Intel(R) Core(TM) i7-3770 CPU @ 3.40GHz
  • メモリ: 16GB
  • OS: Debian 7.8 64bit

最小インストール状態から必要なソフトウェアのみをインストールした。

今回は行列サイズを4000×4000にして測定した。

OpenBLAS

回数
1回目 1.475622 (中央値)
2回目 1.481260
3回目 1.466044
4回目 1.472401
5回目 1.485522

ATLAS

回数
1回目 5.116235
2回目 5.104210
3回目 5.104218 (中央値)
4回目 5.103324
5回目 5.104578

Intel MKL

回数
1回目 1.574675 (中央値)
2回目 1.295781
3回目 2.063746
4回目 1.824092
5回目 1.571934

うーん、同じように測定しているのにどうしてIntel MKLは こんなに値が変動するのだろう。

my_dgemm06

回数
1回目 4.344036
2回目 4.240536
3回目 4.334922 (中央値)
4回目 4.302917
5回目 4.390218

比較

BLAS 比率
OpenBLAS 1.475622 100%
Intel MKL 1.574675 93.7%
my_dgemm06 4.334922 34.0%
ATLAS 5.104218 28.9%

まとめ

今回の結果は割と納得できるものである。 OpenBLASやIntel MKLは特にディスクトップ用CPUに最適化されている と考えると上のような結果になるのだろう。 ATLASは自動チューニングでブロックサイズ等の調整は行うものの、 アーキテクチャに特化した最適化は行わないので遅いのだと思う。 ディスクトップCPUだとSIMD演算も高速になるのだろうか。 my_dgemm06がATLAS超を果たしている。