Unity 勉強メモ

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

C言語でオレオレ行列積ルーチンを作るプロジェクト (その1)

行列積の計算に興味をもったので、 自分でも行列積を計算するプログラムを自作してみようと思います。 最初に何の工夫もない行列積プログラムを作って、 それを順次最適化していく事で、自力でどこまで高速なルーチンを 実現できるか挑戦していきたいと思います。

初回の今回は何の工夫もない行列積プログラムです。

プログラム

プログラム全体は以下のGitHubリポジトリにあります。 今回利用するプログラムは、main.cmy_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をつけても とても遅いという結果が得られた。 これをスタート地点として、どこまで速くできるか。私の挑戦が始まる。