科学技術計算用関数ライブラリ GSSLーー/VP の紹介

科学技術計算用関数ライブラリ c-SSL n/vpの紹介
科学技術計算用関数ライブラリC-SSL II/VPの紹介
渡部善隆*
1999年1月5日よりC言語およびC++言語から利用できる科学技術計算用関数ライブラリCSSL II/VP(正式名称:UXP/V C-SSL II/VP VIO)をスーパーコンピュータVPP700/56上で公開
します。本稿ではC-SSL II/VPの特徴、具体的な利用方法、オンラインマニュアルの参府方法につ
いて説明します。
センターでは連立1次方程式、固有催問題、乱数発生などの汎用的な機能を持つFortranサブルー
チンライブラリとしてSSL II/VPP([6]), SSL II/VP([3],[4],[51) NUMPAC(【71)を公開しています。
これらのFortranライブラリ中でSSL II/VPはC言語からも直接呼び出すことができます([2】)。
しかし利用の際には配列の格納方法に注意を払わなければならず、場合によっては行列を転置して
サブルーチンに渡したりする必要もあります。
C-SSL II/VPはFortranのSSL II/VPの中から使用頻度の高いものを自然なインターフェイス
で利用できるC言語の関数の形で提供しています。配列の格納順序の変更も不要になりました。プ
ログラミングと実行可能ファイルの作成手順に少々"くせ'があるものの、慣れてしまえば数値計算
の強力な道具の一つになることと思います。なお本稿ではVPP700/56についての基礎的な知識を
仮定しています。 VPP700/56の利用方法の詳細叫1】を御覧ください。
1 C-SSL II/VPの概要
1.1 特徴
C-SSI- II/VPはスーパーコンピュータVPP700/56 (ホスト名 kyu-vpp, IPアドレス: 133.5.9.70)
の単一PE上で動作する科学技術計算用関数ライブラリです。 C言語およびC++言語から利用できま
す C-SSL II/VPは倍精度実数型(double)変数を扱う関数103個と単精度実数型(float)変数を扱
う関数3個から構成されています1。連立1次方程式・最小二乗解・固有値問題・代数方程式 Fourier
変換・数値積分・補間・乱数などの汎用的な計算手続きをベクトル計算機向きにチューニングした関数
として提供しています2。関数の一覧は4章を御覧ください。なお,複素数を扱う場合には専用の複素数
壁"dcomplex"を定義します。
C-SSL II/VPはFortranのサブルーチンライブラリであるSSL II/VPを内部で呼び出します。そ
のためFortranとCとの結合規則に従った記述が必要になります。具体的な利用方法は2章で説明しま
す。
関数と利用者プログラムとのデータ受渡しはすべて引数経由です。標準的な値が設定できる引数もあ
ります。また、処理内容を整数値として返却する引数(復帰値)はデバッグ、手法の有効性の検証データ
に活用することができます3。
事九州大学大型計算嶺センター・研究開発部 E-mail: vatanabeOcc.kyushu-u.ac.jp
4998年12月見在。
2残念ながらソースプログラムは非公開です。従ってブラックボックスとなることを恐れて使うのをためらう方もおられる
と思います。その場合は自前のプログラムとの精度・速度の比較という目的で利用されてはいかがでしょうか。同じ間鳥を異
なる手法・プログラムで実行、比較することは数値計算の信頼性を高めるための常道です。
3コンディションコードとも呼びます。慣れないうちは面倒なパラメータのような気がするかもしれません。しかし特異性
の強い「きわどい」計算を行なう時には重要な役割を担うことがあります。
- 207-
九州大学大型計算機センター広報
Vol. 31 No. 4 1998
解 説
1.2 マニュアル
C-sSL叫VPのマニュアルM(日本語), 【91(英語)はセンター4階の図書室、 2階のプログラム相談
室で見ることができます。その他、オンラインマニュアルとしてPDFファイルを提供しています。オ
ンラインマニュアルの読み方は3章で説明します。
[8], [9】およびオンラインマニュアルには関数に用いた手法の詳しい解説は載っていません SSLII/VP
の手引書である[3], [4], [5]を参照してください。
2 C-SSI- II/VPの利用方法
ここではC-SSL II/VPを利用する際の一般的な注意事項、翻訳・結合によって実行可能ファイルを
作成するまでの手順を説明します。なお、翻訳・結合による実行可能ファイルの作成、実行はもちろん
バッチ処理でも行なうことができます。バッチ処理を行なう場合のシェルスクリプトの書き方、バッチ
リクエストの投入方法、処理コマンドのオプションの詳細は川を御覧ください。
2.1 Cプログラムからの利用
2.1.1 注意事項
○橿準ヘッダファイル
ソースプログラムの始桝こ必ずC-SSL II/VPの標準-ツダフアイル"cssl.h"をインクルードして
ください。
#defme "cssl.htI
cssl.hは/usr/la喝/cssl2vp/include/の下にあり、中をのぞくことができます。 cssl.h.では
複素数型dc°mplex、関数・引数の型などが宣言4されています。
○メイン関数名
メイン関数の関数名はmainではなく"汎AIN__"とします。大文字のMAINのあとにアンダースコア
が2本です5。
○引数
データの受渡しは引数で行います。一般的なC言語の受渡し方法と同じように、入力のみのスカラー
変数は値渡しで、入出力または出力を行なうスカラー変数は変数-のポインタを渡します。
○行列
m行n列の行列はプログラム内で"a[m] 【n]"と宣言し、 i行j列の要素a>ijは``aCi-1] 【j-1】''に格
納します。行列の添字は1から始まるのにC言語の配列は0から始まることに注意してください。 1次
元配列も同様です。ベクトルの要素3;iは配列の要素Ⅹ【i-13に対応します。
また行列をC-SSL II/VPの関数に引数として渡す場合は倍精度のポインタに型変換して渡します。
今の例では"(d°uble*)a"と書きます。また、 aの列の数6を引数として渡す必要があります。
4プロトタイプ宣言とよばれます。
5これはFortranとCの結合規則に従う必要性からきています。
6Fortranでは「整合寸法」と呼びます。
九州大学大型計算機センター広報
Vol. 31 No. 4 1998
- 208-
科学技術計算用関数ライブラリ C-ssl h/vpの紹介
○利用者関数
利用者関数はC言語の一般的な関数として作成します C-SSLII/VPには関数名を渡します。
○複素数
複素数は標準-ツダフアイル``cssl.h"中にdcomplexという名前で
typede王struct {
double re, i皿;
} dcomplex;
と宣言されています。 "re"が実部、バinnが虚部に対応する構造体です。以下のプログラムは倍精度
複素数zaの宣言と値の設定例です。
#defme ∬InX 1000
MAIN__O {
F ° ° 一
dcomplex za【柵AX】 [NMAX]
nォNMAX;
for (i=O;i<n; i++)
for (jさ0;j<さi;j+十) ‡
・
H
' l ° 事
II
r
t
o
o
II
jiii riii]
II
・
皿
・
皿
m-H
rL︻
2:a【j] 【i].re
tl
2:a【i3 Lj].re
○戻り値
すべてのC-SSL II/VPの関数は1°ng型の値を返します。
正常終了
計算の途中でエラーが発生したか正しい計算結果が得られなかった
ことを意味します。もし関数の戻り値が"lMの場合、処理内容の戻り値として指定した変数の値を調べ
ることでより詳細な情報を得ることができます。
-209-
九州大学大型計算穣センター広報
Vol. 31 No. 4 1998
解 説
2.1.2 サンプルプログラム
[8]から実行列と実ベクトルの積c_dmavと実行列の連立1次方程式c_dvlaxを使用したプログラム
を引用します。
#include くstdlib. h>
#include くBtdio.h>
#include <math.h>
#include "cssl.h" /*壕準-ツダフアイルのインクルード*/
#define NMAX IOO /*定数は#defineで定義すると便利*/
riw&s巳KtuwaB田に軍事SB四SB田EkmH
搬IN__ O
t
long xerr, icon;
long n, 1, J, k, isw, is;
double epsz, eps;
double aCNMAX] [NMAX] , b[NMAX】 x[NMAX] , vw【柵AX] ;
long ipCNMAXJ ;
/*行列Aと 才を定義*/
a
ニニ
-
a[j3 Ci]
nU
・
a【iコ【j
﹁J
for (j=i; jくn;
+ T - > ・ ! - サ ' - I )
for (i=0; iくn;
n
H
H
I
T
S
'
+
+....
nまNmlX;
)
)
for (i=O;i<n;i++) {
Ⅹ【i】 i+1 ;
)
/事c_dmavによってb- Azを計算; afは丸め誤差を無視すれば其の解になる*!
/*型の変換(double*)aに注意*!
imahは軸E
Ierr - c_血眼VHdouble*)a, k, n, a, Ⅹ, b, feicon);
/事C_dvlaxによって連立1次方程式を解く */
/*型の変換(double*)aに注意;出力のあるスカラー変数is, iconはポインタで渡す*/
epsz = le-12;
isw= 1;
lerr = c_dvlax((double*)a, k, n, b, epsz, isw, &is, vw, ip, feicon);
/*戻り値がOでなかった場合の対応*/
if (icon !=0) {
printf("ERROR: c_dvlax failed with icon = */,d\nM, icon) ;
exit(l);
)
/*精度の確認書/
epsォIe-6;
for (i=O;i<n;i++) {
if (fabs((x[i]-b[i】)/b[i]) > eps) {
printf ("WARNING: result inaccurate\皿") ;
exit(l);
)
)
printf ("Resuユt OK\n'O ;
return(O) ;
)
九州大学大型計算機センター広報
Vol. 31 No. 4 1998
-210-
科学技術計算用関数ライブラリ C-ssl h/vpの紹介
2.1.3 実行可能ファイルの作り方
○翻訳
翻訳はvcc(/usr/lang/bin/vcc)コマンドで行ないます。その際-Cオプションを指定してオブジェ
クトファイルのみ作成します。また-=オプションによってC-SSL II/VPの標準-ツダーファイルのあ
るディレクトリ/usr/lang/cssl2vp/includeを指定します。例ではプログラム名を"a-ple.c"とし
ています。なお「Gj)」はリターンキーを押し下げることを意味します。
kyu-vpp'/, vcc -c -I/usr/lang/css12vp/include sample.c 田 -一朝訳
翻訳が正常に終了すればオブジェクトファイルsample.Oが作成されます。
○結合
次にオブジェクトファイルをC-SSL II/VPライブラリと結合し、実行可能ファイルを作成します。
作成にはfrt(/usr/lang/bin/frt)コマンドを用います。またオプションとして
"-Icssl2vp -Issl2vp -lcvp"を指定します7。オプションの順番は入れ換えないでください。
kyu-vpp'/, frt sample.0 -Icssl2vp -Issl2vp -lcvp 田 -実行可能ファイルの作成
結合処理が無事に終ると、実行可能ファイルa.°utが作成されます。ファイル名を任意の名前に変更
するには10オプションに続けてファイル名を入力します。以下は実行可能ファイル名を"example.ex"
に変更する例です。
kyu-vpp'/, frt -o example.ex s叫ple.0 -Icssl2vp -Issl2vp -lcvp 田
2.1.4 単精度型を利用するには
単精度型関数やC-SSL II/VPがサポートしていないSSL II/VPの手続きを利用する場合は、直接C
プログラムからFortranサブルーチンであるSSL II/VPを呼び出します。利用方法は[2]を御覧くださ
い。記事中の計算機"VP2600/10"を"VPP700/56"と読み換えることでそのまま利用できます。
2.2 C++プログラムからの利用
C++プログラムからC-SSL II/VPを利用する場合には、以下の点に注意してください。
2.2.1 リンケージ指定
C++プログラムでは呼び出す関数をextern ‖et.で宣言する必要があります。引数の並びは標準-ツ
ダーファイル/usr/lang/cssl2vp/include/cssl.hを見ながら作成してください cssl.hはインク
ルードしません.以下は関数c dvlaxを宣言する例です。
extern
"C一一f
long c^dvlax ( double a【】 long k, long n, double b[】 double epsz,
long isw, long *is, double vw[】, long ip[], long *icon);
)
7順番にC-SSL II/VPライブラリ(Iibcssl2vp.a), SSL II/VPライブラリ(Iibssl2vp.a), C/VPライブラリ
(libcvp.a)を呼び出しています。
-211-
九州大学大型計算機センター広報
Vol. 31 No. 4 1998
解 説
2.2.2 実行可能ファイルの作り方
翻訳はcc(/usr/lang/bin/cc)コマンドで行ないます。結合はC言語と同様frtコマンドです。結
合オプションとしてC++ライブラリを呼び出すオプション-1Cを追加します。さらに実行可能プログ
ラムに対してpo醜ld(/usr/lang/bin/poSもld)コマンドを実行します。
yu-vppv.
vu-vpi>7.冒:-c
ts雷e.c^ppxpostIda.out田
。-Ics312vp-lssI2vp-Icvp-1C^-^票的;=「
2.2.3 C++から使用できない関数
C-SSL II/VPでは複素数型をC言語の構造体を用いて実現しています。しかしC++言語とC言語
の結合では関数の引数として構造体を使用することができません。従って現在のところ複素数型を使用
する関数はC++プログラムから呼び出すことができません。
3 オンラインマニュアル
3.1 PDFファイル
C-SSL II/VPのオンラインマニュアルはAdobe System社のPDF(Portable Document Format)形
式です kyu-vppの次の場所にあります。
日本語版(1,192,355バイト): /usr/la喝/cssl2vp/pdf/japan/cssl2jman.pdf
英語版(1,114,011バイト): /usr/lang/cssl2vp/pd王/C/cssl2eman.pdf
PDFファイルはAdobe System社から無料で提供されているツール"Acrobat Reader"を用いて読む
ことができます。バージョンは日本語の場合3.0J以降、英語の場合3.0以降が必要です。
C-SSL II/VPオンラインマニュアル(日本語版)
8内容に数式が多く含まれるため、 HTMLでは提供できなかったそうです。おそらく堺で作成したものをPostScript
形式に変換し、 ps2pdfでPDFに直したあとで修正を加えたものと思われます。
九州大学大型計算機センター広報
Vol. 31 No. 4 1998
-212-
科学技術計算用関数ライプラu c-ssl h/vpの紹介
C-SSL II/VPオンラインマニュアル(英語版)
3.2 Acrobat Readerによる検索
kyu-vppで公開しているC-SSLII/VPのPDFファイルはセンター利用者なら誰でも手元のコンビュ-
タに転送して読むことができます。転送はまtpコマンドなどを用いて バイナリーモードで行なってく
ださい。
転送したコンピュータにAcrobat Readerがインストールされてない場合はhttp://www.adobe.co.jp/
からダウンロードします9。 Acrobat Readerの利用方法はHelpメニューを参府してください。ここで
はC-SSL町VPに関連した注意事項をあげます。
Jオンラインマニュアルの最初の一覧表の関数名をクリックするとその関数のページに移ることが
できます。
●テキスト選択ツールを使うことで、オンラインマニュアルのサンプルプログラムをコピーして他
のツールに貼りつける(ペースト)ことができます。
テキストの選択.範囲を指定した後,右ボタンをクリックしてcopyを選択.
9Windows 95, Macintoshへのインストールは実に簡単です。
-213-
九州大学大型計算機センター広報
Vol. 31 No. 4 1998
解 説
Acrobat Readerの検索機能を用いたキーワード検索を行なうことができます。
●オンラインマニュアルを印刷することはできません。別途マニュアルを購入してください。
3.3 WWWブラウザによる検索
センターのホームページhttp://www.cc.kyushu-u.ac.jp/のオンラインマニュアルの項目からCSSL II/VPのPDFファイル-のリンクが張ってあります Acrobat Readerがインストール済みのコ
ンピュータであればWWWブラウザ用のプラグイン機能を用いてオンラインマニュアルを読むことが
できます。
ただしAcrobat Readerで利用できる検索機能やテキスト選択機能は使えません。プリンター-の出
力もできません。また、センターホームページのオンラインマニュアルの利用はセンター課題をお持ち
の方に限ります。
4 関数一覧
C-SSL II/VPで利用できる関数の一覧です。 "(単精度)"の記述がないものはすべて倍精度実数また
は倍精度複素数を扱う関数です。
●行列格納モードの変換
c_dcgsm
c_dcsgm
行列格納モードの変換(一般モード-対称行列)
行列格納モードの変換(対称行列-一般モード)
●行列操作
c_daggm
c_dsggm
c_ dvmggm
c_ d皿aV
c_dmcv
c_dvmvs d
c_ dvmvs e
行列の和(実行列)
行列の差(実行列)
行列の積(実行列)
実行列と実ベクトルの積
複素行列と複素ベクトルの積
スパース実行列と実ベクトルの積(対角形式格納法)
スパース実行列と実ベクトルの積(ELLPACK形式格納法)
●行列の三角分解
c_ dvalu
c_dclu
実行列のLU分解(ブロッキングLU分解法)
複素行列のLU分解(Crout法)
●連立1次方程式
c_dvlax
c_dlcx
c_dvlsx
c_ dvlbx
c_dvlsbx
c_dlstx
c_dltx
c_dvcgd
c_dvcge
c_dvcrd
c_dvcre
実行列の連立1次方程式(ブロッキングLU分解法)
複素行列の連立1次方程式(Crout法)
正値対称行列の連立1次方程式(変形Cholesky法)
実バンド行列の連立1次方程式(Gaussの消去法)
正値対称バンド行列の連立1次方程式(変形Cholesky分解)
正値対称3項行列の連立1次方程式(変形Cholesky法)
実3項行列の連立1次方程式(G.auss消去法)
正値対称スパース行列の連立1次方程式(前処理付きCG法,対角形式格納法)
正値対称スパース行列の連立1次方程式(前処理付きCG法, ELLPACK形式格納法)
非対称または不定値スパース実行列の連立1次方程式(MGCR法,対角形式格納法)
非対称または不定値スパース実行列の連立1次方程式(MGCR法, ELLPACK形式格納法)
九州大学大型計算機センター広報
Vol. 31 No. 4 1998
-214-
科学技術計算用関数ライブラリ C-SSL E/VPの紹介
●逆行列
c dvluiv
c_dcluav
LU分解された実行列の逆行列
LU分解された複素行列の逆行列
●最小二乗解
c_ dlaxl
c_dlaxlm
c_dginv
c dasvdl
実行列の最小二乗解(Householder変換)
実行列の最小二乗最小ノルム解(特異値分解法)
実行列の一般逆行列(特異値分解法)
実行列の特異値分解(Householder法, QR法)
●固有値,固有ベクトル
c_deigl
c_dceig2
c_dseigl
c_dse ig2
C_血eig2
c_dbseg
c_dteig2
C_ dvgsg2
実行列の固有値及び固有ベクトル(2段QR法)
複素行列の固有値及び固有ベクトル(QR法)
実対称行列の固有値及び固有ベクトル(QL法)
実対称行列の固有値及び固有ベクトル(並列Bisection法,逆反復法)
Hermite行列の固有値及び固有ベクトル(Householder法Bisection法,逆反復法)
実対称バンド行列の固有値及び固有ベクトル(Lutishauser-Schwarz法, Bisection法,逆反復法)
実対称3重対角行列の国有値及び固有ベクトル(Bisection法,逆反復法)
実対称行列の一般固有値・固有ベクトル(並列Bisection法,逆反復法)
●非線形計算
C_血qdr
c_ dcqdr
c_ dlowp
c_drj etr
c_dcj art
c_dtsdl
c dtsdm
c_dct sd皿
C_血olbr
実係数2次方程式
複素係数2次方程式
実係数低次代数方程式(5次以下)
実係数高次代数方程式(Jenkins-Traubの方法)
複素係数高次代数方程式(Jarratt法)
実超越方程式f(x) - 0 (Brent法)
実超越方程式f(x) - O(Muller法)
複素超越方程式f(z) - O(Muller法)
連立非線形方程式(Brent法)
●補間
c _daklag
c_dbif3
c_dbifd3
c dakmid
c_ dakmin
c_dbic3
c_dbicd3
Aitken-Lagrange補間
B-spline補間式(Ill)による補間,数値微分,数値積分
B-spline2次元補間式(III-III)による補間,数値微分,数値積分
2次元準Hermite補間式による補間
準Hermite補間式
B-spline補間式(Ill)
B-spline2次元補間式(III-III)
●極値問題
c_dlminf
c_d皿in王1
C_血olf l
c_dlprs l
c_血Ipgl
1変数関数の極小化(微係数不要, 2次補間法)
多変数関数の極小化(微係数不要,改訂準Newton法)
関数二乗和の極小化(微係数不要,改訂Marquardt法)
線形計画問題(改訂simplex法)
非線形計画問題(微係数要Powell法)
●平滑化
c_dsmle l
c_dbsfl
c_dbscl
最小二乗近似多項式による平滑化(等間隔離散点)
B-spline平滑化式による平滑化,数値微分,数値積分
B-spline平滑化式(固定節点)
215-
九州大学大型計算機センター広報
Vol. 31 No. 4 1998
解 説
●変換
●近似
c.dlesql
●疑似乱数
●特殊関数
c_dcelil
c_dceli2
c_dsmi
c_digaml
c_digam2
c.dbj O
c_dbj l
c-dbyO
c_dbyl
c.dbiO
c.dbil
c-dbkO
c_dbkl
c_dbjn
c_ dbyn
c_dbin
c_ dbkn
c dcbm
c_ dcbkn
c-dcbj n
c_dcbyn
c_dbj r
c_ dbyr
c_dbir
c. dbkr
c_dcbj r
第1種完全楕円積分 K{x)
第2種完全楕円積分E(x)
正弦積分Si(x)
第1種不完全Gamma関数-y{u,x)
第2種不完全Gamma関数T(u,x)
第1種0次Bessel関数Jo(x)
第1種1次Bessel関数Ji(x)
第2種0次Bessel関数Yo(x)
第2種1次Bessel関数Yl(x)
第1種0次変形Bessel関数Io(x)
第1種1次変形Bessel関数Jl(*
第2種0次変形Bessel関数KO(x)
第2種1次変形Bessel関数Ki(x)
第1種整数次Bessel関数Jn(x)
第2種整数次Bessel関数Yn(x)
第1種整数次変形Bessel関数/サ*
第2種整数次変形Bessel関数Kn{x)
複素変数第1種整数次変形Bessel関数In(z)
複素変数第2種整数次変形Bessel関数Kn{z)
複素変数第1種整数次Bessel関数Jn(z)
複素変数第2種整数次Bessel関数Yn(z)
第1種実数次Bessel関数Mx)
第2種実数次Bessel関数Yv{x)
第1種実数次変形Bessel関数/ (*)
第2種実数次変形Bessel関数Kv{x)
複素変数第1種実数次Bessel関数JM
●微分方程式
C_ dodge
stiぼ連立1 階常微分方程式(GeaJ法)
c dodam
連立1階常微分方程式(Adams法)
九州大学大型計算機センター広報
Vol. 31 No. 4 1998
-216
科学技術計算用関数ライブラリ C-SSL E/VPの紹介
●数値積分
c_dsimpl
c_dtrap
c_daqn9
C-daqe
c _daqeh
c_ daqei
c_ daqmc8
1次元有限区間積分(等間隔離散点入力, Simpson則)
1次元有限区間積分(不等間隔離散点入力,台形則)
1次元有限区間積分(関数入力,適応型Newton-Cotes9点則)
1次元有限区間積分(関数入力,二重指数関数型積分公式)
1次元半無限区間積分(関数入力,二重指数関数型積分公式)
1次元全無限区間積分(関数入力,二重指数関数型積分公式)
多次元有限領域積分(関数入力 Clenshaw-Curtis型積分法)
参考文献
囲VPP700/56利用の手引(第2版),九州大学大型計算機センター1998.
[21渡部善隆,山元規靖: CプログラムからSSLIIを利用するには,九州大学大型計算機センター広
報Vol.29, No.3, pp.234-242 (1996).
[3]富士通SSL II使用手引書(科学用サブルーチンライブラリ), 99SP-4020,富士通株式会社1987.
回FIJITSU SSL II拡張機能使用手引書(科学用サブルーチンライブラリ), 99SP-4070,富士通株式会
社1991.
[5] FUJITSU SSL II拡張機能使用手引書II(科学用サブルーチンライブラ]) ), J2X0-1360,富士通株
式会社1997.
回FUJITSU SSL II/VPP使用手引書(科学用サブルーチンライブラリ)V12用J2X0-1370,富士通
株式会社1997.
[7] NUMPAC利用手引書,富士通株式会社, 1994. ( http://cronos.fuis.fukui-u.ac.jp/numPaC/
から検索可能)
囲FUJITSU C-SSL II使用手引書(科学用関数ライブラリ), J2X0-3330-01,富士通株式会社1997.
回Fujitsu C-SSL II User's Guide, J2X0-3330-01EN,富士通株式会社1997.
-217-
九州大学大型計算機センター広報
Vol. 31 No. 4 1998