トップページインストール,使い方Windows の種々のソフトウェア(インストール,使い方)OpenBLAS をソースコードからビルドして、インストール(clang, flang を使用)(Windows 上)

OpenBLAS をソースコードからビルドして、インストール(clang, flang を使用)(Windows 上)

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

Windows での OpenBLAS のインストールは,複数の方法がある.

以下,Windows で,OpenBLAS をソースコードからビルドして,インストールする手順をスクリーンショット等で説明する.clang, flang を使用する.

目次

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

サイト内の関連ページ

謝辞

OpenBLAS の作者に感謝します


BLAS の機能の概要(ごく一部)

前準備

Build Tools for Visual Studio 2022 (ビルドツール for Visual Studio 2022)のインストール

Build Tools for Visual Studio は,Windows で動くMicrosoft の C++ コンパイラーである.

ダウンロードページ

https://visualstudio.microsoft.com/ja/downloads/

詳細説明

Build Tools for Visual Studio 2022 (ビルドツール for Visual Studio 2022)のインストール: 別ページで説明している.

インストール手順の概要

  1. ダウンロード URL を開く

    https://visualstudio.microsoft.com/ja/downloads/

  2. このページの「Build Tools のダウンロード」をクリック
  3. ダウンロードが始まる
  4. ダウンロードした .exe ファイルを実行する
  5. 表示を確認し,「続行」をクリック
  6. C++ によるデスクトップ開発」をクリック.「インストール」をクリック.

    [image]

Git のインストール

Git のページ https://git-scm.com/ からダウンロードしてインストール:

cmake のインストール

cmake のダウンロードページ: https://cmake.org/download/

miniconda3 のインストール

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

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

    where perl
    where cmake
    

    [image]
  5. clang, flang のバージョン、インストールディレクトリ等の確認
    clang --version
    flang --version
    

    [image]
  6. システム環境変数 LIB先頭に次を追加

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

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

    c:\tools\miniconda3\Library\lib
    

    [image]
  7. システム環境変数 CPATH先頭に次を追加

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

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

    c:\tools\miniconda3\Library\include
    

    [image]

Windows で OpenBLAS をソースコードからビルドして,インストールする

参考 Web ページ https://github.com/xianyi/OpenBLAS/wiki/Installation-Guide

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

    https://www.openblas.net/

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

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

    [image]
  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
    

    [image]
  5. ソースコードのダウンロード
    cd c:\tools
    git clone https://github.com/xianyi/OpenBLAS.git
    

    [image]
  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
    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
    

    [image]
  7. cmake の結果の確認

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

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

    [image]
  8. ビルド
    cmake --build . --config Release --target install 
    

    [image]
  9. ビルド結果の確認

    [image]
  10. c:\tools\OpenBLAS の下にファイルができるので確認する

    [image]

    [image]

    [image]
  11. Windows のシステム環境変数CPATHc:\tools\OpenBLAS\include追加

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

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

    [image]
  12. Windows のシステム環境変数 LIBc:\tools\OpenBLAS\lib追加

    [image]
  13. システム環境変数 Pathに,c:\tools\OpenBLAS\bin追加することにより,パスを通す

    管理者として実行した コマンドプロンプトで,次のコマンドを実行.

    call powershell -command "$oldpath = [System.Environment]::GetEnvironmentVariable(\"Path\", \"Machine\"); $oldpath += \";c:\tools\OpenBLAS\bin\"; [System.Environment]::SetEnvironmentVariable(\"Path\", $oldpath, \"Machine\")"
    

    [image]
  14. Windows のシステム環境変数 OpenBLAS, OpenBLAS_HOMEc:\tools\OpenBLAS を設定

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

    [image]

    [image]

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
    

    [image]

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

    [image]

    このときは、 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;
}