第8章 数値計算ライブラリ

8.1 概要

HA8000には数値計算ライブラリとしてMATRIX/MPP,MATRIX/MPP/SSS,MSL2,BLAS,LAPACK,ScaLAPACKがあります。これらのライブラリを利用するには コンパイラのオプションとして

-Lライブラリ検索パス名

-lライブラリ名

を指定します。-lオプションはプログラムファイル名の後ろに指定します。このオプションは左から順に処理されるのでライブラリ名を指定する順序には注意して下さい。なお、センター提供の数値計算ライブラリの検索パスは標準で設定されていますので、-L オプションは省略できます。

8.2 MATRIX/MPP

MATRIX/MPPは基本配列演算、連立1次方程式、逆行列、固有値・固有ベクトル、高速フーリエ変換、擬似乱数等に関する副プログラムライブラリです。並列処理用インターフェースを用いることにより、データを各ノードに分散して配置、並列に実行することができます。MATRIX/MPPを使用する場合にはコンパイル時にオプションとして以下のライブラリを指定します。(要素並列版は–parallelオプションも同時に指定して下さい。)

MATRIX/MPP

(要素並列版)

–lmatmpp

(スカラー版)

–lmatmpp_sc

MATRIX/MPP/SSS

(スカイライン法)

(要素並列版)

–lmatmpps

(スカラー版)

–lmatmpps_sc

参考マニュアル

「行列計算副プログラムライブラリ MATRIX/MPP」(3000-3-E75)

「行列計算副プログラムライブラリ -スカイライン法- MATRIX/MPP/SSS」(3000-3-E76)

8.3 MSL2

MSL2は行列計算(連立1次方程式、逆行列、固有値・固有ベクトル等)、関数計算(非線形方程式、常微分方程式、数値積分等)、統計計算(分布関数、回帰分析、多変量解析等)に関する副プログラムライブラリです。MSL2 を使用するためにはコンパイル時にオプションとして以下のライブラリを指定します。

(要素並列版は–parallelオプションも同時に指定して下さい。)

MSL2

要素並列版

-lMSL2P

スカラー版

-lMSL2

参考マニュアル

「数値計算副プログラムライブラリ MSL2 操作」(3000-3-E74)

「数値計算副プログラムライブラリ MSL2 行列計算」(3000-3-E71)

「数値計算副プログラムライブラリ MSL2 関数計算」(3000-3-E72)

「数値計算副プログラムライブラリ MSL2 統計計算」(3000-3-E73)

8.4 Intel Math Kernel Library

本センターでは、Intelコンパイラと一緒に、Intel Math Kernel Library Version 10.1(MKL) がインストールされています。MKLを使用する場合には、Intelコンパイラをご利用ください。GNUコンパイラ、PGIコンパイラでも利用可能ですが、一部機能が使えない場合があります。日立コンパイラはサポート対象ではありません。

MKLではBLAS、LAPACK、ScaLAPACKをはじめ、フーリエ変換ルーチンなど多くの数値演算ライブラリを提供しています。また、OpenMPに対応しており、スレッド化されたルーチンではマルチコア・マルチプロセッサシステムで最適なパフォーマンスを得ることが可能です。

8.4.1 リンク方法

MKLを利用するためには環境変数の設定が必要となります。「6.6 Intelコンパイラ」の環境設定を行った上で、MKLの環境設定を行います。次のコマンドでIntelコンパイラの設定とMKLの設定が行われます。MKLのバージョンアップが行われた場合、バージョン番号の部分(10.1.0.015)が変更となります。

(通常の環境)

$ source /opt/itc/mpi/mpiswitch.sh mpich-mx-intel11

$ source /opt/intel/mkl/10.1.0.015/tools/environment/mklvarsem64t.sh

(ログインシェルをcsh系に変更している場合)

$ source /opt/itc/mpi/mpiswitch.csh mpich-mx-intel11

$ source /opt/intel/mkl/10.1.0.015/tools/environment/mklvarsem64t.csh

OpenMPを使用するMKLの動的リンクでのコンパイルでは、リンク時に以下のようにライブラリを指定してください。紙面の都合上以下では2行で書かれていますが、実際には改行を入れずに入力してください。

$ icc program.c -lmkl_intel_lp64 -Wl,--start-group -lmkl_intel_thread -lmkl_core -Wl,--end-group -liomp5 -lpthread -lm

OpenMPを使用しないMKLの動的リンクでは、以下のようになります(同じく改行は入れません)。

$ icc program.c -lmkl_intel_lp64 -Wl,--start-group -lmkl_sequential -lmkl_core -Wl,--end-group -lpthread -lm

静的リンクでのコンパイルでは、上記オプションの先頭に -staticを追加してください。

8.4.2 実行時の設定

動的リンクのプログラム実行時には、LD_LIBRARY_PATHにIntelコンパイラのライブラリ、MKLのライブラリのパスが設定されている必要がありますので、バッチスクリプトの最初に環境変数設定用のコマンドを実行するように記述してください。

OpenMPを使用する場合、スレッド数の設定にはOpenMP環境変数OMP_NUM_THREADS、もしくはMKL環境変数MKL_NUM_THREADSが利用できます。MKL環境変数はOpenMP環境変数よりも優先して参照されます。どちらの変数も指定されない場合は、デフォルトのスレッド数が選択されます。実際の利用例に関しては、パッケージ付属のサンプルソースが /opt/intel/mkl/10.1.0.015/examples 以下にあるので、プログラム開発の参考にしてください。

8.4.3 マニュアル

MKLの詳細は、/opt/intel/mkl/10.1.0.015/doc 以下にドキュメントがあります。mklman.pdf がVer.10.1のリファレンスマニュアル(英語版)となります。また関数リファレンス部分に関しては、Ver.9のものですが日本語版のリファレンスマニュアル(mklman90_j.pdf)も参照可能です。Web上の資料としては以下のページで情報が入手できます(2009年2月現在)。

http://www.intel.com/cd/software/products/ijkk/jpn/329226.htm

http://www.xlsoft.com/jp/products/intel/perflib/mkl/

8.5 AMD Core Math Library

本センターでは、PGIコンパイラと一緒に、AMD Core Math Library Version 3.6 (ACML) がインストールされています。ACMLを使用する場合には、PGIコンパイラをご利用ください。GNUコンパイラ、Intelコンパイラでも利用可能ですが、一部機能が使えない場合があります。日立コンパイラはサポート対象ではありません。

ACMLではBLAS、LAPACKに加え、フーリエ変換ルーチンなど多くの数値演算ライブラリを提供しています。また、OpenMPに対応しており、スレッド化されたルーチンではマルチコア・マルチプロセッサシステムでよりパフォーマンスを得ることが可能です。

8.5.1 リンク方法

OpenMP版ACMLのコンパイルは以下のようになります。

$ pgf77 -mp source.f -lacml_mp

$ pgf95 -mp source.f90 -lacml_mp

$ pgcc -mp source.c -lacml_mp

シリアル版ACMLの場合は次の通りです。

$ pgf77 source.f -lacml

$ pgf95 source.f90 -lacml

$ pgcc source.c -lacml

8.5.2 実行時の設定

OpenMPを使用する場合、スレッド数の設定にはOpenMP環境変数OMP_NUM_THREADSを使用します。環境変数が指定されない場合は、デフォルトのスレッド数(本センターでは16)が選択されます。

8.5.3 マニュアル

ACMLの詳細は、AMDのホームページをご参照ください。

http://developer.amd.com/cpu/libraries/acml/Pages/default.aspx

2009年2月現在の最新版は、ACML Version 4.2で、上記ホームページより入手可能です。各種コンパイラで使用できるライブラリが提供されています。使用方法などに関しては以下のアドレスから情報が入手できます(URLはすべて2009年2月現在)。

http://developer.amd.com/cpu/libraries/acml/Pages/default.aspx

http://www.softek.co.jp/SPG/Pgi/TIPS/acml.html

8.6 GotoBLAS

HA8000クラスタシステムにはGoto BLAS ver.1.26がインストールされています。Goto BLASを使用する場合には、リンク時にオプションとして以下を指定します。(並列版は、日立コンパイラでは -parallelオプションも同時に指定して下さい)。

GotoBLAS

並列版

-L/opt/itc/lib -lgoto_smp

スカラー版

-L/opt/itc/lib -lgoto

16並列限定版

-L/opt/itc/lib -lgoto_smp16

GotoBLASは、GNUコンパイラおよびインテルコンパイラではサポート対象ですが、日立コンパイラはサポート対象ではありません。日立コンパイラでも多くの場合は動きますが、一部複素数系の関数が利用できません。また結果の正当性などには十分ご注意ください。

並列版におけるコア数は、OpenMP環境変数OMP_NUM_THREADS、もしくは、GotoBLAS用環境変数 GOTO_NUM_THREADSにスレッド数を設定します。

8.7 BLAS・LAPACK・ScaLAPACK

HA8000クラスタシステムの標準BLAS、LAPACK、ScaLAPACKは本家netlibより入手できるソースをコンパイルしたものとなります。これらは日立製作所製のコンパイラでコンパイルしたプログラムと正常にリンクできることが確認されております。ただし、これらはOpteron プロセッサ向けに最適化された実装よりは性能が悪くなります。可能な限り、前節までに紹介したMKL、ACML、GotoBLASなどの最適化されたライブラリをご使用ください。

システム標準のBLAS等を使用する場合にはコンパイル時にオプションとして以下のライブラリを指定します。(要素並列版は –parallelオプションも同時に指定して下さい。)

要素並列版

スカラー版

BLAS

–lblas

–lblas_sc

LAPACK

–llapack

–lblas

–llapack_sc

–lblas_sc

ScaLAPACK

–lscalapack

–lblacsBASE

–lblacsF77

–lblas

–lscalapack_sc

–lblacsBASE_sc

–lblacsF77_sc

–lblas_sc

なお、ScaLAPACKの通信関数には MPI を使用していますので、使用時には mpif90 や mpicc などのMPI用コマンドをご使用ください。