Contents

BLASとは

BLASとは、Basic Linear Algebra Subprogramsの略です。難しく言うと、基本的な線形演算のライブラリ、簡単にいえば、行列やベクトルの基本的な計算をやってくれる関数群です。LAPACKなど他の数値計算を行うライブラリなどで必要となるなど、数値計算には欠かせないライブラリ群です。数値計算を行うソフトウェアのインストールにこれをインストールすることが求められることもありますし、MATLABなどにもこれらのルーチンが乗っかって居るようです。CPUの適正を考えて実装されていますので、非常に高速に動作します。

分類

BLASには多くのルーチンが提供されていますが、Level1,2,3と分類がなされています。これは、ベクトル同士の演算、ベクトル行列の演算、行列同士の演算、でそれぞれ分けたものです。このサイトではこの分類にしたがってページを作成しています

リファレンスはこちらから
Level1 BLAS
Level2 BLAS
Level3 BLAS

そのため、行いたい演算によって、どのページを見れば分かるようになっています。しかし、例えば、行列の加算などは、行列を一種のベクトルだと思えば計算ができますので必ずしもLevel1BLASが行列に使えないということではありません。

OpenBLASについて

CPUの構造を考慮し、かなり高速に動作します。インストールページではこちらのインストールを取り扱っています。2023年に更新しました(2011年当時は前身のGotoBLASについて記載)
インストール方法はこちら

CBLASについて

このサイトでは、FORTRANで作成されたルーチンを直接C言語から呼び出すことを前提として記述していました。C言語向けにCBLASというBLASのインタフェースが用意されており、こちらを用いるほうが一般的です。全ての引数を参照渡ししなくてはならない制約や、CとFORTRANで異なる行列の解釈の仕方も考慮してもらえますので便利です。2023年からの更新ではサンプルコード等含めこちらの利用方法を順次掲載しています

Pythonでの利用について

BLASをインストールした環境においてnumpyでBLASを呼ぶよう設定し、高速な線形演算ライブラリを活用するする事ができます。近年需要が多いようなので、まとめておきました

Pythonのページはこちら

ATLASについて

BLASの一実装でフリーで使用が可能です。インストール時に使用するCPUに合わせて最適化を行うことで、高速な動作を可能にしています。チューニングを自動的に行うため、インストールは時間がかかります。測定中は他のジョブを走らせることは推奨されませんので、若干注意が必要です。なお、CBLASが自動的にインストールされます。2023年現在もあるのかは確かめておりません。

UBLASについて

C++にboost::numeric::ublasというライブラリがあります。こちらも、行列の演算などを扱うものですが、BLASとは異なる環境で、引数なども異なるようですのでご注意ください。UBLASは行列の演算を即時では行わず、結果を求めたときにすべての演算を行うなどの特徴があります。

CUBLASについて

GPGPU(General Purpose computing in GPU)の環境CUDAで提供されるBLASです。引数などの仕様はGotoBLASやATLASなどとは異なりますので注意が必要です。CPUで計算させるよりもかなり高速に動作させることが可能です。なお、行列サイズが32や64の倍数でかなり高速に動作するなど、GPUの仕組みにかなり引っ張られている部分があるので、単純にコードを移植するだけで高速な動作を期待できません

LAPACKについて

線形演算のライブラリとして、LAPACKというものもあります。こちらは、(Linear Algebra PACKageの略で、方程式を解いたり、固有値分解したり、といった便利なことをやってくれます。BLASとの関係ですが、BLASはLAPACK内部で呼び出されています。そのため、LAPACKを利用する際にはBLASが必要になります。LAPACKインストール時に自動的にBLASもインストールされますが、かなり低速ですのでLAPACK付属のBLASの利用はおすすめできません。通常は、LAPACKから呼び出すBLASをOpenBLASやATLASなどの実装のBLASとします。

その他のBLASについて

各ベンダがそれぞれ自社製品に適合したBLASを販売しています。当然ですが、ATLASやOpenBLASと比べて高速なケースが多いですというのも、自社製品のみに最適化したソフトウェアと、一般にソースコードを配っているソフトウェアなのですから、それは当然と言った感じがあります。有名なのは、Intel MKL(Math Kernel Library)ですが、他にも、SCSLやMathKeisanなど様々です。これらは使用するのに多くの場合資金が必要になります。