OpenBLAS のインストール(ソースコードを使用)(clang, flang を利用)(Windows 上)

BLAS(Basic Linear Algebra Subprograms)は,行列演算,ベクトル演算の機能をもったプログラム群である.

目次

  1. 前準備
  2. perl, nijna, clang, flang および関連パッケージのインストール(conda3 を使用)
  3. Windows で OpenBLAS をソースコードからビルドして,インストールする
  4. OpenBLAS の動作確認

OpenBLAS

OpenBLAS はオープンソースの BLAS(Basic Linear Algebra Subprograms)ライブラリである.行列演算や線形代数計算のための関数を提供する.

主な機能:行列乗算(DGEMM)などの関数,マルチスレッド対応,自動的にCPUを検出してコンパイル,

BLAS を用いたプログラムは, https://gist.github.com/xianyi/6930656 などで公開されている.

【BLAS の主な関数】

関連する外部ページ

関連項目BLAS, LAPACK

前準備

Build Tools for Visual Studio 2022 (ビルドツール for Visual Studio 2022)または Visual Studio 2022 のインストール(Windows 上)

インストールの判断Build Tools for Visual Studio は,開発ツールセットである. Visual Studio は統合開発環境であり,いくつかの種類があり,Build Tools for Visual Studioの機能を含むか連携して使用するものである.インストールは以下の基準で判断してください:

不明な点がある場合は,Visual Studio 全体をインストール を行う方が良い.

Build Tools for Visual Studio 2022 のインストール(Windows 上)

  1. Windows で,コマンドプロンプト管理者として実行

    コマンドプロンプトを管理者として実行: 別ページ »で説明

    次のコマンドを実行

    次のコマンドは,Build Tools for Visual Studio 2022と VC2015 再配布可能パッケージをインストールするものである.

    winget install --scope machine Microsoft.VisualStudio.2022.BuildTools 
    winget install --scope machine Microsoft.VCRedist.2015+.x64
    
  2. Build Tools for Visual Studio 2022 での C++ によるデスクトップ開発,CLI,ATL,MFC のインストール(Windows 上)
    1. Visual Studio Installer の起動

      起動方法: スタートメニューの「Visual Studio Installer」を選ぶ.

    2. Visual Studio Build Tools 2022 で「変更」を選ぶ.
    3. C++ によるデスクトップ開発」をクリック.そして,画面右側の「インストール」の詳細で「v143 ビルドツール用 C++/CLI サポート(最新)」,「ATL」,「MFC」をチェックする.その後,「変更」をクリック.

Visual Studio のインストール(Windows 上)

  1. Windows で,コマンドプロンプト管理者として実行

    コマンドプロンプトを管理者として実行: 別ページ »で説明

    次のコマンドを実行

    次のコマンドは,Visual Studio Community 2022と VC2015 再配布可能パッケージをインストールするものである.

    winget install --scope machine Microsoft.VisualStudio.2022.Community
    winget install --scope machine Microsoft.VCRedist.2015+.x64
    
  2. Visual Studio での C++ によるデスクトップ開発,CLI のインストール(Windows 上)
    1. Visual Studio Installer の起動

      起動方法: スタートメニューの「Visual Studio Installer」を選ぶ.

    2. Visual Studio Community 2022 で「変更」を選ぶ.
    3. C++ によるデスクトップ開発」をチェック.そして,画面右側の「インストール」の詳細で「v143 ビルドツール用 C++/CLI サポート(最新)」をチェックする.その後,「インストール」をクリック.

Git,CMake のインストール(Windows 上)

Gitは,分散型のバージョン管理システム. CMakeは,クロスプラットフォームのビルドシステム生成ツール.

手順

  1. Windows で,コマンドプロンプト管理者として実行

    コマンドプロンプトを管理者として実行: 別ページ »で説明

    次のコマンドを実行

    次のコマンドは,GitCMakeをインストールし,Gitパスを通すものである.

    次のコマンドでインストールされるGitは 「git for Windows」と呼ばれるものであり, Git,MinGW などから構成されている.

    winget install --scope machine Git.Git
    powershell -command "$oldpath = [System.Environment]::GetEnvironmentVariable(\"Path\", \"Machine\"); $oldpath += \";c:\Program Files\Git\cmd\"; [System.Environment]::SetEnvironmentVariable(\"Path\", $oldpath, \"Machine\")"
    winget install --scope machine Kitware.CMake
    powershell -command "$oldpath = [System.Environment]::GetEnvironmentVariable(\"Path\", \"Machine\"); $oldpath += \";c:\Program Files\CMake\bin\"; [System.Environment]::SetEnvironmentVariable(\"Path\", $oldpath, \"Machine\")"
    

関連する外部ページ

関連項目Git バージョン管理システム, Git の利用, CMake ビルドシステム生成ツール, CMake の使用方法

perl, nijna, clang, flang および関連パッケージのインストール(conda を使用)

miniconda3 のインストール(Windows 上)

Anaconda をすでにインストール済みのときは,miniconda をインストールしないことAnaconda3 の中の conda を使うことにする)

Windows での miniconda3 のインストール手順は, 別ページ »で説明

perl, nijna, clang, flang および関連パッケージのインストール(conda を使用)

  1. Windows で,コマンドプロンプト管理者として実行

    コマンドプロンプトを管理者として実行: 別ページ »で説明

  2. perl, nijna, clang, flang および関連パッケージのインストール

    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
    
  3. 新しくWindowsコマンドプロンプトを開く
  4. OpenBLAS のインストールの前に、perl, cmake の確認

    エラーメッセージが出なければ OK.

    where perl
    where cmake
    
  5. clang, flang のバージョン、インストールディレクトリ等の確認
    clang --version
    flang --version
    
  6. システム環境変数 LIB先頭に次を追加

    miniconda3 の配下にインストールされたライブラリ等を有効にするため

    c:\tools\miniconda3」は実際のインストールディレクトリに置き換えること

    c:\tools\miniconda3\Library\lib
    
  7. システム環境変数 CPATH先頭に次を追加

    Anaconda3 の配下にインストールされたインクルードファイル等を有効にするため

    c:\tools\miniconda3」は実際のインストールディレクトリに置き換えること

    c:\tools\miniconda3\Library\include
    

OpenBLAS のインストール(Windows 上)

関連する外部ページhttps://github.com/xianyi/OpenBLAS/wiki/Installation-Guide

  1. OpenBLAS のウェブページを開く

    https://www.openblas.net/

  2. このウェブページで利用条件などを確認

    必ず、最新情報を確認すること

  3. Visual Studio の x64 Native Tools コマンドプロンプトを起動.

    起動は,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)」がインストールされる.その手順は,別ページ »で説明

  4. OpenBLAS のインストールディレクトリを空にする
    mkdir c:\tools
    cd c:\tools
    rmdir /s /q OpenBLAS
    
  5. ソースコードのダウンロード
    cd c:\tools
    git clone https://github.com/xianyi/OpenBLAS.git
    
  6. cmake の実行

    https://github.com/xianyi/OpenBLAS/wiki/Installation-Guide の記述による

    cd c:\tools
    cd OpenBLAS
    rmdir /s /q build
    mkdir build
    cd build
    del CMakeCache.txt
    rmdir /s /q CMakeFiles\
    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
    
  7. cmake の結果の確認

    エラーメッセージが出ていないこと

    * ここでエラーが出た場合には、 「x64 Native Tools コマンドプロンプト」を使っていることを確認する * ここでエラーが出て、 「x64 Native Tools コマンドプロンプト」を使っている場合は、 システム環境変数 LIBシステム環境変数 CPATHを確認する

  8. ビルド
    cmake --build . --config Release --target install 
    
  9. ビルド結果の確認
  10. c:\tools\OpenBLAS の下にファイルができるので確認する
  11. Windowsシステム環境変数CPATHc:\tools\OpenBLAS\include追加

    Windows での環境変数の設定は,マイコンピュータを右クリック → プロパティ→ 詳細設定 → 環境変数をクリック

    Windows の画面の表示では、「\」(円マーク)が表示される

    • システムの環境変数 CPATH
    • 追加する値: c:\tools\OpenBLAS\include
  12. Windowsシステム環境変数 LIBc:\tools\OpenBLAS\lib追加
    • システムの環境変数 LIB
    • 追加する値: c:\tools\OpenBLAS\lib
  13. Windowsシステム環境変数 Pathに,c:\tools\OpenBLAS\bin追加することにより,パスを通す

    Windows で,コマンドプロンプト管理者として実行

    コマンドプロンプトを管理者として実行: 別ページ »で説明

    次のコマンドを実行

    powershell -command "$oldpath = [System.Environment]::GetEnvironmentVariable(\"Path\", \"Machine\"); $oldpath += \";c:\tools\OpenBLAS\bin\"; [System.Environment]::SetEnvironmentVariable(\"Path\", $oldpath, \"Machine\")"
    
  14. Windowsシステム環境変数 OpenBLAS, OpenBLAS_HOMEc:\tools\OpenBLAS を設定

    これは OpenCV のビルドのときに利用される環境変数

    • システムの環境変数 OpenBLAS_HOME
    • 値: c:\tools\OpenBLAS

OpenBLAS の動作確認

https://gist.github.com/xianyi/6930656 に掲載の プログラムを利用

Windows での確認手順と結果は次の通り

  1. Visual Studio の x64 Native Tools コマンドプロンプトを起動.

    起動は,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)」がインストールされる.その手順は,別ページ »で説明

  2. プログラムの準備

    https://gist.github.com/xianyi/6930656 に掲載の プログラムを利用. hoge.cのようなファイル名で保存.

  3. ビルドして実行

    ビルド時にエラーが出たときは、システム環境変数 LIB を確認すること

    cl hoge.c /I "c:\tools\OpenBLAS\include\openblas" openblas.lib
    .\hoge.exe
    

    次のように「コンピュータに openblas.dllがないため、プログラムを開始できません。」と表示される場合がある

    このときは、 Windowsシステム環境変数 Path に c:\tools\OpenBLAS\bin を追加しているか、確認すること

サンプルプログラム

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;
}