Unity 勉強メモ

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

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

色々試行錯誤した結果、大分速くなった。 OpenMPの使い方も大分わかってきた。 前のプログラムが動かなかったのはprivate節を指定していなかったからだった。

プログラム

プログラム全体は以下のGitHubリポジトリにあります。 今回利用するプログラムは、 main.cmy_dgemm07.cです。

コンパイル

iccでもgccでも通るようになったが、なぜかgccコンパイルしたほうが速くなるので、 gccコンパイルした。

$ gcc -static -fopenmp -mavx -O3 main.c my_dgemm07.c 
  -I/opt/OpenBLAS/include   -L/opt/OpenBLAS/lib -lopenblas -lpthread -lrt

実行結果

プログラムを5回実行した結果を以下に示します。

回数
1回目 2.739869
2回目 2.676472
3回目 2.769849
4回目 2.743161 (中央値)
5回目 2.747036

速度の比較

BLAS 比率
OpenBLAS 1.475622 100%
Intel MKL 1.574675 93.7%
my_dgemm07 2.743161 53.8%
ATLAS 5.104218 28.9%

まとめ

行列積ルーチンをいじくり回した結果大分速くなってきた。 OpenBLASの50%超えたのは相当嬉しい。