行列積の計算を理想的な環境で測定し直してみた
ディスクトップ環境を入れていない理想的なlinux環境を用意したので、 そこで行列積ルーチンの速度を測定して見ました。
実験環境
最小インストール状態から必要なソフトウェアのみをインストールした。
今回は行列サイズを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超を果たしている。