前回は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.png

衝撃的ですね...。これからはMKLをメインに使いたいと思います。

ところで、最近はCUDA関係のライブラリをDから使うためのライブラリを作っています。早速cuBLAS(NVIDIAのBLASライブラリ)が動くようになったので、次回はこの辺のベンチマークをとってみたいですね。