Openblas windowsコンパイルメモ
3791 ワード
最近Caffeを使って深さの学習の関連するプロジェクトをして、プロジェクトの制限はCPUを使って識別することしかできなくて、識別のスピードを高めるため、最適化の模型を除いて、Openblasを最適化して、Caffeの主要な計算はすべてOpenblasに渡したためです.
Caffeのデフォルトダウンロードは0.2.14.1バージョンで、このバージョンはNEHALEMカーネルのCPUに対して、MMX、SSE命令セットを最適化して、現在のCPUはBroadwellで、すでにAVX、FMA命令セットをサポートして、理論的にSSEより速いです.そこで、AVXコマンドセットをサポートするOpenblasを探すのが自然な発想ですが、探してみると、SourceForgeのWindows Binaryバージョンはいずれも古いもので、SSEコマンドセットのみをサポートしていることがわかりましたので、最新版をコンパイルしてAVXをサポートするつもりです.
初めてwindowsコンパイルオープンソースプロジェクトをやったので、とても工夫して、多くの関連方法を検索して紹介しました.Cygwinを使っているものもありますが、Cmake+VisualStudioを使っているので、MSYS+MinGWを使っているので、いろいろありますが・・・プロジェクトはVSで開発されているので、CMake+VisualStudioの方法を試してみましたが、そのためにWindows向けのCMake作成プログラムを専門にインストールしましたが、次のステップでエラーが発生し、cmakeのコンパイルが通らず、多くの方法を探しても効果がありませんでした.
幸いなことにOpenblas githubの公式サイトではWindowでのコンパイル方法(How to use OpenBLAS in Microsoft Visual Studio)が紹介されており、ひょうたんのように瓢箪を描き、操作を開始しました....
しかしNative(MSVC)ABIは、Anaconda 3,VS 2015をインストールし、cmakeという行のコードを実行したときに、エラーを報告し、関連キーワードを検索し、検索できないので、次の方法を試してみました.(やったことないし深く分析できない)
cmake .. -G "Ninja" -DCMAKE_CXX_COMPILER=clang-cl -DCMAKE_C_COMPILER=clang-cl -DCMAKE_Fortran_COMPILER=flang -DBUILD_WITHOUT_LAPACK=no -DNOFORTRAN=0 -DDYNAMIC_ARCH=ON -DCMAKE_BUILD_TYPE=Release
GNU(MinGW)ABIメソッドOK、このメソッドはMSYS 2+MinGW_W 64ツールを組み合わせて行い、MSYS 2はlinuxをシミュレートするコマンドラインであり、MinGWはlinuxコンパイラのwindows移植バージョンであることを調べた.比較的本場のlinuxの血統です.
当时ダウンロードしたデフォルトのOpenblas developブランチで、それから関连する命令を探して、コンパイルして、私のCPUはBroadwellで、最も近いのはHaswellで、skylakeを使うならば、命令セット(skylakeはAVX 512を支持します)が异なっているため、コンパイルしたのは使うことができなくて(プログラムが运行してカードの主人ができます)、心の中の长い疑问AVX命令セットが支持するかどうかを悩ませて、ターゲットアーキテクチャを指定すると、makefileは対応するAVXコマンドセットのサポートを構成しており、コンパイルコマンドを追加する必要はありません.
具体的な操作は本博文を参照してください.とても役に立ちます.
https://cloud.tencent.com/developer/article/1011945
github公式操作説明:
https://github.com/xianyi/OpenBLAS/wiki/How-to-use-OpenBLAS-in-Microsoft-Visual-Studio
コンパイルに合格して、とても楽しくて、バージョンは0.3.4で、旧版の0.2.14.1に比べて、20 fpsから23 fpsに昇格して、性能は15%向上して、 アップグレードは限られていますが、CPUベースの案もそうするしかありません.
私が使っているコンパイル命令:make-j 8 TARGET=HASWELL BINARY=64 DEBUG=0 NOFORTRAN=1 USE_THREAD=1
テストを経てOpenMPを開き、スレッド数を指定した(外層プログラムがOpenMPを使用しているため)最後に、OpenBlas自身にスレッドを管理させ、性能が最も高く、OpenMPを開くかどうかは差がないことを発見した.
もう一つのブランチはOptimized for deeplearningで、ダウンロードしてコンパイルして、スピードが速いかどうかを見てみましたが、公式サイトのヒントのバグに遭遇しました.
:0:4: error: expected identifier or '(' before numeric constant
そこで説明を見てみると、この問題は解決されていて、新しいバージョンのgccが遭遇すると言って、低いバージョンに変えると問題ありません(わけがわからなくて、後で検索していくつかのマクロコマンドの定義フォーマットのサポートが異なる可能性があることを発見して、コンパイルの間違いを招きます)、ヒントに従って http://repo.msys2.org次の3つのパッケージをダウンロードします.
mingw-w64-x86_64-crt-git-6.0.0.5100.739199f8-1-any.pkg.tar.xz
mingw-w64-x86_64-headers-git-6.0.0.5102.2f16a8c7-1-any.pkg.tar.xz
mingw-w64-x86_64-tools-git-6.0.0.5079.3b7a42fd-1-any.pkg.tar.xz
pacman-Uコマンドを使用してパスの下にパッケージをインストールし、gitツールのダウングレードを完了しました.以前は7.xバージョンでしたが、今は6.0に下がって、再コンパイルして、やはりエラーを報告しませんでした.
その間にウェブページで言ったもう一つの方法を試してみました:SourceForgeからMinGWをダウンロードしてもエラーは報告されず、MSYS 2のpacmanがダウンロードしたデフォルトのMinGWはエラーを報告します.
そこでSourceForgeから最新の8.Xバージョンをダウンロードしました.ダウンロードしたのはダウンロード器だけで、まだ1時間以上ダウンロードしなければなりません.試してみると、この方法はだめです.まだこのエラーを報告します.
テストの結果、optimizedというバージョンの速度はdevelopバージョンよりやや遅く、masterバージョンとほぼ同じで、最も速いのはdevelopバージョンで、テストの結果、developバージョンも正確です.
Windowsの下でlinuxオープンソースをコンパイルするのは2回目(初めてCmakeスキームで成功しなかった)で、本当に波乱万丈で、幸いにも最終的に試通しました.書いて、後で参考にしましょう.
www.intelvisioncn.com