2002年11月
日本電気株式会社
はじめに
MathKeisanは、NECのハイパフォーマンス・コンピュータのために高度に最適化された数学ライブラリ集です。この製品は、NECのベクトルコンピュータ
SX-6上で稼動します。SX-5で稼動するバージョン、およびNEC Express5800/1000シリーズ(Itanium(R)
プロセッサファミリサーバ)のLinux OS上で稼動するバージョンについては、www.mathkeisan.comをご参照下さい。特に記述がない限り、このリリースメモはSX-6版MathKeisanに関するものです。
MathKeisan に含まれるライブラリを表1に示します。
表1:
MathKeisan に含まれるライブラリ
| ライブラリ名 | 機能概要 |
| BLAS | ベクトル、行列の基本演算 |
| LAPACK | 高性能コンピュータ用連立一次方程式、固有値解析 |
| ScaLAPACK | 連立一次方程式、固有値解析 (MPIによる並列版, PBLASを含む) |
| BLACS | ベクトル、行列の基本演算のためのメッセージパッシングライブラリ |
| PARBLAS | 共有メモリ用、並列版BLAS |
| CBLAS | BLAS Cインタフェース |
| SBLAS | スパースBLAS |
| FFT | HP VECLIBインタフェース FFT, SGI/CRAY LIBSCI 3.1インタフェース FFT |
| PARFFT | HP VECLIBインタフェース FFT, SGI/CRAY LIBSCI 3.1インタフェース 並列版FFT |
| METIS | 行列、グラフの並べ変え、分割ライブラリ |
| ParMETIS | 行列、グラフの並べ変え、分割の並列版ライブラリ |
| SOLVER | 対称疎行列線形問題のソルバ |
| ARPACK | 大規模固有値解析 |
動作可能OS
MathKeisan 1.4.0は、SUPER-UX
R12.1およびそれ以降のリビジョン上で動作します。
また、FORTRAN90/SX Rev.265およびそれ以降のリビジョンで動作します。
MathKeisanのライブラリ作成には、以下のコンパイラを使用しています。
| Fortran | f90 for SX, Rev.253 |
| C | C++/SX, Rev.050 |
| MPI | r121-v640 |
MathKeisan 1.3.0からの強化概要は以下の通りです。
リンク方法
f90 -dwオプション(既定値)を使用してリンクする場合には、表2のように指定します。それぞれに示された順番にリンクするか、またはリンク時に -h lib_cyclicオプションを指定する必要があります。$(LIBDIR)については、表4をご参照下さい。ただし、表4中の$(LIBDIR)はMathKeisanを規定値のディレクトリにインストールした場合のものです。ライブラリが規定値のディレクトリにない場合は、マシン管理者にご確認下さい。
表2: -dw指定時の各ライブラリのリンク方法
|
|
|
| BLAS | -L$(LIBDIR) -lblas |
| LAPACK | -L$(LIBDIR) -llapack -lblas |
| ScaLAPACK | -L$(LIBDIR) -lscalapack -lblacsF90init -lblacs -lblacsF90init -lblas -lmpi |
| BLACS | -L$(LIBDIR) -lblacsF90init -lblacs -lblacsF90init -lmpi |
| PARBLAS | -L$(LIBDIR) -lparblas -Popenmp |
| CBLAS | -L$(LIBDIR) -lcblas -lblas |
| SBLAS | -L$(LIBDIR) -lsblas |
| FFT | -L$(LIBDIR) -lfft |
| PARFFT | -L$(LIBDIR) -lparfft -Popenmp |
| METIS | -L$(LIBDIR) -lmetis_32 |
| -L$(LIBDIR) -lmetis | |
| ParMETIS | -L$(LIBDIR) -lparmetis_32 -lmpi |
| -L$(LIBDIR) -lparmetis -lmpi | |
| SOLVER | -L$(LIBDIR) -lsolver -lmetis -lblas -Popenmp |
| ARPACK | -L$(LIBDIR) -larpack -llapack -lblas |
f90 -ewオプションを使用する場合には、表3のように指定します。それぞれに示された順番にリンクするか、またはリンク時に -h lib_cyclicオプションを指定する必要があります。$(LIBDIR)については、表4をご参照下さい。
表3: -ew指定時の各ライブラリのリンク方法
|
|
|
| BLAS | -L$(LIBDIR) -lblas_64 |
| LAPACK | -L$(LIBDIR) -llapack_64 -lblas_64 |
| ScaLAPACK | (*) NA |
| BLACS | (*) NA |
| PARBLAS | -L$(LIBDIR) -lparblas_64 -Popenmp |
| CBLAS | (*) NA |
| SBLAS | -L$(LIBDIR) -lsblas_64 |
| FFT | -L$(LIBDIR) -lfft_64 |
| PARFFT | -L$(LIBDIR) -lparfft_64 -Popenmp |
| METIS | -L$(LIBDIR) -lmetis_64 |
| ParMETIS | -L$(LIBDIR) -lparmetis_64 -lmpiw |
| SOLVER | -L$(LIBDIR) -lsolver_64 -lmetis_64 -lblas_64 -Popenmp |
| ARPACK | -L$(LIBDIR) -larpack_64 -llapack_64 -lblas_64 |
(*) NA: サポートしていません。
表4:$(LIBDIR)の規定値
| machine | コンパイラ | $(LIBDIR)の規定値 | |
|---|---|---|---|
| F90 | C++ | ||
| self compile | -size_t32 (規定値) | -Nover2g (規定値) | $(LIBDIR) = /usr/lib |
| -size_t64 | -over2g | $(LIBDIR) = /usr/lib/lib64 | |
| cross compile | -size_t32 (規定値) | -Nover2g (規定値) | $(LIBDIR) = /SX/usr/lib |
| -size_t64 | -over2g | $(LIBDIR) = /SX/usr/lib/lib64 | |
データタイプ
MathKeisan ライブラリの各データタイプに対応するライブラリファイル名を表5、表6に示します。
表5: MathKeisan のライブラリ名
| ライブラリ名 |
|
|
| BLAS | libblas.a | libblas_64.a |
| LAPACK | liblapack.a | liblapack_64.a |
| ScaLAPACK | libscalapack.a | (*) NA |
| BLACS | libblacs.a | (*) NA |
| PARBLAS | libparblas.a | libparblas_64.a |
| CBLAS | libcblas.a | (*) NA |
| SBLAS | libsblas.a | libsblas_64.a |
| FFT | libfft.a | libfft_64.a |
| PARFFT | libparfft.a | libparfft_64.a |
| ARPACK | libarpack.a | libarpack_64.a |
表 6: MathKeisan のライブラリ名
| ライブラリ名 |
|
|
|
| METIS | libmetis_32.a | libmetis.a | libmetis_64.a |
| ParMETIS | libparmetis_32.a | libparmetis.a | libparmetis_64.a |
| SOLVER | (*) NA | libsolver.a | libsolver_64.a |
(*) NA: サポートしていません。
表5のI32R32+I32R64欄のライブラリは、integerが32ビットのデータタイプのライブラリです(Fortran integer*4)。 floating pointのデータタイプはサブルーチン名、関数名の一文字目で決まります。
I64R64+I64R64欄のライブラリは、integer 64ビット、floating point 64ビットのデータタイプのライブラリです。これらのサブルーチン名やファンクション名も、s、d、c、zで始まっていますが、全て64ビットデータタイプです。f90 -ew オプションでコンパイルすると、これらのライブラリがリンクされます。
表6のI32R32欄はinteger 32ビット、floating point 32ビットデータタイプのライブラリです。
I32R64欄はinteger 32ビット、floating point 64ビットデータタイプのライブラリです。
I64R64欄はinteger 64ビット、floating point 64ビットデータタイプのライブラリです。
Man pages
MathKeisanにはman pageが含まれています。それぞれのライブラリにそれぞれのman pageがあり、BLAS, LAPACK, ScaLAPACK, FFT, SOLVER,SBLAS,ARPACKのライブラリについては、それぞれのサブルーチンごとにman pageがあります。
例えば、BLASのman pageを見る場合には、以下のように入力します。
MathKeisan はgzip tarファイルとして提供しています。このgzip tarファイルには次のファイルが含まれています。
ダウンロードサイトへの登録手続
出力されたlogファイルを、e-mailでContact Usにお送りください。logファイルが受け付けられると、パッチなどのダウンロードサイトwww.mathkeisan.comへのアクセスが可能になります。
以下は、install.shスクリプトの実行例です。
MathKeisan Installation ... MathKeisan contains 2109 man-page files MathKeisan contains 1 include files MathKeisan contains 15 English Users Guide files MathKeisan contains 15 Japanese Users Guide files MathKeisan contains the following size_t32 library files: libarpack_64.a libarpack.a libblacs.a libblacsCinit.a libblacsF90init.a libblas_64.a libblas.a libcblas.a libfft_64.a libfft.a liblapack_64.a liblapack.a libmetis_32.a libmetis_64.a libmetis.a libparblas_64.a libparblas.a libparfft_64.a libparfft.a libparmetis_32.a libparmetis_64.a libparmetis.a libsblas_64.a libsblas.a libscalapack.a libsolver_64.a libsolver.a MathKeisan contains the following size_t64 library files: libarpack_64.a libarpack.a libblacs.a libblacsCinit.a libblacsF90init.a libblas_64.a libblas.a libcblas.a libfft_64.a libfft.a liblapack_64.a liblapack.a libmetis_32.a libmetis_64.a libmetis.a libparblas_64.a libparblas.a libparfft_64.a libparfft.a libparmetis_32.a libparmetis_64.a libparmetis.a libsblas_64.a libsblas.a libscalapack.a libsolver_64.a libsolver.a Press RETURN to continue This install script will do the following: 1. Copy MathKeisan library, man page, include, English User's Guide and Japanese User's Guide files to the specified directories, and give them the correct permission 2. Any file that is over written will be backed up in the backup directory 3. An uninstall script is created and placed in the backup directory Below are default directories for install and backup: libraries (size_t32) /SX/usr/lib/ libraries (size_t64) /SX/usr/lib/lib64/ man-pages /SX/usr/man/manl/ include /SX/usr/include English User's Guide /SX/usr/opt/MathKeisan/MK1_3_0/UsersGuide/E Japanese User's Guide /SX/usr/opt/MathKeisan/MK1_3_0/UsersGuide/J backup /tmp/mpack/MK1.4.0/bkpdir The directories must exist, and you must have write permission. The backup directory must be empty. Is directory for installing size_t32 (the default) libraries correct y/n: n enter directory for size_t32 libraries /tmp/mpack/lib Is directory for installing size_t64 libraries correct y/n: n enter directory for size_t64 libraries /tmp/mpack/lib/lib64 Is directory for installing man-pages correct y/n: n enter directory for man-pages /tmp/mpack/man Is directory for installing include files correct y/n: n enter directory for include files /tmp/mpack/include Is directory for installing English User's Guide correct y/n: n enter directory for English User's Guide /tmp/mpack/EUG Is directory for installing Japanese User's Guide correct y/n: n enter directory for Japanese User's Guide /tmp/mpack/JUG Is directory for backup correct y/n: y Below are chosen directories: libraries (size_t32) /tmp/mpack/lib libraries (size_t64) /tmp/mpack/lib/lib64 man-pages /tmp/mpack/man include files /tmp/mpack/include English User's Guide /tmp/mpack/EUG Japanese User's Guide /tmp/mpack/JUG backup /tmp/mpack/MK1.4.0/bkpdir *** above directories exist and have correct attributes. *** Do you want to use these directories y/n y finding space required for install space required for new size_t32,64 library files = 171375860 byte space required for new man-page files = 10617681 byte space required for new include files = 32428 byte space required for new English User's Guide files = 232900 byte space required for new Japanese User's Guide files = 428778 byte space required for backup of files over written = 0 byte #-----------------------------------------------------------------------------# | IMPORTANT!! only continue if you have enough space in chosen directories to | | 1. install new library, man-page, include, English User's Guide and | | Japanese User's Guide files | | 2. make backup of any file over written | #-----------------------------------------------------------------------------# Do you want to continue y/n: y backing up and installing libraries backing up and installing man pages backing up and installing include files backing up and installing English Users Guide backing up and installing Japanese Users Guide writing uninstall script #--------------------------------------# | Install is complete | #--------------------------------------# 1. A log file for this install is in /tmp/mpack/MK1.4.0/install.log8814 please e-mail a copy of this file to technical@atcc.necsyl.com. It will be used to debug any future problems. When your log file is received, a login and password will be issued so you can access MathKeisan patches that are posted at www.mathkeisan.com. 2. To uninstall, save directory below, and its contents /tmp/mpack/MK1.4.0/bkpdir An uninstall script is in /tmp/mpack/MK1.4.0/bkpdir/uninstall.sh Running the uninstall script will delete the lib and man pages that this script installed, and it will restore all files over- written. Do not run the uninstall script unless you want to uninstall MathKeisan製品概要
MathKeisan のそれぞれのライブラリの製品説明を以下に示します。
BLAS
BLASは、ベクトルと行列の基本演算を行うFORTRANサブルーチン群です。ベクトル−ベクトル演算(レベル1)、行列−ベクトル演算(レベル2)、行列−行列演算(レベル3)を行う3種のルーチン群から構成されています。
このMathKeisanに含まれているBLAS(以下、NEC版BLASと呼ぶ)は、Dr. J.J.Dongarra(Argonne National Laboratory), Dr. Du Croz(Numerical Algorithms Group Ltd.), I. S. Duff (AERE Harwell), S. Hammarling (Numerical Algorithms Group Ltd.), R. J. Hanson (Sandia National Labs) によって開発されたオリジナルのBLASをベースにしています。特に使用頻度の高いルーチン群については、アセンブラ言語での書き換えを行い、非常に高い性能を実現しています。
PARBLAS
PARBLASは共有メモリ用の並列版BLASで、レベル2、レベル3のサブルーチン群です。 これらのサブルーチンは、シリアル版BLASと同じインターフェースです。並列実行されるスレッドの数は、環境変数OMP_NUM_THREADSによって設定されます。nをスレッド数とした場合、Cシェル及びBシェルでは以下のように設定します。(スレッド数設定の詳細については「FORTRAN90/SX並列処理機能利用の手引き」をご参照下さい。)
Cシェルの場合'setenv OMP_NUM_THREADS n' Bシェルの場合'export OMP_NUM_THREADS; OMP_NUM_THREADS=n'このMathKeisanに含まれている並列版BLAS(以下、NEC版並列BLASと呼ぶ)は、Dr. J.J. Dongarra (Argonne National Laboratory), Dr. Du Croz (Numerical Algorithms Group Ltd.), I. S. Duff (AERE Harwell), S. Hammarling (Numerical Algorithms Group Ltd.), R. J. Hanson (Sandia National Labs) によって開発されたオリジナルのBLASをベースにしています。
CBLAS
CBLASは、FORTRAN BLASへのC 言語インタフェースです。BLASはベクトル−ベクトル演算(レベル1)、行列−ベクトル演算(レベル2)、行列−行列演算(レベル3)を行うサブルーチン群です。
CBLASは、K. Teranishi(University of Tennessee)がBLAS Technical Forumのリファレンス版として開発し、J. Horner(University of Tennessee)が改版、詳細についてR.Whaley(University of Tennessee)が作成したものをベースにしています。
SBLAS
SBLASは、Sparse BLASの演算を行うサブルーチン群です。Sparse BLASはD.S.Dodson(Convex), R.G.Grimes, J.G.Lewis(Boeing)によって開発されたACM Algorithm 692をベースにしています。
LAPACK
LAPACKは、各種の連立一次方程式や行列の固有値と固有ベクトルを計算するFORTRANサブルーチン群です。機能的にはLINPACK及びEISPACKの機能を包含する数値計算パッケージです。この2つのパッケージに対して、計算アルゴリズムがいくつか改良されており、より高精度な計算が可能となっています。LAPACKでは、可能な限りBLAS(通常レベル2とレベル3)をcallします。
MathKeisanに含まれているLAPACK(以下、NEC版LAPACKと呼ぶ) は、E. Anderson (University of Tennessee, Knoxville), Z. Bai (University of Kentucky and University of California, Davis), C. Bischof (Institute for Scientific Computing, Technical University Aachen, Germany), S. Blackford (University of Tennessee, Knoxville), J. Demmel (University of California, Berkeley), J. Dongarra (University of Tennessee, Knoxville, and Oak Ridge National Lab.), J. Du Croz (Numerical Algorithms Group Ltd.), A. Greenbaum (University of Washington), S. Hammarling (Numerical Algorithms Group Ltd.), A. McKenney, D. Sorensen (Rice University) などで構成されたLAPACKプロジェクトチームによって開発された、オリジナルのLAPACK version 3.0をベースにしています。
BLACS
BLACS (Basic Linear Algebra Communication Subprograms)は、線形代数のために開発されたメッセージパッシングライブラリです。計算モデルは1次元、あるいは2次元のプロセスグリッドを想定しており、各プロセスは行列とベクトルの一部を保持します。BLACSは、1つのプロセスから他のプロセスへ、行列や部分行列の通信をするための同期送信および受信、部分行列のブロードキャスト、あるいはグローバルデータのリダクション操作(和、最大値、最小値)を含んでいます。また、プロセスグリッドの生成、変更、問い合わせを行うルーチンも提供しています。 ScaLAPACKのアルゴリズムには、プロセスグループの、異なるサブセット内でのブロードキャスト、あるいはリダクションを要求するものがあるため、BLACSでは、1つのプロセスがいくつかの重複した、あるいは排反するプロセスグループに属することを許しています。各プロセスは、コンテキストによりラベル付けされています。 これは、MPIではコミニュケータと呼ばれています。BLACSは、システムコンテキストと、BLACSのコンテキストが混同しないような仕組みになっています。
このMathKeisanに含まれているBLACS(以下、NEC版BLACSと呼ぶ)は J.J. Dongarra, and R.C. Whaley (University of Tennessee, Knoxville) によって開発されたオリジナルのBLACS version 1.1 (mpiblacs-patch03)をベースとしています。
ScaLAPACK
ScaLAPACKは、PVMやMPIをサポートしている分散メモリ型のMIMDコンピュータや、ワークステーションクラスタ向けに開発された、各種連立一次方程式を計算する高性能なルーチン群です。 ScaLAPACKは、線形方程式、線形最小二乗問題、固有値問題、特異値問題を解くことができます。また、行列の分解や条件数の計算もすることが出来ます。密行列や帯行列に対するルーチン群は提供されていますが、疎行列に対しては提供されていません。同様な機能が実行列、複素行列に対して提供されています。ScaLAPACKという名前は、Scalable Linear Algebla PACKage、または、Scalable LAPACKの頭文字をとって付けられたものです。
LAPACKと同様に、ScaLAPACKでは、メモリ階層間のデータの移動頻度を最小限にするためブロックアルゴリズムを採用しています。ScaLAPACKは、PBLASと呼ばれる分散メモリ版のレベル1、2、3 BLASを基礎としています。更に、PBLASはシングルノード上の計算にはBLASを、各ノード間の通信にはBasic Linear Algebra Communication Subprograms (BLACS)を採用し、その上に構築されています。
このMathKeisanに含まれているScaLAPACK(以下、NEC版ScaLAPACK)は、L. S. Blackford (University of Tennessee, Knoxville), J. Choi (Soongsil University, Korea), A. Cleary (Lawrence Livermore National Laboratory), E. D'Azevedo (Oak Ridge National Laboratory), J. Demmel (University of California, Berkeley), I. Dhillon (University of California, Berkeley), J. Dongarra (University of Tennessee, Knoxville, and Oak Ridge National Lab.), S. Hammarling (Numerical Algorithms Group Ltd.), G. Henry (Intel Corporation), A. Petitet (University of Tennessee, Knoxville), K. Stanley (University of California, Berkeley), D. Walker (University of Wales, Cardiff), R. C. Whaley (University of Tennessee, Knoxville) によって開発された、オリジナルのversion 1.6をベースにしています。
FFT
このMathKeisanに含まれているFFTは、HPのVECLIBライブラリや、CRAYのLIBSC 3.1とインタフェース、機能が同じです。MathKeisan には、1次元、2次元、3次元のComplex-Complex FFT、Real-Complex FFT、Complex-Real FFTがあります。
このFFTライブラリは、NECで開発されたものです。
PARFFT
PARFFTは、上記FFTと同様の機能を持つOpenMP並列版のFFTです。並列実行されるスレッドの数は、環境変数OMP_NUM_THREADSによって設定されます。nをスレッド数とした場合、Cシェル及びBシェルでは以下のように設定します。(スレッド数設定の詳細については「FORTRAN90/SX並列処理機能利用の手引き」をご参照下さい。)
Cシェルの場合'setenv OMP_NUM_THREADS
n'
Bシェルの場合'export OMP_NUM_THREADS;
OMP_NUM_THREADS=n'
ARPACK
ARPACKは、大規模固有値問題のために開発されたFORTRANサブルーチン群です。 ARPACKは、ARnoldi PACKage から名付けられています。ARPACKは大規模対称(Hermitian)行列、非対称(non-Hermitian)行列、一般行列、重要な応用分野の一般的な固有値問題などを解くことができます。
ARPACKは、多くのLAPACKとBLASのサブルーチンに依存しています。ARPACKの性能は、行列のサイズが大きくなるに従い、レベル2 BLASのGEMVの性能に限りなく近づいていきます。
このMathKeisanに含まれているARPACK(以下、NEC版ARPACK)は、Rich Lehoucq, Kristi Maschhoff, Danny Sorensen and Chao Yang (Rice University) によって開発されたオリジナルをベースとしています。
METIS
METISは行列やグラフを分割したりオーダリングしたりするためのライブラリです。 METISは、上記SOLVERにおいて、行列分解処理でのfill-inを少なくするために行列のオーダリングのために使用されています。
オリジナルのMETISは、George Karypis、Vipin KumarによってUniversity of Minnesota とArmy HPC research centerで開発されたものです。
----------------------------------------------------------------
"This software package includes/uses
METIS, developed by George
Karypis and Vipin
Kumar at the University of Minnesota.
Additional information
about METIS can be found at
http://www.cs.umn.edu/‾karypis/metis
METIS is Copyright 1997 Regents
of the University of Minnesota.
Twin Cities. All
Rights Reserved.
----------------------------------------------------------------
ParMETIS
ParMETISは、グラフ分割や疎行列のオーダリングのための様々なアルゴリズムを持つMPIベースの並列ライブラリです。MathKeisanに含まれるParMETISは、George Karypis、Vipin Kumarによって、University of Minnesota、Army HPC research center で開発されたversion 2.0をベースとしています。
SOLVER
SOLVERは、対称疎行列の線形問題を解くサブルーチン群です。SOLVERは、left-lookingアルゴリズムを使用して、疎行列AをLDLTに分解します。ここで、Lは、対角の値が1の下三角行列で、Dが対角行列です。行列のSupernode構の利点を生かしています。現バージョンでは行列の並べ変えにはMETISライブラリを用いています。また、行列分解処理では、シリアル版と並列版の2つが用意されています。並列実行されるスレッドの数は、環境変数OMP_NUM_THREADSによって設定されます。nをスレッド数とした場合、Cシェル及びBシェルでは以下のように設定します。 (スレッド数設定の詳細については「FORTRAN90/SX並列処理機能利用の手引き」をご参照下さい。)
Cシェルの場合'setenv OMP_NUM_THREADS
n'
Bシェルの場合'export OMP_NUM_THREADS;
OMP_NUM_THREADS=n'
SOLVERは、NECで開発されたものです。
その他のサブルーチン
mkversionは、MathKeisanのバージョン情報を出力するサブルーチンで、libblas.aとibblas64.aに含まれています。Fortranからは"call mkversion()"、Cからは"mkversion_()"で呼び出します。どちらの場合も、libblas.aをリンクして下さい。詳細はmkversionのman pageをご参照下さい。
< mkversion 出力結果(MathKeisan 1.4.0の場合) MathKeisan 1.4.0 BLAS - legacy blas LAPACK - version 3.0 + UPDATES ScaLAPACK - version 1.7 BLACS - version 1.1 + patch 03 METIS - version 4.0 PARMETIS - version 2.0Contact
MathKeisanに対するご意見、ご質問は、MathKeisan開発者向けに、下記アドレスにemailをお送りください。
MathKeisanに問題がありましたら、NECのPSRシステムにて、ご連絡して頂きますようお願いします。