Windows MatlabのMexでOpenBlasを使う
研究でC++とcBlasで書いていたコードをMatlab上でMexファイルとして呼び出せるようにする必要があり、
- OpenBLASのインストール
- Mexでcblasを呼びだす
についてまとめました。
特にOpenBLASのソースからのビルドはめんどくさかったので忘備録として残しておきます。
ちなみに、MexコンパイラはVisual Studio 2017を使用しています。
OSはWindows 10です。
OpenBLASのインストール
cmakeを使ってOpenBlasをMake & Installします。
cmakeはMiniconda環境でインストール&実行しました。
主に公式のドキュメントに従って行います。
Minicondaをインストール
公式サイトからMinicondaをインストールします。
Anaconda Promptで以下を実行
conda update -n base conda
conda config --add channels conda-forge
Condaで以下をインストール
Fortranコンパイラではflangを使用します。
conda install -y cmake flang clangdev perl libflang git
conda install -y -c isuruf kitware-ninja
バッチファイルを端末上で実行
Visual Studio 2017の場合以下の場所にバッチファイルがあるので、プロンプト上で実行します。
/c/Program\ Files\ \(x86\)/Microsoft\ Visual\Studio/2017/Community/VC/Auxiliary/Build/vcvars64.bat
環境変数を通す
set "LIB=%CONDA_INSTALL_LOCN%\Library\lib;%LIB%"
set "CPATH=%CONDA_INSTALL_LOCN%\Library\include;%CPATH%
公式からOpenBLASをgit clone
git clone https://github.com/xianyi/OpenBLAS.git
buildディレクトリを作成
cd OpenBLAS/
mkdir build
cd build/
Cmake
cmake ../ -G "Ninja" ^
-DCMAKE_C_COMPILER=clang-cl ^
-DCMAKE_Fortran_COMPILER=flang ^
-DBUILD_WITHOUT_LAPACK=yes ^
-DNOFORTRAN=0 -DDYNAMIC_ARCH=OFF ^
-DCMAKE_INSTALL_PREFIX="C:\tools\OpenBLAS" ^
-DCMAKE_BUILD_TYPE=Release
Cmake build and install
cmake --build . --config Release --target install
Mexでのコンパイル
以下ようにオプションをつけてコンパイルします。
Mexでのコンパイル
PATH_TO_OPENBLAS
はOpenBLASをインストールしたディレクトリのトップです。
インクルードライブラリの指定は-IPATH_TO_OPENBLAS\OpenBLAS\include\openblas
のように指定しますが-I
とパスの間にスペースは入れないで実行します。
mex -R2018a filename.cpp PATH_TO_OPENBLAS\OpenBLAS\lib\openblas.lib '-IPATH_TO_OPENBLAS\OpenBLAS\include\openblas' COMPFLAGS="/openmp /O2 $COMPFLAGS" -v
-v
はコンパイルの詳細表示です。
またCOMPFLAGS="/openmp /O2 $COMPFLAGS"
はVisual Studio CompilerへのコンパイルオプションでOpenMPと最適化オプションO2をつけてコンパイルしています。
実行時について
コンパイル済みMexファイルと同じディレクトリ内に
PATH_TO_OPENBLAS\OpenBLAS\bin\openblas.dll
を配置して実行します。
Matlab2018で作成したMexファイルはMatlab2018以前では実行できないので注意が必要です。
まとめ
以上適当にまとめたので間違いなど多いと思いますが勘弁してください。
もともとのプログラムはUbuntu + clangで実行していましたが、それよりは遅くなってしまいました。SSE命令やAVX命令を使えばもっと早くなるらしいですがやる気が起きない。
参考
・公式ドキュメント
https://github.com/xianyi/OpenBLAS/wiki/How-to-use-OpenBLAS-in-Microsoft-Visual-Studio
・インストールについて
https://www.kunihikokaneko.com/dblab/toolchain/openblas.html
・Ninjaのエラー
https://github.com/xianyi/OpenBLAS/issues/1424
Author And Source
この問題について(Windows MatlabのMexでOpenBlasを使う), 我々は、より多くの情報をここで見つけました https://qiita.com/analogchiffon/items/90ed5c7eaf5bc25ad2ca著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .