線形代数計算ライブラリをインストール

できる限り高速な線形代数計算をさせるためにライブラリを入れることにした.
つか,基本的な演算だったらライブラリ探した方が手間も少なし,圧倒的に速い.

環境

条件

候補ライブラリ

  • CLAPACK
  • Intel Math Kernel Library

やったこと

CLAPACK

LinuxではCLAPACKを使っていたのでまずそれを試す.BLASは付属のものを使用.
http://www.alab.t.u-tokyo.ac.jp/~bond/doc/clapack.htmlここの通りに実行

http://www.netlib.org/clapack/に行き,CLPACK3-windows.zipをダウンロード.
展開してVCのプロジェクトを探してビルド(F7)
以下のファイルを探してどこかわかりやすいところにコピー.

  • CLAPACK/BLAS/Release/blas.lib
  • CLAPACK/Release/clapack.lib
  • CLAPACK/F2CLIBS/Release/libF77.lib
  • CLAPACK/F2CLIBS/Release/libI77.lib

コピー先ディレクトリをVCのlibraryディレクトリに登録.

今度はヘッダファイル.

  • CLAPACK/clapack.h
  • CLAPACK/F2CLIBS/f2c.h

これもコピー先ディレクトリをincludeディレクトリに登録


作ったプロジェクトのリンクに

  • libF77.lib libI77.lib blas.lib clapack.lib

を追加.

ここまで参考ページの通りに実行

#include "f2c.h"
#include "clapack.h"
dgesv_(&n,&nrhs,A,&lda,ipiv,b,&ldb,&info); 

こんな関数.どんなことやるのかはGoogle頼み.マニュアルはほとんどない.

でも,Linuxで動いてたプログラムが動かない・・・.
どうやっても動かないので,悩んでた所で,共有ファイルサーバにインテルのマス・カーネル・ライブラリがあったのを思い出した.

Intel Math Kernel Library (Intel MKL)

ファイルサーバのマニュアル通りにインストール.

ライセンスファイルをProgram Files\Intel\Lisences\に置く
.exeをクリックしてインストール.

インストールデフォルトなら

プロジェクトのリンクに

を追加.lapackの方はいらないかも.

参考ページ
http://stat.scphys.kyoto-u.ac.jp/~ryoichi/CP/visualc.html
インテル(R) マス・カーネル・ライブラリ Windows* 版 - Microsoft* Visual C/C++* でのコンパイルとリンク

#include "mkl.h"
dgesv(&n,&nrhs,A,&lda,ipiv,b,&ldb,&info); 

こんな関数.clapackで必要だった_(アンダーバー)が不要.

結果

MKLで無事動いた.まだデバッグモードでしか試してないけども.

  • 128*128の連立方程式を解く
    • 自作,Gauss消去法 -- 2.9〜3.1[sec]
    • MKL -- 0.27〜0.29[sec]
    • CLAPACK -- 記録無し

10倍か.最適化コンパイルすればまだ速くなるかと.書いてる人(自分)がプログラマでないので,もっとうまくすれば速くできるはず.