BLAS (Basic Linear Algebra
Subprograms)は、ベクトルと行列の基本演算を行う高性能なルーチン群です。ベクトル-ベクトル演算(レベル1 BLAS)、行列-ベクトル演算(レベル2 BLAS)、行列-行列演算(レベル3 BLAS)を行う3種のルーチン群から構成されています。
PARBLASは、SX版MathKeisanで利用可能なBLASのOpenMP版です。
PARBLASはBLASと同じユーザインタフェースを備えているので、BLASにリンク可能なコードで
あればPARBLASにもリンク可能です。
SX版MathKeisanは、BLASとPARBLASをサポートしています。BLASは、シングルスレッドで実行されます。環境変数OMP_NUM_THREADSがnpに設定されている場合、PARBLASはnp個のスレッド上で実行されます。OMP_NUM_THREADSが設定されていない場合には、PARBLASはmp個のスレッドで実行されます。この時、mpはリソースグループ内の最大スレッド数です。
Itanium®
プロセッサ・ファミリ(IPF)版 MathKeisanのBLASはシリアル版と共有メモリ並列版を1つのライブラリでサポートしています。
IPF版BLASサブルーチンのいくつかは、Intel® Math Kernel Library (MKL)のサブルーチンです。
IPF Linux機上で環境変数OMP_NUM_THREADSがに設定されている場合には、np個のスレッド上で実行されます。
OMP_NUM_THREADSが設定されていない、または環境変数
MKL_SERIALがYESに設定されている場合、1個のスレッド上で実行されます。
ユーザインタフェース情報は、いくつかの箇所に記載されています。
DGEMMサブルーチンの情報を見るには、
man dgemmと入力してください。man pageをご覧になれない場合は、リファレンス(Man
Page)を参照してください。
レベル2およびレベル3のBLASは、通常、大規模な問題を扱うため、呼び出し時間は演算時間と比べてごくわずかで済み、また特別な方法で最適化されるので、レベル2およびレベル3のBLASを呼び出すことが最適です。
それに対して、レベル1のBLASサブルーチンは、呼び出しにかかるオーバーヘッドに比べ小規模な計算を行います。したがって、レベル1 BLASサブルーチンを呼び出すよりも、レベル1 BLASをインライン展開するほうが高速に実行できる場合があります。また、ループ内にインライン展開を行うことによって、コンパイラは、より良い最適化を行うことが可能になります。
インライン展開に適したBLASのソースコードは、MathKeisanのディレクトリsrc4inlineに格納されています。このディレクトリのデフォルトの格納場所は次の通りです。
| MathKeisanのインストールマシン | デフォルトsrc4inlineディレクトリ
|
|---|---|
| SX | /usr/opt/mathkeisan/inst/src4inline
|
| SXクロスコンパイル 機 | /SX/opt/mathkeisan/inst/src4inline
|
| IPF Linux 機 | /opt/MathKeisan/src4inline |
| 名称 | 接頭辞 | 説明 | |
|---|---|---|---|
| レベル1 BLAS | ?ROTG
| S D C Z
| ギブンス回転行列の生成 |
?ROTMG
| S D
| 修正ギブンス回転行列を生成 | |
?ROT
| S D C Z
| ギブンス回転を適用 | |
?ROTM
| S D
| 修正ギブンス回転を適用 | |
?SWAP
| S D C Z
| ベクトル同士を交換 | |
?SCAL
| S D C Z
CS ZD
| ベクトルをスカラー倍 | |
?COPY
| S D C Z
| ベクトルをコピー | |
?AXPY
| S D C Z
| ベクトルをスカラー倍して加算 | |
?DOT
| S D SDS DS
| 内積、実数 | |
?DOTU
| C Z
| 内積、複素数 (第1ベクトルを転置) | |
?DOTC
| C Z
| 内積、複素数 (第1ベクトルを転置複素共役) | |
?NRM2
| S D SC DZ
| ユークリッド・ノルム | |
?ASUM
| S D SC DZ
| 絶対値の和 | |
I?AMAX
| S D C Z
| 最大絶対値のインデックス | |
| レベル2 BLAS | ?GEMV
| S D C Z
| 一般行列とベクトルの積 |
?GBMV
| S D C Z
| 一般帯行列とベクトルの積 | |
?HEMV
| C Z
| エルミート行列とベクトルの積 | |
?HBMV
| C Z
| エルミート帯行列とベクトルの積 | |
?HPMV
| C Z
| エルミート行列とベクトルの積 (メモリ縮小版) | |
?SYMV
| S D
| 対称行列とベクトルの積 | |
?SBNV
| S D
| 対称帯行列とベクトルの積 | |
?SPMV
| S D
| 対称行列とベクトルの積 (メモリ縮小版) | |
?TRMV
| S D C Z
| 三角行列とベクトルの積 | |
?TBMV
| S D C Z
| 三角帯行列とベクトルの積 | |
?TPMV
| S D C Z
| 三角行列とベクトルの積 (メモリ縮小版) | |
?TRSV
| S D C Z
| 三角行列の求解 | |
?TBSV
| S D C Z
| 三角帯行列の求解 | |
?TPSV
| S D C Z
| 三角行列の求解 (メモリ縮小版) | |
?GER
| S D
| 一般行列のランク1更新、実数 | |
?GERU
| C Z
| 一般行列のランク1更新、複素数 (第2ベクトル転置) | |
?GERC
| C Z
| 一般行列のランク1更新、複素数 (第2ベクトル転置複素数共役) | |
?HER
| C Z
| エルミート行列のランク1更新 | |
?HPR
| C Z
| エルミート行列のランク1更新 (メモリ縮小版) | |
?HER2
| C Z
| エルミート行列のランク2更新 | |
?HPR2
| C Z
| エルミート行列のランク2更新 (メモリ縮小版) | |
?SYR
| S D
| 対称行列のランク1更新 | |
?SPR
| S D
| 対称行列のランク1更新 (メモリ縮小版) | |
?SYR2
| S D
| 対称行列のランク2更新 | |
?SPR2
| S D
| 対称行列のランク2更新 (メモリ縮小版) | |
| レベル3 BLAS | ?GEMM
| S D C Z
| 一般行列同士の積 |
?SYMM
| S D C Z
| 対称行列同士の積 | |
?HEMM
| C Z
| エルミート行列同士の積 | |
?SYRK
| S D C Z
| 対称行列のランクk更新 | |
?HERK
| C Z
| エルミート行列のランクk更新 | |
?SYR2K
| S D C Z
| 対称行列のランク2k更新 | |
?HER2K
| C Z
| エルミート行列のランク2k更新 | |
?TRMM
| S D C Z
| 三角行列同士の積 | |
?TRSM
| S D C Z
| 三角行列の求解 | |
| 補助 サブルーチン | XERBLA
| 引数エラーメッセージを出力 | |
MKVERSION
| ライブラリバージョン情報を出力 | ||
MK_GET_VERSION
| ライブラリバージョンの番号を整数で取得 | ||
MK_GET_VERSION_DATE
| ライブラリバージョンの日付を整数で取得 | ||