MirのndsliceでMKLを使う
前回はMirについての入門記事を書きました。 いつのまにか mir-algorithm のREADMEに件の記事が載っていてビックリしました。
今回は、前回mir-glasの不具合で断念した、行列演算をIntel MKLで実現しようと思います。
Intel MKLのインストール
Anacondaを使うのが一番簡単だと思います。conda install mkl
とかで一瞬です。
デフォルトだと~/anaconda3/lib/libmkl_rt.so
とかにできていて、anaconda を activate しているときはLD_LIBRARY_PATH
パスが通っているはずです。
Lubeck
Mir-BLAS/LAPACKはLubeckというmirのndslice用にラップしたライブラリから使うと便利です。 コードは前回のmir-introリポジトリをそのまま使った別ブランチに用意しました。
https://github.com/ShigekiKarita/mir-intro/tree/lubeck
自前のプロジェクトにはdub.json
にこんな感じで追記します。
{
...,
"dependencies": {
"lubeck": "~>0.0.4"
},
"libs": [ "mkl_rt" ],
...
}
使い方は a と b の ndslice の行列積を c に格納するには、c[] = mtimes(a, b);
という感じで計算します。
こちらが、実行結果です。
衝撃的ですね...。これからはMKLをメインに使いたいと思います。
ところで、最近はCUDA関係のライブラリをDから使うためのライブラリを作っています。早速cuBLAS(NVIDIAのBLASライブラリ)が動くようになったので、次回はこの辺のベンチマークをとってみたいですね。