C言語でオレオレ行列積ルーチンを作るプロジェクト (その1)
行列積の計算に興味をもったので、 自分でも行列積を計算するプログラムを自作してみようと思います。 最初に何の工夫もない行列積プログラムを作って、 それを順次最適化していく事で、自力でどこまで高速なルーチンを 実現できるか挑戦していきたいと思います。
初回の今回は何の工夫もない行列積プログラムです。
プログラム
プログラム全体は以下のGitHubリポジトリにあります。
今回利用するプログラムは、main.c
とmy_dgemm01.c
です。
OpenBLASも同時に走らせて、結果を比較してルーチンが正しいことを確認しています。
コンパイル
$ clang -static -O3 main.c my_dgemm01.c -I/opt/OpenBLAS/include \ -L/opt/OpenBLAS/lib -lopenblas -lpthread -lrt
実行結果
今回はコンパイラにclangを用いました。 実行にとても時間がかかるので、今回は1回しか測定していません。
BLAS | 秒 | 速度比 |
---|---|---|
OpenBLAS | 1.618507 | 100% |
my_dgemm01 | 283.428661 | 0.571% |
まとめ
予想通り、単純な実装だとコンパイラの最適化オプションに-O3
をつけても
とても遅いという結果が得られた。
これをスタート地点として、どこまで速くできるか。私の挑戦が始まる。