SILC利用者マニュアル

SSI プロジェクト

2007年10月31日改訂(SILC v1.3 対応)


目次

1. はじめに
2. SILC サーバ
2.1. SILC サーバのコンパイル
2.2. SILC サーバの起動と終了
3. ユーザプログラム
3.1. ユーザプログラムの構成
3.2. ユーザプログラムのコンパイル
3.3. データ型と精度
3.4. 行列の格納形式
4. 命令記述言語
4.1. 代入文
4.2. 手続き呼び出し文
4.3. システム文
4.4. 演算子のオペランド
4.5. 精度変換ルール
4.6. 添字
4.7. モジュール
5. API リファレンス
5.1. C言語版クライアントルーチン
5.2. Fortran 版クライアントルーチン
5.3. 組込み関数・手続き
A. 改訂履歴

1. はじめに

本文書では,SILC の応用プログラム(ユーザプログラム)を作成するために 必要となる情報を提供する.まず SILC サーバのコンパイル方法と実行方法 について述べる.次に C 言語と Fortran によるユーザプログラムの開発 方法について述べる.さらに SILC の数式 (命令記述言語) について解説し, 最後に API の詳細をまとめる.

2. SILC サーバ

2.1. SILC サーバのコンパイル

SILC サーバをコンパイルして動かすには以下のソフトウェアがインストール された Unix/Linux 環境または Windows 環境が必要である.

  • C/Fortran コンパイラ

  • GNU Make

  • GNU Bison

  • GNU Flex

また, 以下の行列計算ライブラリを SILC サーバに組み込んで利用できる.

SILC の動作が確認されている計算環境(括弧内は後述する make.inc の作成例を示す inc/ ディレクトリ 内のファイル名),OS,およびコンパイラは以下の通りである.「OpenMP」の欄は 当該環境における OpenMP のサポートの有無を示す.

表 1. テスト環境

計算環境OSコンパイラOpenMP
Sun Fire 3800 (make.sunfire)Solaris 9 (sparc)Sun ONE Studio 7Yes
SGI Altix 3700 (make.altix)Red Hat Linux Advanced Server 2.1Intel C 9.1
Intel Fortran 9.1
Yes
IBM eServer xSeries 335 (make.linux-icc-32)Red Hat Linux 8.0Intel C 9.0
Intel Fortran 9.0
Yes
Dell PowerEdge SC 1420 (make.linux-icc-64)Fedora Core 4Intel C 9.0 (EM64T)
Intel Fortran 9.0 (EM64T)
Yes
IBM OpenPower 710 (make.openpower)SuSE Linux Enterprise Server 9 (ppc)IBM XL C 7.0
IBM XL Fortran 9.1
Yes
Apple PowerMac G5 (make.g5)Mac OS X 10.4.2IBM XL C 6.0
IBM XL Fortran 8.1
Yes
NEC SX-6i (make.sx)SUPER-UX 13.1 SX-6C++/SX 1.0 for SX-6
FORTRAN90/SX 2.0 for SX-6
No
Panasonic CF-R3 (make.gcc)Fedora Core 3GCC 3.4.2No
IBM ThinkPad T42 (make.gcc)KNOPPIX 4.0 LinuxTag Japanese EditionGCC 3.3.6No
Dell Dimension 84000 (make.mingw)Microsoft Windows XP Professional SP2MinGW (GCC 3.2.3)No

SILC のソースコード(silc-1.3.tar.gz)は以下の 場所から入手できる.

silc-1.3.tar.gz からソースコードを 取り出すには次のコマンドを実行する.これによりカレントディレクトリ の silc-1.3/src/ ディレクトリ内に SILC の ソースコードが展開される.

$ gzip -cd silc-1.3.tar.gz | tar xvf -

SILC をコンパイルするには,計算環境に合わせた内容の make.inc というファイルを silc-1.3/src/ ディレクトリ内に作成する必要がある.上述のテスト環境向けに 作成した make.inc ファイルのサンプル が silc-1.3/src/inc/ ディレクトリ内にある. サンプルファイル名と想定する計算環境,OS,コンパイラの対応関係 は表 1 の通りである.

make.inc ファイルには,make コ マンドの入力ファイルとなる Makefile で用いられる マクロ変数を記述する.マクロ変数には大きく分けて SILC に依存しない一般 的なもの(表 2)と SILC 固有のマクロ 変数(表 3)がある.

表 2. 一般的なマクロ変数

CCC コンパイラのコマンド名
FCFortran コンパイラのコマンド名
LINK.fFortran プログラムのリンクに用いるリンカのコマンド名 (デフォルトは FC に指定したコマンド名)
BISONGNU Bison のコマンド名
FLEXGNU Flex のコマンド名
CFLAGSC のコンパイラオプション
FFLAGSFortran のコンパイラオプション
LDFLAGSC/Fortran コンパイラのリンカオプション
SHAREDCFLAGS 共有ライブラリのコンパイルに必要な C コンパイラ オプション
SHAREDFFLAGS 共有ライブラリのコンパイルに必要な Fortran コンパイラ オプション
SHAREDLDFLAGS共有ライブラリのリンクに必要な C/Fortran コンパイラの リンカオプション
RANLIBranlib コマンドの名前(ranlib コマンドを実行する必要のない環境では echo コマンド等を指定する)
RMrm コマンドの名前(定義する必要があるのは 一部の環境に限られる)

表 3. SILC 固有のマクロ変数

OMPFLAGSOpenMP 並列化を有効にするための C/Fortran コンパイラ オプション
LIBSSILC サーバおよびサンプルプログラムをリンクするための リンカオプション(リンクするライブラリ等を指定)
PLATFORM_MODULES特定のライブラリに依存する格納形式モジュールおよび 計算モジュールのうち,SILC に組み込むものを列挙する.以下のモジュールが 指定できる(括弧内は依存するライブラリ名).各モジュールの詳細について は4.7節 を参照.
  • $(FORMAT_DIR)/sparse_band.so (BLAS, LAPACK)

  • $(MODULE_DIR)/blasmodule.so (BLAS, LAPACK)

  • $(MODULE_DIR)/leq_lis.so (Lis)

  • $(MODULE_DIR)/fftss.so (FFTSS)

  • $(MODULE_DIR)/linpackmodule.so (LINPACK)

PLATFORM_TESTS特定のライブラリに依存するサンプルプログラムのうちコン パイルするものを列挙する.以下のサンプルプログラムが指定できる(括弧内は 依存するライブラリ名).
  • test_dense (BLAS)

  • test_dense_sa (BLAS)

  • test_dot

  • test_dot_sa (BLAS)

  • test_band

  • test_band_sa (BLAS, LAPACK)

  • mm_band (BLAS)

  • mm_band_sa (BLAS, LAPACK)

  • mm_lis (Lis)

BLAS_DRIVERBLAS ドライバのファイル名(後述)
BLAS_CFLAGSBLAS を呼ぶプログラムをコンパイルするためのCコンパイラ オプション
BLAS_LIBSBLAS を呼ぶプログラムをリンクするためのリンカ オプション(リンクするライブラリ等を指定)
LAPACK_DRIVERLAPACK ドライバのファイル名(後述)
LAPACK_CFLAGSLAPACK を呼ぶプログラムをコンパイルするためのCコンパイラ オプション
LAPACK_LIBSLAPACK を呼ぶプログラムをリンクするためのリンカ オプション(リンクするライブラリ等を指定)
LIS_CFLAGSLis を呼ぶプログラムをコンパイルするための C コンパイラ オプション
LIS_LDLis を呼ぶプログラムをリンクするのに用いるリンカの コマンド名
LIS_LIBSLis を呼ぶプログラムをリンクするためのリンカ オプション(リンクするライブラリ等を指定)
LINPACK_LIBSLINPACK を呼ぶプログラムをリンクするためのリンカオ プション(リンクするライブラリ等を指定)

BLAS および LAPACK は,SILC サーバとサンプルプログラムからドライバを 介して呼び出される.ドライバには以下の3種がある.用いる BLAS/LAPACK の バージョンに応じて適当なドライバを1つ選んで利用する.

  • Intel Math Kernel Library(MKL)用ドライバ

    blas_intelmkl.c, lapack_intelmkl.c

  • Sun Performance Library 用ドライバ

    blas_sunperf.c, lapack_sunperf.c

  • 汎用ドライバ

    blas_dumb.c, lapack_dumb.c

用いるドライバ,コンパイラオプション,およびリンカオプション(リンクする ライブラリ等)を指定するには make.inc ファイルに以下の マクロ変数を定義する.

BLAS_DRIVERBLAS ドライバのファイル名
BLAS_CFLAGSBLAS 用の C コンパイラオプション
BLAS_LIBSBLAS 用のリンカオプション
LAPACK_DRIVERLAPACK ドライバのファイル名
LAPACK_CFLAGSLAPACK 用の C コンパイラオプション
LAPACK_LIBSLAPACK 用のリンカオプション

汎用 BLAS/LAPACK ドライバを用いる場合のマクロ定義例を以下に示す.

BLAS_DRIVER=    blas_dumb.c
BLAS_CFLAGS=
BLAS_LIBS=      /opt/LAPACK/blas.a

LAPACK_DRIVER=  lapack_dumb.c
LAPACK_CFLAGS=  $(BLAS_CFLAGS)
LAPACK_LIBS=    /opt/LAPACK/lapack.a $(BLAS_LIBS)

silc-1.3/src/inc/ ディレクトリ内の make.inc の作成例は -DDEBUG オプションを 付けてコンパイルする設定になっているため,SILC サーバとユーザプログラムの 実行時に多量のメッセージが出力される.make.inc を 修正してこのオプションを削除またはコメントアウトすればメッセージの出力を 抑えることができる.

silc-1.3/src/ ディレクトリ内に make.inc を作成した後,同じディレクトリで次のよう に make コマンドを実行して SILC サーバを コンパイルする.SILC のサンプルプログラムも一緒にコンパイルされる.

$ make

2.2. SILC サーバの起動と終了

ユーザプログラムを実行する前に SILC サーバを起動しておく必要がある. SILC サーバを起動するには次のように入力する(注: SILC サーバの実行 可能形式ファイルがあるディレクトリをカレントディレクトリにする必要が ある).SILC サーバはフォアグラウンドで動作する.

$ cd src/server
$ ./server

共有メモリ並列環境では OpenMP で 並列化された SILC サーバが利用できる.スレッド数を制御するには 環境変数 OMP_NUM_THREADS を設定する.例:

$ env OMP_NUM_THREADS=4 ./server

特に指定しない限り SILC サーバが用いるポート番号は毎回変化する. ポート番号を指定するには環境変数 SILC_PORT を 設定する.例:

$ env SILC_PORT=32000 ./server

SILC サーバは起動後に自身のホスト名とポート番号を ‾/.silc に書き出す.後述するクライアントルーチン SILC_INIT3.1節)は,このファイルに記述されたホスト名 とポート番号に従ってサーバへの接続を確立する.‾/.silc の 内容は以下の通りである.

ホスト名 ポート番号 [EOF]

SILC サーバとユーザプログラムをそれぞれファイルシステムの異なる計算環境で 実行する場合はユーザプログラム側の ‾/.silc を人手に より作成する必要がある.以下のように echo コマンドを 利用するとよい:

$ echo ホスト名 ポート番号 > ‾/.silc

SILC サーバを終了するには, Ctrl-C を入力するか, kill コマンドでサーバプロセスを終了させる.例:

$ kill -9 プロセス番号

3. ユーザプログラム

3.1. ユーザプログラムの構成

SILC のユーザプログラムは,ネットワークを介して SILC サーバに 接続し,以下の関数を用いてサーバが管理するライブラリを利用する. これらの関数をクライアントルーチンと呼ぶ. 引数の詳細は5節で述べる.

C 言語用クライアントルーチン:

  • SILC_INIT

    SILC サーバに接続する.

  • SILC_PUT

    行列やベクトルなどのデータをサーバに送る.

  • SILC_EXEC

    サーバに計算を指示する.計算指示には SILC の命令記述 言語(4節)で表された 文字列(数式)を用いる.

  • SILC_GET

    計算結果をサーバから受け取る.

  • SILC_FINALIZE

    サーバとの接続を切る.

Fortran 用クライアントルーチン:

  • SILC_INIT

    SILC サーバに接続する.

  • SILC_PUT_SCALAR, SILC_PUT_MATRIX, SILC_PUT_MATRIX_CRS など

    行列やベクトルなどのデータをサーバに送る. C言語の場合とは異なり,送るデータの型に応じて異なる関数を用いる.

  • SILC_EXEC

    サーバに計算を指示する.計算指示には SILC の命令記述 言語(4節)で表された 文字列(数式)を用いる.

  • SILC_GET_SCALAR, SILC_GET_MATRIX, SILC_GET_MATRIX_CRS など

    計算結果をサーバから受け取る. 上記の送信の場合と同様にデータ型別に異なる関数を用いる.

  • SILC_FINALIZE

    サーバとの接続を切る.

これらのクライアントルーチンは C 言語用,Fortran 用とも に silc-1.3/src/client/libsilc.a に 定義されている.このライブラリファイルをユーザプログラムに リンクすることにより上記のクライアントルーチン群が利用 できる.libsilc.a は SILC サーバの コンパイル時に一緒に作成される.

また,クライアントルーチンの呼び出しに用いる構造体や 定数(5節参照)は silc-1.3/src/client/client.h(C 言語用)および silc-1.3/src/client/fortran/client.h(Fortran 用)に 定義されている.

なお,ユーザプログラムは逐次プログラムでもマルチスレッド化された 並列プログラムでもよいが,クライアントルーチンの呼び出しは同一 スレッドから行なわなければならない.

C 言語によるユーザプログラムの構成例(solve.c)を 以下に示す.このプログラムは疎行列 A を係数とする連立一次方程式 Ax = b を 解くプログラムの例である.

#include "client.h"

int main(int argc, char *argv[])
{
  silc_envelope_t object;  /* データの授受に用いる構造体 */
  double *value, *b, *x;
  int *index, *row;

  /* 疎行列 A(CRS 形式)およびベクトル b の生成 */

  SILC_INIT();

  object.v = value;
  object.type = SILC_MATRIX_TYPE;
  object.format = SILC_FORMAT_CRS;
  object.precision = SILC_DOUBLE;
  object.m = object.n = N;  /* 次数 */
  object.nnz = NNZ;  /* 非ゼロ要素数 */
  object.row = row;
  object.index = index;
  SILC_PUT("A", &object);

  object.v = b;
  object.type = SILC_COLUMN_VECTOR_TYPE;
  object.precision = SILC_DOUBLE;
  object.length = N;
  SILC_PUT("b", &object);

  /* 連立一次方程式 Ax = b の求解 */
  SILC_EXEC("x = A ¥¥ b");

  object.v = x;
  SILC_GET(&object, "x");

  SILC_FINALIZE();

  /* 解(ベクトル x)の出力 */
}

上記のユーザプログラムと同じ計算を行なう Fortran プログラムの 構成例(solve.f)を以下に示す.

    INCLUDE 'client.h'

    REAL *8 VALUE(NNZ), B(N), X(N)
    INTEGER *4 ROW(N+1), INDEX(NNZ), IERR

C   疎行列 A(CRS 形式)およびベクトル b の生成

    CALL SILC_INIT(IERR)

    CALL SILC_PUT_MATRIX_CRS('A', VALUE, N, N, NNZ, ROW, INDEX,
   &                         SILC_DOUBLE, IERR)

    CALL SILC_PUT_COLUMN_VECTOR('b', B, N, SILC_DOUBLE, IERR)

C   連立一次方程式 Ax = b の求解
    CALL SILC_EXEC('x = A ¥ b', IERR)

    CALL SILC_GET_COLUMN_VECTOR('x', X, IERR)

    CALL SILC_FINALIZE(IERR)

C   解(ベクトル x)の出力

3.2. ユーザプログラムのコンパイル

ユーザプログラムをコンパイルするには, (1)ヘッダファイル(client.h)と ライブラリファイル(libsilc.a)の あるディレクトリを指定するオプション, (2)リンクするライブラリ(libsilc.a および 後述の追加ライブラリ)を指定するオプションをコンパイラに与える.

例えば,GNU C コンパイラを用いて前節の C プログラム(solve.c)をコンパイルするには次のように gcc コマンドを実行する.以下の例ではホームディレクトリ 配下に ‾/silc-1.3/src/ ディレクトリがあると 仮定している.

$ gcc -I‾/silc-1.3/src/client -c solve.c
$ gcc -L‾/silc-1.3/src/client -o solve solve.o -lsilc

-I オプションと -L オプションはそれ ぞれ client.hlibsilc.a があるディレクトリを指定するオプション,-lsilclibsilc.a のリンクを指示するオプションである.

なお,プログラムを繰返し修正してコンパイルする場合はユーザプログラムと 同じディレクトリに次のような Makefile を作成すると 便利である.

all: solve

CC=      gcc
CFLAGS=  -I$$HOME/silc-1.3/src/client
LDFLAGS= -L$$HOME/silc-1.3/src/client
LIBS=    

solve: solve.c
	$(CC) $(CFLAGS) -c solve.c
	$(CC) $(LDFLAGS) -o $@ solve.o -lsilc $(LIBS)

このファイルを用いて solve.c をコンパイルするには 次のように make コマンドを実行する.

$ make

また,GNU Fortran コンパイラを用いて前節の Fortran プログラム(solve.f)をコンパイルするには次のように g77 コマンドを実行する.

$ g77 -I‾/silc-1.3/src/client/fortran -fno-second-underscore -c solve.f
$ g77 -L‾/silc-1.3/src/client -o solve solve.o -lsilc

C プログラムの場合と同様に次のような Makefile を作成しておくと便利である.

all: solve

FC=      g77 -fno-second-underscore
FFLAGS=  -I$$HOME/silc-1.3/src/client/fortran
LDFLAGS= -L$$HOME/silc-1.3/src/client
LIBS=    

solve: solve.f
	$(FC) $(FFLAGS) -c solve.f
	$(FC) $(LDFLAGS) -o $@ solve.o -lsilc $(LIBS)

なお,いくつかの計算環境では libsilc.a と共に ソケット通信機能を利用するためのライブラリをリンクする必要がある. 主な計算環境と追加ライブラリの有無を以下に示す.上記の Makefile では LIBS に追加ライブラリを 記述すればよい.

表 4. 主な計算環境と追加ライブラリの有無

計算環境追加ライブラリ
Solaris-lsocket -lnsl
GNU/Linuxなし
Microsoft Windows (MinGW)-lws2_32
Mac OS Xなし

3.3. データ型と精度

ユーザプログラムと SILC サーバのあいだで授受できるデータ型には 以下の5つがある.データ型の指定には括弧内の定数を用いる. これらの定数は client.h に定義されて いる(5節参照).

  • スカラー(SILC_SCALAR_TYPE

  • 列ベクトル(SILC_COLUMN_VECTOR_TYPE

  • 行ベクトル(SILC_ROW_VECTOR_TYPE

  • 行列(SILC_MATRIX_TYPE

  • 3次元配列(SILC_CUBIC_ARRAY_TYPE

利用可能なデータの精度を以下に示す.精度の指定には括弧内の定数を 用いる.各精度に対応するC言語と Fortran のデータ型(精度)を示す.

表 5. 利用可能な精度

精度C言語Fortran
単精度整数(SILC_INTintINTEGER*4
倍精度整数(SILC_LONGlongINTEGER*8
単精度実数(SILC_FLOATfloatREAL*4
倍精度実数(SILC_DOUBLEdoubleREAL*8
単精度複素数(SILC_COMPLEXfloat[a]COMPLEX*8
倍精度複素数(SILC_DOUBLE_COMPLEXdouble[a]COMPLEX*16

[a] C言語では,複素数の実部と虚部をそれぞれ実数で表す. 長さ N の複素数配列は実部と虚部を 交互に並べた長さ 2N の実数配列で表す.


3.4. 行列の格納形式

行列を授受する場合はデータ型(SILC_MATRIX_TYPE)と共に 格納形式を指定する必要がある.現在サポートしている行列の格納形式は 以下の2種である.

  • SILC_FORMAT_DENSE

    密行列(dense matrix).Fortran の2次元配列に相当する格納形式. 以下の属性値および配列から成る.

    m

    行数(整数型)

    n

    列数(整数型)

    value

    長さ m * n の配列(精度は任意)

    行列のすべての要素を Fortran の2次元配列の形式(列優先)で 格納する(注:C言語の2次元配列は行優先).

  • SILC_FORMAT_CRS

    Compressed Row Storage(CRS)形式の疎行列(sparse matrix). 行列の要素のうち値が 0 でないもの(これを非零要素と呼ぶ)のみを 保持する格納形式.以下の属性値および配列から成る.

    m

    行数(整数型)

    n

    列数(整数型)

    nnz

    非ゼロ要素数(整数型)

    value

    長さ nnz の配列(精度は任意)

    非ゼロ要素のみを行優先ですき間なく格納する.

    row

    長さ m + 1 の単精度整数型配列

    row[0] は1行目の最初の非ゼロ要素の 配列 value における位置(添字), row[1] は2行目の最初の非ゼロ要素の 添字というように,各行の非ゼロ要素の開始位置を格納する. row[m] の値は nnz とする.

    index

    長さ nnz の単精度整数型配列

    配列 value における対応する添字の 非ゼロ要素の列番号を保持する.例えば,行列のある行の5列目の 要素が value[7] に格納されている場合, index[7] に列番号 5 を格納する.

    例: 次の4行4列の行列を CRS 形式で表した場合の 配列 value, row, および index の内容を以下に示す.

      | 11  0  0  0 |
      |  0 22  0  0 |
      |  0 32 33  0 |
      | 41  0  0 44 |
    
    • value: 11, 22, 32, 33, 41, 44(長さ 6)

    • row: 0, 1, 2, 4, 6(長さ 5)

    • index: 1, 2, 2, 3, 1, 4(長さ 6)

4. 命令記述言語

クライアントルーチン SILC_EXEC の引数には サーバに計算を指示するための文字列を与える.文字列の内容は SILC の 命令記述言語で書かれた一種のプログラムである.

命令記述言語の実行単位は文(statement)であり,次の3種がある.

  • 代入文

    変数への値の格納を指示する文.等号(=)の左辺には変数名(および 添字),右辺には式(expression)を指定する.変数は代入により型 宣言なしで作成でき,任意のデータ型の値を代入できる.既存の変数に 新しい値を代入すると古い値は削除される.

  • 手続き呼び出し文

    手続き(procedure)の呼び出しを指示する文.

  • システム文

    SILC サーバを制御するための文.現時点 では prefer 文(4.3節)がある.

また,複数の文をセミコロン(;)で結合して 一括して SILC_EXEC に渡すことができる.

4.1. 代入文

代入文には次の2種がある.

  • 単純代入文(simple assignment)

    "変数名 = " の形の代入文. 式の値を指定された名前の変数に代入する. 変数がなければ新たに定義し,同名の変数があれば値を変更する. "A = B" のように式として変数名を与えた場合, 複製された値が代入される(変数 B の値のコピーが作られる).

  • 累算代入文(augmented assignment)

    二項演算を伴う代入文であり,以下の7種がある. 例えば,"変数名 += " は "変数名 = 変数名 + " と等しい. 左辺の変数名は定義済みでなければならない.

    変数名 +=

    加算

    変数名 -=

    減算

    変数名 *=

    乗算

    変数名 /=

    除算

    変数名 %=

    余り

    変数名 *@=

    要素ごと乗算(elementwise multiplication)

    変数名 /@=

    要素ごと除算(elementwise division)

代入文の右辺には式を指定する.式の構成要素を以下に示す. ここで,x, y, e1, e2, ..., eN は任意の式である. なお,単項演算子および二項演算子のオペランドとして有効なデータ型に ついては4.4節を,利用可能な 組込み関数については5.3節をそれぞれ参照.

  • 単項演算子

    x

    複素共役

    x'

    共役転置

    x'‾ または x‾'

    転置

    -x

    符号反転(negation)

  • 二項演算子

    x + y

    加算

    x - y

    減算

    x * y

    乗算

    x / y

    除算

    x % y

    余り

    A ¥ b

    連立一次方程式 Ax = b の求解(A はN×N行列, b は列ベクトルまたはN×M行列)

    x *@ y

    要素ごと乗算(elementwise multiplication)

    x /@ y

    要素ごと除算(elementwise division)

  • 関数呼び出し

    f(e1, e2, ..., eN)

    f は 関数名,e1, e2, ..., eN は任意の式(引数)

  • 連結(concatenation)

    {e1, e2, ..., eN}

    列方向に連結する. e1, e2, ..., eN が スカラーならば列ベクトルが得られる.

    {e1; e2; ...; eN}

    行方向に連結する. e1, e2, ..., eN が スカラーならば行ベクトルが得られる.

    {e1;; e2;; ...;; eN}

    3次元配列を生成する.

  • 範囲(range)

    {e1:e2}

    始点 e1 から 終点 e2 までの 整数を要素とする列ベクトルを生成する. e1e2 には 値が整数となる式を指定する.

  • リテラル

    小数点を伴う数値は倍精度実数(SILC_DOUBLE), それ以外の数値は単精度整数(SILC_INT)として扱われる.

  • 定数

    e

    自然対数の底

    i

    虚数単位(複素数は 3 - 5 * i のように二項演算子を用いて得る)

    pi

    円周率

    inf

    無限大

  • その他

    • 変数名は式である.

    • 括弧で演算子の結合順序を変更できる.

    • 式には添字(4.6節)を付加できる.

4.2. 手続き呼び出し文

手続き呼び出し文は,手続き名と引数の並びから成る.以下に例を示す.

split(A, L, D, U)

行列 A を下三角部分,対角部分,上三角部分に分け, それぞれ L, D, U に 格納する.

手続き呼び出し文の引数には以下の3種がある.

in 引数

手続きへの入力となる引数.値は変更されない.

out 引数

手続きからの戻り値が格納される引数.

inout 引数

手続きへの入力となり,かつ戻り値が格納される引数.

上記の手続き split の例では,第1引数 は in 引数, 残りは out 引数である.各引数の in/out/inout の区別, および引数として認められるデータ型は手続きごとに異なる. 利用可能な組込み手続きについては5.3節を参照.

4.3. システム文

システム文は SILC サーバの動作を制御するための文であり,以下のものがある.

prefer モジュール名

指定したモジュールをモジュールリストの先頭に移動して モジュール関数の検索順序を変更する.モジュール関数の 検索については4.7節を参照.

4.4. 演算子のオペランド

演算子のオペランドには任意の式を記述できるが,オペランドとして 有効なデータ型は演算子ごとに異なる.演算子と有効なデータ型の組み合わせ を表 6表 7 に 示す.二項演算子のオペランドに関する制限は 累算代入文(4.1節)にも適用される.

表 6. 単項演算子

複素共役[a]スカラー,行ベクトル,列ベクトル,行列,3次元配列
共役転置[a][b]スカラー,行ベクトル,列ベクトル,行列
転置[b]スカラー,行ベクトル,列ベクトル,行列
符号反転スカラー,行ベクトル,列ベクトル,行列,3次元配列

[a] オペランドの精度が整数または実数の場合,演算結果はオペランドと等しい.

[b] オペランドがスカラーの場合,演算結果はオペランドと等しい.


表 7. 二項演算子

演算子左オペランド右オペランド演算結果
加算および減算スカラー スカラー スカラー
列ベクトル列ベクトル列ベクトル
行ベクトル行ベクトル行ベクトル
行列 行列 行列
3次元配列 3次元配列 3次元配列
乗算スカラー スカラー スカラー
スカラー 列ベクトル列ベクトル
スカラー 行ベクトル行ベクトル
スカラー 行列 行列
列ベクトルスカラー 列ベクトル
列ベクトル行ベクトル行列
行ベクトルスカラー 行ベクトル
行ベクトル列ベクトルスカラー[a]
行ベクトル行列 行ベクトル
行列 スカラー 行列
行列 列ベクトル列ベクトル
行列 行列 行列
3次元配列 スカラー 3次元配列
除算スカラー スカラー スカラー
行ベクトル行列 列ベクトル
行列 行列 行列
余り[b]スカラー スカラー スカラー
連立一次方程式の求解スカラー スカラー スカラー
行列 列ベクトル列ベクトル
行列 行列 行列
要素ごと乗算および要素ごと除算スカラー スカラー スカラー
列ベクトル列ベクトル列ベクトル
行ベクトル行ベクトル行ベクトル
行列 行列 行列
3次元配列 3次元配列 3次元配列

[a] 演算結果はベクトルの内積を表す.

[b] 2つのオペランドの精度は共に整数でなければならない.


4.5. 精度変換ルール

二項演算子のオペランドの精度が異なる場合,計算前に精度を変換して2つの オペランドの精度を合わせる.精度変換には以下のルールを適用する.

  • 6つの精度のあいだに以下の順序関係を定める.ここで,x → y なら ば y は x の上位精度であると言う.また,x → y かつ y → z な らば x → z である.

      SILC_LONGSILC_DOUBLESILC_DOUBLE_COMPLEX
    
          ↑               ↑                ↑
    
      SILC_INTSILC_FLOATSILC_COMPLEX
    
  • 2つのオペランドの一方が他方の上位精度ならば,後者を前者の精度に変換する.

    例えば,一方のオペランドの精度が SILC_DOUBLE, 他方が SILC_FLOAT ならば,前者は後者の上位精度なので 後者を SILC_DOUBLE に変換する.

  • どちらも他方の上位精度でなければ,双方を共通の上位精度に変換する.

    例えば,一方のオペランドの精度が SILC_DOUBLE, 他方が SILC_COMPLEX ならば,双方を共通の上位 精度 SILC_DOUBLE_COMPLEX に変換する.

4.6. 添字

代入文の左辺(変数名),および任意の式に添字を付加できる. 添字は1から始まる.添字の記法を以下に示す.

  • A[x]

    A はベクトル.

  • A[x,y]

    A は行列.

  • A[x,y,z]

    A は3次元配列.

ここで x, y, z は任意の式である.式の値はスカラー整数 または整数の列ベクトルでなければならない(それ以外の値ならば実行時 エラーとなる).

添字の式として範囲(range)を用いる場合,始点と終点の式は各々省略できる. 例えば,a を次数 n の ベクトルとすれば,a[:5]a[1:5]a[5:]A[5:n]a[:]a[1:n] は それぞれ等しい.

添字を用いることのできる文脈とその機能,および用例を以下に示す.

表 8. 添字の文脈と機能

機能文脈用例
部分参照代入文の右辺
b = a[1:5]

ベクトル a の一部(長さ5)を新しい ベクトルとして変数 b に代入する.

関数の引数・手続きの in 引数
y = f(A[1:5,1:5])

行列 A の一部(5行5列)を 関数 f への入力として渡す. A の値は不変.

制約代入代入文の左辺
A[1:5,1:5] = B

行列 A の一部を 行列 B の値で置き換える.

手続きの out 引数
p1(x, a[1:5])

ベクトル a の値を部分的に 手続き p1 で変更する.

部分参照+制約代入手続きの inout 引数
p2(A[1:5,1:5])

行列 A の一部を 手続き p2 への入力として渡して 値を変更する.


4.7. モジュール

SILC 命令記述言語における演算子,関数,および手続きは,モジュー ル関数と呼ぶラッパーを介してライブラリ関数の呼び出しに置き換えら れ実行される.モジュール関数は,いくつかのモジュールにまとめられ ている.用意されているモジュールとそれに含まれるモジュール関数の 概要を以下に示す.

  • coremodule

    行列以外のデータ型を処理するモジュール関数から成るモジュール.

  • dense

    密行列を扱うモジュール関数から成るモジュール.

  • sparse_crs

    CRS 形式の疎行列を扱うモジュール関数から成るモジュール.

  • leq_lis

    反復解法 ライブラリ Lis を呼び出すためのモジュール.

  • leq_cg

    密行列および CRS 形式の疎行列に対する CG 法を実装するモジュール.

  • leq_gs

    密行列に対する Gauss-Seidel 法を実装するモジュール.

  • leq_lu

    密行列に対する LU 分解による線形解法を実装するモジュール.

  • blasmodule

    BLAS(Basic Linear Algebra Subprograms)による行列ベクトル積などの モジュール関数を含むモジュール.

  • fftss

    高速フーリエ 変換ライブラリ FFTSS を呼び出すためのモジュール.

また,以下の実験的なモジュールがある.

  • sparse_band

    LAPACK(Linear Algebra PACKage)の Band 形式および LU 分解を 実装するモジュール.

  • sparse_jds

    疎行列用の Jagged Diagonal Storage(JDS)形式を実装するモジュール.

  • leq_smsamg

    Super Matrix Solver AMG version 3 (株式会社ヴァイナス) を呼び出す ためのモジュール.

  • leq_mp

    多倍精度反復解法ライブラリ mp_crs を呼び出すためのモジュール. このモジュールを利用するには GNU MP ライブラリが必要である.

  • linpackmodule

    Linpack ベンチマーク用のモジュール関数から成るモジュール.

SILC サーバは,数式を構成する個々の演算子,関数,および手続きに ついて上記のモジュールから適当なモジュール関数を1つ選択して実行 する.いくつかの演算子,関数,手続きには,対応するモジュール関数が 複数存在する(例えば,leq_cg,leq_gs,leq_lu の3つにはそれぞれ 連立一次方程式の求解演算子に対応するモジュール関数が含まれる). また,モジュール群は SILC サーバにおいてリスト構造で管理されている. SILC サーバは,リストの先頭から順にモジュール内のモジュール関数を 調べてゆき,最初に見つかったモジュール関数を演算に用いる.同名の 関数および手続きが複数のモジュールに定義されている場合の選択方法も 同様であり,最初に見つかったモジュール関数が用いられる.

リスト内のモジュールの順序を変更するには SILC_EXEC で prefer 文(4.3節)を用いる. prefer 文は指定されたモジュールをリストの先頭に移動する.これにより 演算子,関数,および手続きとモジュール関数の対応関係を容易に変更できる.

5. API リファレンス

5.1. C言語版クライアントルーチン

  • ヘッダファイル "client.h"

    SILC のユーザプログラムを作成する際はこのヘッダファイルを用いる.

  • silc_envelope_t 構造体

    SILC_PUT および SILC_GET の 引数として用いる構造体.授受するデータ型に応じて以下のメンバ変数を利用する.

    • 共通のメンバ変数:

      int type;

      データ型(3.3節). 以下のいずれかの値を設定する.

      SILC_SCALAR_TYPE(スカラー)
      SILC_ROW_VECTOR_TYPE(行ベクトル)
      SILC_COLUMN_VECTOR_TYPE(列ベクトル)
      SILC_MATRIX_TYPE(行列)
      SILC_CUBIC_ARRAY_TYPE(3次元配列)
      int precision;

      精度(3.3節). 以下のいずれかの値を設定する.

      SILC_INT(単精度整数)
      SILC_LONG(倍精度整数)
      SILC_FLOAT(単精度実数)
      SILC_DOUBLE(倍精度実数)
      SILC_COMPLEX(単精度複素数)
      SILC_DOUBLE_COMPLEX(倍精度複素数)
      const char *format;

      格納形式(3.4節). 行列(データ型が SILC_MATRIX_TYPE)の場合のみ, 以下の値を設定する.

      SILC_FORMAT_DENSE(密行列)
      SILC_FORMAT_CRS(CRS 形式の疎行列)
    • SILC_SCALAR_TYPEの場合:

      void *v;

      スカラー値へのポインタ(※)

    • SILC_ROW_VECTOR_TYPE, SILC_COLUMN_VECTOR_TYPEの場合:

      size_t length;

      ベクトルの長さ

      void *v;

      ベクトル(1次元配列)へのポインタ(※)

    • SILC_MATRIX_TYPESILC_FORMAT_DENSE)の場合:

      size_t m, n;

      次数

      void *v;

      行列(列優先の2次元配列)へのポインタ(※)

    • SILC_MATRIX_TYPESILC_FORMAT_CRS)の場合:

      size_t m, n;

      次数

      size_t nnz;

      非零要素数

      void *v;

      非零要素の配列へのポインタ(※)

      int *row;

      行ポインタの配列へのポインタ(※)

      int *index;

      列インデックスの配列へのポインタ(※)

      なお,rowindex の 要素は0オリジンで表す.

    • SILC_CUBIC_ARRAY_TYPE の場合:

      size_t l, m, n;

      各次元の次数

      void *v;

      3次元配列へのポインタ(※)

    SILC_GET の場合は※印のメンバ変数のみ設定する. SILC_PUT の場合はすべて設定する.

以下の関数はいずれも正常終了なら 0,エラーなら −1 を返す.

  • int SILC_INIT(void);

    SILC サーバへの接続を確立する.ユーザプログラムの冒頭(サーバを 利用し始める箇所)で呼び出す.

  • int SILC_FINALIZE(void);

    SILC サーバへの接続を終了する.ユーザプログラムの最後(サーバの 利用を終える箇所)で呼び出す.

  • int SILC_EXEC(const char *expr);

    サーバに計算を指示する.expr には SILC の命令記述 言語(4節)で 記述したプログラムを文字列で与える.

  • int SILC_PUT(const char *name, silc_envelope_t *envelope);

    データに名前をつけて SILC サーバに預ける.name には データの名前を文字列で与える.envelope には,送信する データに関する情報を設定した silc_envelope_t 構造体への ポインタを与える.

  • int SILC_GET(silc_envelope_t *envelope, const char *name);

    名前を指定して SILC サーバからデータを受け取る. envelope には silc_envelope_t 構造体 へのポインタを与える.name には受信するデータの 名前を文字列で与える.

    受信データの格納領域を指定する方法には次の2つがある.

    1. ユーザが事前に必要なデータ領域を確保する

      silc_envelope_t 構造体の メンバ v(および CRS 形式の行列の場合は メンバ rowindex)に 受信データの格納領域へのポインタを設定 して SILC_GET を呼び出すと, その領域に受信データが格納される.

    2. 必要なサイズの領域を SILC_GET に 自動的に確保させる

      silc_envelope_t 構造体の メンバ vNULL を 代入して SILC_GET を呼び出すと, 必要なサイズの領域が自動的に確保される.データが 不要になったら,ユーザは v が 指す領域(および CRS 形式の行列の場合は メンバ rowindex が指す 領域)を free 関数で開放しなければならない.

5.2. Fortran 版クライアントルーチン

  • ヘッダファイル "client.h"

    SILC のユーザプログラムを作成する際はこのヘッダファイルを用いる.

後述のクライアントルーチンに共通する引数を以下に示す.

  • INTEGER*4 precision

    精度(3.3節). 以下のいずれかの値を設定する.

    SILC_INT(単精度整数)
    SILC_LONG(倍精度整数)
    SILC_FLOAT(単精度実数)
    SILC_DOUBLE(倍精度実数)
    SILC_COMPLEX(単精度複素数)
    SILC_DOUBLE_COMPLEX(倍精度複素数)
  • INTEGER*4 status

    サブルーチンの終了コード.正常終了なら 0,エラーなら −1 を返す.

また,下記の type には次のデータ型を用いる.

INTEGER*4SILC_INT の場合)
INTEGER*8SILC_LONG の場合)
REAL*4SILC_FLOAT の場合)
REAL*8SILC_DOUBLE の場合)
COMPLEX*8SILC_COMPLEX の場合)
COMPLEX*16SILC_DOUBLE_COMPLEX の場合)
  • SILC_INIT(status)

    SILC サーバへの接続を確立する.ユーザプログラムの冒頭(サーバを 利用し始める箇所)で呼び出す.

    出力:

    INTEGER*4 status

    終了コード

  • SILC_FINALIZE(status)

    SILC サーバへの接続を終了する.ユーザプログラムの最後(サーバの 利用を終える箇所)で呼び出す.

    出力:

    INTEGER*4 status

    終了コード

  • SILC_EXEC(expr, status)

    サーバに計算を指示する.

    入力:

    CHARACTER*size expr

    命令記述言語(4節)による計算指示

    出力:

    INTEGER*4 status

    終了コード

  • SILC_PUT_SCALAR(name, value, precision, status)

    スカラー値に名前を付けて SILC サーバに預ける.

    入力:

    CHARACTER*size name

    名前

    type value

    スカラー値

    INTEGER*4 precision

    精度

    出力:

    INTEGER*4 status

    終了コード

  • SILC_PUT_ROW_VECTOR(name, value, length, precision, status)

    行ベクトルに名前を付けて SILC サーバに預ける.

    入力:

    CHARACTER*size name

    名前

    type value(length)

    ベクトルの要素の配列

    INTEGER*4 length

    ベクトルの長さ

    INTEGER*4 precision

    精度

    出力:

    INTEGER*4 status

    終了コード

  • SILC_PUT_COLUMN_VECTOR(name, value, length, precision, status)

    列ベクトルに名前を付けて SILC サーバに預ける.

    入力:

    CHARACTER*size name

    名前

    type value(length)

    ベクトルの要素の配列

    INTEGER*4 length

    ベクトルの長さ

    INTEGER*4 precision

    精度

    出力:

    INTEGER*4 status

    終了コード

  • SILC_PUT_MATRIX(name, value, m, n, precision, status)

    密行列に名前を付けて SILC サーバに預ける.

    入力:

    CHARACTER*size name

    名前

    type value(m, n)

    行列の要素の配列

    INTEGER*4 m, n

    次数

    INTEGER*4 precision

    精度

    出力:

    INTEGER*4 status

    終了コード

  • SILC_PUT_MATRIX_CRS(name, value, m, n, nnz, row, index, precision, status)

    疎行列(CRS 形式)に名前を付けて SILC サーバに預ける. rowindex の 要素は1オリジンでなければならない.

    入力:

    CHARACTER*size name

    名前

    type value(nnz)

    非零要素の配列

    INTEGER*4 m, n

    次数

    INTEGER*4 nnz

    非零要素数

    INTEGER*4 row(m+1)

    行ポインタの配列

    INTEGER*4 index(nnz)

    列インデックスの配列

    INTEGER*4 precision

    精度

    出力:

    INTEGER*4 status

    終了コード

  • SILC_PUT_CUBIC_ARRAY(name, value, l, m, n, precision, status)

    3次元配列に名前を付けて SILC サーバに預ける.

    入力:

    CHARACTER*size name

    名前

    type value(l, m, n)

    3次元配列

    INTEGER*4 l, m, n

    各次元の次数

    INTEGER*4 precision

    精度

    出力:

    INTEGER*4 status

    終了コード

  • SILC_GET_SCALAR(name, value, status)

    指定した名前のスカラー値を SILC サーバから受け取る.

    入力:

    CHARACTER*size name

    名前

    出力:

    type value

    スカラー値

    INTEGER*4 status

    終了コード

  • SILC_GET_ROW_VECTOR(name, value, status)

    指定した名前の行ベクトルを SILC サーバから受け取る. ユーザは,配列 value を用意するために予め ベクトルの長さ(length)を知って いなければならない.

    入力:

    CHARACTER*size name

    名前

    出力:

    type value(length)

    ベクトルの要素の配列

    INTEGER*4 status

    終了コード

  • SILC_GET_COLUMN_VECTOR(name, value, status)

    指定した名前の列ベクトルを SILC サーバから受け取る. ユーザは,配列 value を用意するために予め ベクトルの長さ(length)を知って いなければならない.

    入力:

    CHARACTER*size name

    名前

    出力:

    type value(length)

    ベクトルの要素の配列

    INTEGER*4 status

    終了コード

  • SILC_GET_MATRIX(name, value, status)

    指定した名前の密行列を SILC サーバから受け取る. ユーザは,配列 value を用意するために予め行列の 次数(m, n)を 知っていなければならない.

    入力:

    CHARACTER*size name

    名前

    出力:

    type value(m, n)

    行列の要素の配列

    INTEGER*4 status

    終了コード

  • SILC_GET_MATRIX_CRS(name, value, row, index, status)

    指定した名前の疎行列(CRS 形式)を SILC サーバから受け取る. ユーザは,配列 valuerow, および index を用意するために予め行列の 次数(m, n)と 非零要素数(nnz)を知っていなければならない. rowindex の要素は1オリジンで 表される.

    入力:

    CHARACTER*size name

    名前

    出力:

    type value(nnz)

    非零要素の配列

    INTEGER*4 row(m+1)

    列ポインタの配列

    INTEGER*4 index(nnz)

    行インデックスの配列

    INTEGER*4 status

    終了コード

  • SILC_GET_CUBIC_ARRAY(name, value, status)

    指定した名前の3次元配列を SILC サーバから受け取る. ユーザは,配列 value を用意するために予め3次元配列 の大きさ(l, m, n)を知っていなければならない.

    入力:

    CHARACTER*size name

    名前

    出力:

    type value(l, m, n)

    3次元配列

    INTEGER*4 status

    終了コード

5.3. 組込み関数・手続き

5.3.1. coremodule

  • スカラー dot(行ベクトル, 列ベクトル) [関数]

    行ベクトルと列ベクトルの内積を返す.

  • スカラー sqrt(スカラー) [関数]

  • ベクトル sqrt(ベクトル) [関数]

    与えられたスカラーまたはベクトルの各要素の平方根を返す.

  • スカラー norm2(ベクトル) [関数]

    与えられたベクトルの2ノルムを返す.

  • スカラー length(ベクトル) [関数]

    与えられたベクトルの長さ(要素数) を返す.

  • スカラー time() [関数]

    現在の時刻を表す倍精度実数で返す.

5.3.2. dense モジュール

  • 列ベクトル diagvec(行列) [関数]

    与えられた行列の対角要素を列ベクトルにして返す.

  • 行列 zeros(スカラー) [関数]

  • 行列 zeros(スカラー, スカラー) [関数]

    全要素が 0(倍精度)の密行列を生成して返す.引数が1つの場合は正方行列 を生成する.引数が2つの場合は第1引数が行数,第2引数が列数を表す.

  • 行列 ones(スカラー) [関数]

  • 行列 ones(スカラー, スカラー) [関数]

    全要素が 1(倍精度)の密行列を生成して返す.引数が1つの場合は正方行列 を生成する.引数が2つの場合は第1引数が行数,第2引数が列数を表す.

  • 行列 rand(スカラー) [関数]

  • 行列 rand(スカラー, スカラー) [関数]

    倍精度実数の乱数から成る密行列を生成して返す.引数が1つの場合は正方 行列を生成する.引数が2つの場合は第1引数が行数,第2引数が列数を表す. 乱数列の初期化には後述の srand 手続きを用いる.

  • 列ベクトル size(行列) [関数]

    行列の次数(行数と列数)を長さ2の列ベクトルとして返す.

  • スカラー size(行列, スカラー) [関数]

    行列の次数(行数または列数)を求める. 第2引数が 1 の場合は行数,2 の場合は列数をそれぞれ返す.

  • 行列 full(スカラー, スカラー) [関数]

    倍精度の整数行列を生成して返す.第1引数は行数,第2引数は列数を表す. 要素はすべて非零となるように選ばれる(ただし乱数ではない).

  • split(行列 IN, 行列 OUT, 行列 OUT, 行列 OUT) [手続き]

    第1引数の行列を下三角部分,対角部分,上三角部分に分割する.各部分は それぞれ第2〜4引数に指定した変数に格納される.

  • srand(スカラー IN) [手続き]

    第1引数(整数)をシードにして乱数生成器(Mersenne Twister)を初期化する.

5.3.3. sparse_crs モジュール

  • 行列 sparse(ベクトル r, ベクトル c, ベクトル v, スカラー m, スカラー n) [関数]

  • 行列 sparse(ベクトル r, ベクトル c, スカラー v, スカラー m, スカラー n) [関数]

    CRS 形式の疎行列を生成して返す.第1引数のベクトル r は行番号のリスト,第2引数のベクトル c は列番号のリストを表す.第3引数 v がベクトルの場合,rc の第 k 要素は v の第 k 要素を格納する行番号および列番号を表す.すなわち,v は行列の非零要素のリストを表す.3つの ベクトル rcv の次数は同じでなければ ならない.v がスカラーの場合は行列の すべての非零要素が同じ値になる.このとき,rc の次数は同じでなければならない. 第4引数 m は生成する行列の行数, 第5引数 n は列数を表す. 行列の精度は v の精度と同じになる.

  • 行列 zeros(スカラー) [関数]

  • 行列 zeros(スカラー, スカラー) [関数]

    全要素が 0(倍精度)の CRS 形式の疎行列を生成して返す.引数が1つの 場合は正方行列を生成する.引数が2つの場合は第1引数が行数,第2引数が 列数を表す.

  • 行列 eye(スカラー) [関数]

    指定された次数の単位行列(CRS 形式)を生成して返す.

  • 行列 diag(ベクトル) [関数]

  • 行列 diag(ベクトル, スカラー) [関数]

    対角行列を生成して返す.引数が1つの場合,与えられたベクトルの次数 を n とすると,ベクトルの各要素を対角要素と する nn 列の 疎行列(CRS 形式)を生成する.引数が2つの場合,第2引数(以下 k とする)は対角からのオフセット値を表す.k = 0 ならば引数が1つの場合と等価であり,k > 0 ならば (1, k+1) から 右下にのびる上対角,k < 0 なら ば (1-k, 1) から右下にのびる下対角に ベクトルの各要素が格納された行列を生成する.行列の次数は n+k である.

  • 列ベクトル diagvec(行列) [関数]

    与えられた行列(CRS 形式)の対角要素を列ベクトルにして返す.

  • 行列 fliplr(行列) [関数]

    与えられた行列(CRS 形式)の列を逆順に並べ替えて返す.

  • 行列 flipud(行列) [関数]

    与えられた行列(CRS 形式)の行を逆順に並べ替えて返す.

5.3.4. sparse_band モジュール

  • 行列 CRS(行列) [関数]

    与えられた行列(band storage 形式)を CRS 形式に変換して返す.

  • 行列 band(行列) [関数]

    与えられた行列(CRS 形式)を band storage 形式に変換して返す.

  • スカラー rcond(行列) [関数]

    与えられた行列(band storage 形式)の条件数の逆数を返す.

A. 改訂履歴

  • 2007年10月31日(SILC v1.3)

    • SILC サーバとユーザプログラムのコンパイル方法についての 記述を追加した.

    • API リファレンスに新しいモジュール関数を 追加した.

  • 2006年11月12日(SILC v1.2)

    • 本文書のソースファイル を DocBook XML 形式に 変更した.

    • いくつかのモジュール関数の記述を追加した.

  • 2005年11月25日(SILC v1.1)

    • 若干の修正を加えた.

  • 2005年9月20日(SILC v1.0)

    • SILC v1.0に合わせて作成.

$Id: users_ja.xml,v 1.12 2007/10/31 06:31:35 kajiyama Exp $