行列積の実行結果が時々極端に速くなったり遅くなったりする現象に遭遇した。
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 |
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%の速度で動いたのは嬉しい。