NEC

MathKeisanユーザーズガイド


BLASおよびPARBLAS

概要

BLAS (Basic Linear Algebra Subprograms)は、ベクトルと行列の基本演算を行う高性能なルーチン群です。ベクトル-ベクトル演算(レベル1 BLAS)、行列-ベクトル演算(レベル2 BLAS)、行列-行列演算(レベル3 BLAS)を行う3種のルーチン群から構成されています。
PARBLASは、SX版MathKeisanで利用可能なBLASのOpenMP版です。 PARBLASBLASと同じユーザインタフェースを備えているので、BLASにリンク可能なコードで あればPARBLASにもリンク可能です。

SX版MathKeisanは、BLASPARBLASをサポートしています。BLASは、シングルスレッドで実行されます。環境変数OMP_NUM_THREADSnpに設定されている場合、PARBLASnp個のスレッド上で実行されます。OMP_NUM_THREADSが設定されていない場合には、PARBLASmp個のスレッドで実行されます。この時、mpはリソースグループ内の最大スレッド数です。

Itanium® プロセッサ・ファミリ(IPF)版 MathKeisanBLASはシリアル版と共有メモリ並列版を1つのライブラリでサポートしています。 IPF版BLASサブルーチンのいくつかは、Intel® Math Kernel Library (MKL)のサブルーチンです。 IPF Linux機上で環境変数OMP_NUM_THREADSがに設定されている場合には、np個のスレッド上で実行されます。 OMP_NUM_THREADSが設定されていない、または環境変数 MKL_SERIALYESに設定されている場合、1個のスレッド上で実行されます。

ユーザインタフェース

ユーザインタフェース情報は、いくつかの箇所に記載されています。

レベル1 BLASのインライン展開

レベル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

BLASルーチン一覧

名称欄の? は、接頭辞欄のいずれかに置き換わります。接頭辞はそれぞれ精度を表します。
凡例:
S = REAL(kind=4)D = REAL(kind=8)C = COMPLEX(kind=4)Z = COMPLEX(kind=8)
  名称 接頭辞 説明
レベル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 ライブラリバージョンの日付を整数で取得

参考文献

  1. A Quick Reference Guide for BLAS