概要
- Windows & Visual Studio環境でのC++の開発においてLAPACKを使いたいときは、OpenBLASが簡単です。
- OpenBLASという名前ですが、LAPACKの関数も実装されています。
- 公式のgithubでコンパイル済みbinaryも配布されているので、ダウンロードして配置するだけで使えます。つまりインストール不要。
個人的な背景
Windows上でのアプリ開発にてLAPACKを使いたい場合、ソースを持ってきてコンパイルするにしても、面倒だなあという印象がありました。Visual Studioを使う場合には、FORTRANが使えなかったり、C系列の派生ソースを持ってきてもコンパイルが上手くいかなかったりしました。結局Intel MKLを使いたいだけのためにIntelコンパイラを導入するのが楽ですが、Visual Studioのエディタの動きがますます遅くなったり、ノートPCに入れるには容量が大きかったりします。
そんなとき、金子邦彦先生の以下のWebページを見つけました。
https://www.kkaneko.jp/tools/win/openblasvc.html
え?OpenBLASって名前なのにLAPACKも入ってるの?
OpenBLASの公式サイトや公式githubを見てみると、
https://github.com/xianyi/OpenBLAS/
確かにLAPACKの実装も含まれている様子。
ただし、LAPACKも使えるようにソースからコンパイルするにはFORTRANコンパイラも必要なようです。Windows + Visual Studio環境だとFORTRANコンパイラの利用は難しいです。ですが、OpenBLAS公式がコンパイル済みのbinalyも配布してくれており、Visual Studioでリンクできるlibとdllも配布されています。しかもLAPACKも含まれています。これは嬉しい!
使い方(簡単に)
インストールも必要ありません。公式からbinaryをダウンロードして解凍し、Visual Studioのプロジェクトのプロパティーを設定するだけです。
ダウンロード
まず、OpenBLAS公式のgithubのReleaseからOpenBLAS-0.3.21-x64.zipをダウンロードします(バージョンやx86など、環境に合わせて適宜読み替えてください)。
解凍すると、bin, include, libの三つのディレクトリが入っています。これらを適当な場所におきましょう。例として、Visual Studioのソリューション・プロジェクト名をMyAppとします。OpenBLAS-0.3.21-x64ディレクトリを次のように配置することにします。
repos
|-- MyApp
| |-- MyApp.sln
| |-- MyApp.vcxproj
| |-- sources
| |-- ...
|-- OpenBLAS-0.3.21-x64
|-- bin
|-- include
|-- lib
Visual Studioの設定
次に、Visual Studioを立ち上げ、MyAppプロジェクトのプロパティーを設定します。
- Visual Studioのメニューから「プロジェクト」→「プロパティ」を選択して「MyAppプロパティ ページ」というウィンドウを開きます。
- 「構成プロパティー」→「VC++ ディレクトリ」→「インクルードディレクトリ」に
../OpenBLAS-0.3.21-x64/includeを追加します。(「構成プロパティ」→「C/C++」→「全般」→「追加のインクルードディレクトリ」で可) - 「構成プロパティー」→「VC++ ディレクトリ」→「ライブラリディレクトリ」に
../OpenBLAS-0.3.21-x64/libを追加します。(「構成プロパティ」→「リンカー」→「全般」→「追加のライブラリディレクトリ」でも可) - 「構成プロパティ」→「リンカー」→「入力」→「追加の依存ファイル」に
libopenblas.libを追加します。 - (これは無くてもいいかも)「構成プロパティー」→「VC++ ディレクトリ」→「実行可能ファイルディレクトリ」に
../OpenBLAS-0.3.21-x64/binを追加します。
すでに別の内容が設定されているときは、セミコロン;区切りで追加します。
DLLの配置
自作のアプリMyApp.exeの実行時にはOpenBLASのDLLを読み込む必要があります。次のどちらかの方法で設定してください。
- Windowsの環境変数の
Path項目に、OpenBLAS-0.3.21-x64/binのフルパスを登録してください。フルパスなので、c:\...\...\...\OpenBLAS-0.3.21-x64\binなどとなるでしょう。 -
OpenBLAS-0.3.21-x64/binの中にあるlibopenblas.dllだけを、MyAppの実行ファイルと同じ場所にコピーします。デフォルトだとMyApp/x64/Release/になると思います。自作のアプリMyApp.exeを配布する場合にも、libopenblas.dllを同梱すればユーザーに環境変数の設定をしてもらう必要はありません。
これで、LAPACKを利用するプロジェクトのコンパイルが通るようになり、実行もできると思います。
感想
ありがとう OpenBLAS。ありがとう、金子邦彦先生。