概要
- 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。ありがとう、金子邦彦先生。