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

OpenBLAS は,BLAS(Basic Linear Algebra Subprograms)の実装の1つである.

URL: https://www.openblas.net/

ソフトウェア等の利用条件は,利用者自身で確認下さい.

サイト内の関連ページ

BLAS の機能の概要

前準備

Ubuntu のシステム更新

Ubuntu で OS のシステム更新を行うときは, 端末で,次のコマンドを実行する。これは、パッケージ情報を最新の状態に保ち、インストール済みのパッケージをセキュリティアップデートやバグ修正を含めて更新するためである。

Ubuntu のインストールはこちらの別ページで説明する。

# パッケージリストの情報を更新
sudo apt update
# インストール済みのパッケージを包括的に更新 (依存関係も考慮)
sudo apt full-upgrade
# カーネル更新等で実際に再起動が必要な場合のみ実行を推奨
# sudo shutdown -r now

パッケージによるインストール

ビルド済みのパッケージを利用する場合は,端末で,次のコマンドを実行する。libopenblas-dev には,ライブラリ本体に加えて,ヘッダファイル(cblas.h など),pkg-config ファイル,CMake 用の設定ファイルが含まれる。

# パッケージリストの情報を更新
sudo apt update
sudo apt -y install libopenblas-dev

システム既定の BLAS 実装として OpenBLAS を選ぶときは,端末で,次のコマンドを実行する。

sudo update-alternatives --config libblas.so.3

以降では,ソースコードからビルドしてインストールする手順を示す。

ソースコードからのビルドのための前準備

C/C++ コンパイラと Make とビルドツールのインストール

ソフトウェアをソースコードからビルドするには、C/C++コンパイラ (通常はGCC) や make ユーティリティといった開発ツールが重要である。Ubuntuでは、これらのツールは build-essential パッケージにまとめられている。インストールするには,端末で,次のコマンドを実行する。

sudo apt -y install build-essential libtool texinfo dpkg-dev pkg-config

libtool, texinfo, dpkg-dev, pkg-config は、より複雑なビルドやパッケージ管理の際に役立つ開発関連ツールである。

cmake と git のインストール(Ubuntu 上)

OpenBLAS のソースコードの取得と,CMake によるビルドのために必要である。端末で,次のコマンドを実行する.

# パッケージリストの情報を更新
sudo apt update
sudo apt -y install cmake git

gfortran のインストール(Ubuntu 上)

LAPACK 部分のビルドには Fortran コンパイラが必要である。端末で,次のコマンドを実行する.

# パッケージリストの情報を更新
sudo apt update
sudo apt -y install gfortran

OpenBLAS のソースコードのダウンロード

関連する外部ページhttps://www.openmathlib.org/OpenBLAS/docs/install/

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

    https://www.openblas.net/

  2. このウェブページで利用条件などを確認する
  3. ソースコードのダウンロード

    OpenBLAS のリポジトリは,2023 年に OpenMathLib organization へ移動している。端末で,次のコマンドを実行する.

    cd /tmp
    rm -rf OpenBLAS
    git clone https://github.com/OpenMathLib/OpenBLAS.git
    

OpenBLAS のビルドとインストール(Ubuntu 上)

  1. cmake の実行

    https://www.openmathlib.org/OpenBLAS/docs/install/ の記述による

    cd /tmp
    cd OpenBLAS
    rm -rf build
    mkdir build
    cd build
    rm -f CMakeCache.txt
    cmake .. \
        -DCMAKE_C_COMPILER=gcc \
        -DCMAKE_Fortran_COMPILER=gfortran \
        -DNOFORTRAN=0 -DDYNAMIC_ARCH=OFF \
        -DCMAKE_INSTALL_PREFIX="/usr/local/OpenBLAS" \
        -DCMAKE_BUILD_TYPE=Release
    

    -DDYNAMIC_ARCH=OFF のとき,ビルドを実行した計算機の CPU 向けに最適化されたコードのみが生成される。別の CPU の計算機でも動作させる場合は -DDYNAMIC_ARCH=ON を指定する。

  2. cmake の結果の確認

    Ubuntu での実行結果例

  3. ビルドして,インストール
    make -j$(nproc)
    sudo make install
    
  4. 結果の確認

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

共有ライブラリの検索パスの設定

/usr/local/OpenBLAS/lib は既定の検索パスに含まれないため,設定を追加する。端末で,次のコマンドを実行する.

echo "/usr/local/OpenBLAS/lib" | sudo tee /etc/ld.so.conf.d/openblas.conf
sudo ldconfig

サンプルプログラム

OpenBLAS を用いて行列の積を求める.計算結果の表示は行わないため,実行しても何も表示されない.

#include<stdio.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;
}

上のプログラムを hoge.c のようなファイル名で保存.

次のコマンドでコンパイルする。-I でヘッダファイル cblas.h の場所を,-L でライブラリの場所を指定している。

gcc -o a.out hoge.c -I/usr/local/OpenBLAS/include -L/usr/local/OpenBLAS/lib -lopenblas -lpthread

./a.out で実行