Unity 勉強メモ

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

行列積の計算をCPU-Throttlingを無効にして測定し直してみた

行列積の実行結果が時々極端に速くなったり遅くなったりする現象に遭遇した。 ATLASのインストール時にCPU-Throttlingを無効にするという操作をしたのを 覚えていたので、これまで作ったルーチンをCPU-Throttlingを無効にして 測定しなおしてみた。 それぞれ5回ずつ測定し、中央値を比較した。

実行環境

OpenBLAS

$ clang -static -I/opt/OpenBLAS/include -L/opt/OpenBLAS/lib \
  dgemm_test.c -lopenblas -lpthread -lrt
回数
1回目 0.470308
2回目 0.459005 (中央値)
3回目 0.463911
4回目 0.457545
5回目 0.457371

ATLAS

$ clang -static -I/usr/local/atlas/include -L/usr/local/atlas/lib \
  dgemm_test.c -lcblas -latlas -lrt
回数
1回目 0.812078 (中央値)
2回目 0.813572
3回目 0.815132
4回目 0.808144
5回目 0.809640

Intel MKL

icc -mkl dgemm_test.c -lrt
回数
1回目 0.694022
2回目 1.114360 (中央値)
3回目 1.182304
4回目 1.312006
5回目 0.804651

my_dgemm06

$ icc -static -openmp -mavx -O3 main.c my_dgemm06.c -I/opt/OpenBLAS/include \
  -L/opt/OpenBLAS/lib -lopenblas -lpthread -lrt
回数
1回目 1.228108 (中央値)
2回目 1.217653
3回目 1.222779
4回目 1.252675
5回目 1.266891

比較

BLAS 比率
OpenBLAS 0.459005 100%
ATLAS 0.812078 56.5%
Intel MKL 1.114360 41.2%
my_dgemm06 1.228108 37.4%

まとめ

OpenBLASはやっぱり速かった。 Intel MKLは最速値ではATLASに勝っているけど、中央値で負けている。 これは測定環境の問題もあるかもしれない。 今はラップトップPCでWebブラウザとかを開きつつ作業しているけれど、 ディスクトップ環境等を入れない状態で測定したらもっと変わるかもしれない。 でも自作DGEMMがIntel MKLの90%の速度で動いたのは嬉しい。