OpenBLAS のインストール(Ubuntu 上)
URL: https://www.openblas.net/
ソフトウェア等の利用条件は,利用者自身で確認下さい.
【サイト内の関連ページ】
- Windows での OpenBLAS のインストール: 別ページ »で説明
BLAS の機能の概要
- Level 1 ベクトルとベクトルの演算
- DOT : 内積
- AXPY : AXPY 演算 ( y <- ax + y の形など)
- NORM : ノルム など
- Level 2 行列とベクトルの演算
- 行列とベクトルの積 ( y <- Ax )
- 行列の rank-1 更新 ( A <- A + xy' )
- Level 3 行列同士の演算
- 行列と行列の積 ( Z <- XY )
前準備
Ubuntu のシステム更新
Ubuntu で OS のシステム更新を行うときは, 端末で,次のコマンドを実行する。これは、パッケージ情報を最新の状態に保ち、インストール済みのパッケージをセキュリティアップデートやバグ修正を含めて更新するためである。
# パッケージリストの情報を更新
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/
- OpenBLAS のウェブページを開く
- このウェブページで利用条件などを確認する
- ソースコードのダウンロード
OpenBLAS のリポジトリは,2023 年に OpenMathLib organization へ移動している。端末で,次のコマンドを実行する.
cd /tmp rm -rf OpenBLAS git clone https://github.com/OpenMathLib/OpenBLAS.git
OpenBLAS のビルドとインストール(Ubuntu 上)
- 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を指定する。
- cmake の結果の確認
Ubuntu での実行結果例
- ビルドして,インストール
make -j$(nproc) sudo make install - 結果の確認
エラーメッセージが出ていないこと.
共有ライブラリの検索パスの設定
/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 で実行