BLAS(Basic Linear Algebra Subprograms)は,行列演算,ベクトル演算の機能をもったプログラム群である.
【目次】
【Windows での OpenBLAS のインストール(サイト内のページ)】
複数の方法がある.方法を問わない場合には,Build Tools for Visual Studio を利用するのが簡単である.
【サイト内の関連ページ】
謝辞
OpenBLAS の作者に感謝します
BLAS の主な機能(ごく一部を紹介)
Windows での Visual Studio Community 2022 のインストール: 別ページ »で説明
Visual Studio Community 2022 に, Build Tools for Visual Studio 2022の機能が含まれている.
Windows での Build Tools for Visual Studio 2022 (ビルドツール for Visual Studio 2022) のインストール: 別ページ »で説明
【関連する外部ページ】
Windows での Git のインストール: 別ページ »で説明
【関連する外部ページ】
Git の公式ページ: https://git-scm.com/
Windows での cmake のインストール: 別ページ »で説明
【関連する外部ページ】
cmake の公式ダウンロードページ: https://cmake.org/download/
Anaconda をすでにインストール済みのときは,miniconda をインストールしないこと(Anaconda3 の中の conda を使うことにする)
Windows での miniconda3 のインストール手順は, 別ページ »で説明
コマンドプロンプトを管理者として実行: 別ページ »で説明
https://github.com/xianyi/OpenBLAS/wiki/Installation-Guide の記述による
kitware/nijna の説明は https://github.com/Kitware/ninja
miniconda3 をインストールしたときに,パスを通していなかった場合は,「conda」と書く代わりに,「c:\tools\miniconda3\Library\bin\conda.bat」あるいは「C:\ProgramData\miniconda3\scripts\conda」のようにフルパスで指定する.
conda install -y perl conda install -y -c conda-forge flang clangdev libflang conda config --remove channels conda-forge conda install -y -c isuruf kitware-ninja conda config --remove channels isuruf
エラーメッセージが出なければ OK.
where perl where cmake
clang --version flang --version
miniconda3 の配下にインストールされたライブラリ等を有効にするため
「c:\tools\miniconda3」は実際のインストールディレクトリに置き換えること
c:\tools\miniconda3\Library\lib
Anaconda3 の配下にインストールされたインクルードファイル等を有効にするため
「c:\tools\miniconda3」は実際のインストールディレクトリに置き換えること
c:\tools\miniconda3\Library\include
【関連する外部ページ】 https://github.com/xianyi/OpenBLAS/wiki/Installation-Guide
必ず、最新情報を確認すること
起動は,Windows のメニューで「Visual Studio 20..」の下の「x64 Native Tools コマンドプロンプト (x64 Native Tools Command Prompt)」を選ぶ.「x64」は,64ビット版の意味である.
「x64 Native Tools コマンドプロンプト (x64 Native Tools Command Prompt)」がないとき:
C++ ビルドツール (Build Tools) のインストールを行うことで, 「x64 Native Tools コマンドプロンプト (x64 Native Tools Command Prompt)」がインストールされる.その手順は,別ページ »で説明
mkdir c:\tools cd c:\tools rmdir /s /q OpenBLAS
cd c:\tools git clone https://github.com/xianyi/OpenBLAS.git
https://github.com/xianyi/OpenBLAS/wiki/Installation-Guide の記述による
cd c:\tools cd OpenBLAS rmdir /s /q build mkdir build cd build del CMakeCache.txt cmake .. -G "Ninja" ^ -DCMAKE_C_COMPILER=clang-cl ^ -DCMAKE_Fortran_COMPILER=flang ^ -DNOFORTRAN=0 -DDYNAMIC_ARCH=OFF ^ -DCMAKE_INSTALL_PREFIX="c:\tools\OpenBLAS" ^ -DCMAKE_BUILD_TYPE=Release
エラーメッセージが出ていないこと
※ ここでエラーが出た場合には、 「x64 Native Tools コマンドプロンプト」を使っていることを確認する ※ ここでエラーが出て、 「x64 Native Tools コマンドプロンプト」を使っている場合は、 システム環境変数 LIB、システム環境変数 CPATHを確認する
cmake --build . --config Release --target install
Windows での環境変数の設定は,マイコンピュータを右クリック → プロパティ→ 詳細設定 → 環境変数をクリック
Windowsの画面の表示では、「\」(円マーク)が表示される
コマンドプロンプトを管理者として実行: 別ページ »で説明
call powershell -command "$oldpath = [System.Environment]::GetEnvironmentVariable(\"Path\", \"Machine\"); $oldpath += \";c:\tools\OpenBLAS\bin\"; [System.Environment]::SetEnvironmentVariable(\"Path\", $oldpath, \"Machine\")"
これは OpenCV のビルドのときに利用される環境変数
https://gist.github.com/xianyi/6930656 に掲載の プログラムを利用
Windows での確認手順と結果は次の通り
起動は,Windows のメニューで「Visual Studio 20..」の下の「x64 Native Tools コマンドプロンプト (x64 Native Tools Command Prompt)」を選ぶ.「x64」は,64ビット版の意味である.
「x64 Native Tools コマンドプロンプト (x64 Native Tools Command Prompt)」がないとき:
C++ ビルドツール (Build Tools) のインストールを行うことで, 「x64 Native Tools コマンドプロンプト (x64 Native Tools Command Prompt)」がインストールされる.その手順は,別ページ »で説明
https://gist.github.com/xianyi/6930656 に掲載の プログラムを利用. hoge.cのようなファイル名で保存.
ビルド時にエラーが出たときは、システム環境変数 LIB を確認すること
cl hoge.c /I "c:\tools\OpenBLAS\include\openblas" openblas.lib .\hoge.exe
OpenBLAS を用いて行列の積を求める.実行結果は何も表示されない.
#include "stdafx.h" #include<stdlib.h> #include<cblas.h> #define N 2000 int main() { // C = AB int i; double *A, *B, *C; A = (double *)malloc(sizeof(double) * N * N); B = (double *)malloc(sizeof(double) * N * N); C = (double *)malloc(sizeof(double) * N * N); for (i = 0; i < N * N; i++) { A[i] = (double)rand() / RAND_MAX; B[i] = (double)rand() / RAND_MAX; } cblas_dgemm(CblasRowMajor, CblasNoTrans, CblasNoTrans, N, N, N, 1.0, A, N, B, N, 0.0, C, N); free(A); free(B); free(C); return 0; }