バージョン: | 1.3 (2007年10月31日) |
---|
本ファイルでは Win32 環境向けに作成された SILC バイナリパッケージの利 用方法を説明します. バイナリパッケージは silc-1.3-mingw32.zip とい うファイル名の ZIP 形式のアーカイブファイルの形で配布されています. こ のパッケージには, 実行可能形式の SILC サーバ, サンプルプログラム, その 他のバイナリファイルが含まれています (Windows XP SP2 での動作を確認し ています). Windows マシンが手元にあり, もっとも手間のかからない方法で SILC を試してみたい方は, 本バイナリパッケージをご利用下さい.
バイナリパッケージを展開してすべてのファイルを取り出します. 以下の 説明では取り出したファイルが C:\silc-1.3\ ディレクトリにあると 仮定します.
コマンドプロンプトを開いて (例: スタートメニューから「すべてのプロ グラム」→「アクセサリ」→「コマンドプロンプト」を選択), 次の要領で C:\silc-1.3\src\server\ をカレントディレクトリにします (各行の > 以降がユーザの入力です):
> C: > cd \silc-1.3\src\server
このディレクトリにある server.exe を実行して SILC サーバを起動 します:
> server
サーバはフォアグラウンドで起動して以下のようなデバッグ情報を表示し ます:
single thread load_modules("./modules/formats") silc_register_format("SILC:dense (column major)") silc_register_module("dense") silc_register_format("SILC:Band") silc_register_module("sparse_band") silc_register_format("SILC:CRS") silc_register_module("sparse_crs") silc_register_format("SILC:JDS") silc_register_module("sparse_jds") load_modules("./modules") silc_register_module("blasmodule") silc_register_module("coremodule") silc_register_module("leq_cg") silc_register_module("leq_gs") silc_register_module("leq_lis") silc_register_module("leq_lu") silc_register_module("linpackmodule")
別のコマンドプロンプトを開いて C:\silc-1.3\src\client\ ディレク トリをカレントディレクトリにします. このディレクトリには SILC のサ ンプルプログラムのソースファイルと実行可能形式ファイルが入っていま す:
> C: > cd \silc-1.3\src\client
続いて SILC のユーザプログラム (例えば demo3.exe) を実行します:
> demo3
このプログラムは, もう一方のコマンドプロンプトで動作している SILC サーバに接続し, サーバの提供するライブラリルーチンのひとつを用いて 連立一次方程式 Ax = b を解きます. このプログラムもデバッグ情報を表 示しながら処理を進めます. 最後に, 以下の例のように実行時間 (単位は 秒) と得られた解の残差ノルム ||b−Ax|| を表示して終了します:
0.063935s ||b-Ax|| = 3.839510e-015
実際の値は異なることがありますが, 同様の数値が得られていればプログ ラムは正しく動作しています.
同じディレクトリにある console プログラム (console.exe) を用い て対話的に計算を行なうことができます:
> console
2×2行列 A とベクトル b の積 A * b および b' * A を求める例 を以下に示します (ここで ' は転置を表します):
> A = {1, 2; 3, 4} > b = {5, 6} > x = A * b > pprint x column vector, 2 elements of int [1] = 23 [2] = 34 > x = b' * A > pprint x row vector, 2 elements of int [1] = 17 [2] = 39 >
console プログラムを終了するには Ctrl-Z を入力します. このプログラ ムの詳細については README.console.ja ファ イルをご覧下さい.
注意:.dll ファイルに関するエラーメッセージが表示されるときは以下のよ うに環境変数 PATH を設定して下さい:
> set PATH=C:\silc-1.3\src\server;%PATH%
SILC の応用プログラム (以下, ユーザプログラム) の作成方法は SILC 利用 者マニュアル に記載されています. 利用者マニュア ルでは, C 言語および Fortran で SILC のユーザプログラムを作成する方法 を説明しています.
ユーザプログラムの開発には, C と Fortran のほか, オブジェクト指向スク リプト言語 Python (http://www.python.org/) が利用できます. ただし, Python によるユーザプログラムの開発方法を述べたドキュメントはまだ用意 されていません. Python によるユーザプログラムの記述方法は C の場合とほ ぼ同様です. また, サンプルプログラムが src\client\python\ ディレク トリにあります.
C または Fortran で SILC のユーザプログラムを作るには以下のことが必要 です.
例として, Microsoft Visual Studio .NET 2003 を用いる場合と MinGW (Windows 用の GCC) を用いる場合について, 行列 A の自乗 (行列積) を計算 する C のプログラム mmul.c をコンパイルして実行するまでの手順を示 します. プログラムの内容は以下の通りです (プログラム中の関数や定数につ いては「利用者マニュアル」を参照して下さい):
#include <stdio.h> #include "client.h" int main(int argc, char *argv[]) { silc_envelope_t object; double A[4] = {1.0, 2.0, 3.0, 4.0}; double X[4]; SILC_INIT(); object.v = A; object.type = SILC_MATRIX_TYPE; object.format = SILC_FORMAT_DENSE; object.precision = SILC_DOUBLE; object.m = object.n = 2; SILC_PUT("A", &object); SILC_EXEC("X = A * A"); object.v = X; SILC_GET(&object, "X"); SILC_FINALIZE(); printf("A =\n"); printf(" %e %e\n", A[0], A[2]); printf(" %e %e\n", A[1], A[3]); printf("A * A =\n"); printf(" %e %e\n", X[0], X[2]); printf(" %e %e\n", X[1], X[3]); }
Microsoft Visual Studio .NET 2003 を用いる場合
要点は以下の2点です.
手順の詳細を以下に示します.
Microsoft Visual Studio .NET 2003 を起動して〈Visual C++ プロジェ クト〉→〈Win32 コンソールプロジェクト〉を選択し, 新しいプロジェ クトを作ります. プロジェクト名は mmul とします.
図1: プロジェクトの作成
プロジェクト作成時に以下のファイルが自動生成されます. これらは不 要なのでフォルダごと削除します.
ただし, この操作ではファイルへの参照のみが削除されます. ファイル の実体は次のステップで削除できます.
図2: 不要なファイルの削除
以下のファイルを〈マイドキュメント〉配下の Visual Studio Project\mmul\ ディレクトリに移動またはコピーします.
また, ステップ 2. で挙げた不要なファイルも削除しておきます.
図3: ファイルの追加と削除
〈プロジェクト〉→〈既存項目の追加〉を選択して, ステップ 3. で用 意した3つのファイルをプロジェクトに追加します.
図4: 既存項目の追加
〈プロジェクト〉→〈プロパティ〉を選択 (または図のボタンをクリッ ク) して以下のプロパティを設定します.
図5: プロジェクトのプロパティの設定
〈ビルド〉→〈ソリューションのビルド〉を選択してコンパイルとリン クを行います. 正常終了すれば〈マイドキュメント〉配下の Visual Studio Projects\mmul\Debug\ ディレクトリに実行可能形式ファイル mmul.exe が作成されます.
図6: プロジェクトのビルド
スタートメニューから〈アクセサリ〉→〈コマンドプロンプト〉を選択 してコマンドプロンプトを開き, SILC サーバを起動します:
> C: > cd \silc-1.3\src\server > server
さらに別のコマンドプロンプトを開いてユーザプログラムを実行します:
> C: > cd "My Documents\Visual Studio Projects\mmul\Debug" > mmul connected to kajiyama on port 1639 number of formats = 4 0: "SILC:dense (column major)" 1: "SILC:Band" 2: "SILC:CRS" 3: "SILC:JDS" Request: >A Response: 200 OK Request: :9:X = A * A Response: 200 OK Request: <X Response: 200 OK A = 1.000000e+000 3.000000e+000 2.000000e+000 4.000000e+000 A * A = 7.000000e+000 1.500000e+001 1.000000e+001 2.200000e+001 >
上記のような実行結果が得られれば正常に動作しています.
図7: SILC サーバとユーザプログラムの実行
MinGW (GCC 3.2.3) を用いる場合
MinGW (http://www.mingw.org/) は Windows 用の GCC です. 次の2つのイ ンストーラを順に実行するだけで GCC 3.2.3 一式をインストールできます.
MinGW を用いて mmul.c をコンパイルする手順は以下の通りです.
スタートメニューから〈アクセサリ〉→〈コマンドプロンプト〉を選択 してコマンドプロンプトを開き, mmul.c があるディレクトリをカレ ントディレクトリにします.
次のように gcc コマンドを実行して mmul.c をコンパイルします:
> gcc -IC:/silc-1.3/src/client -c mmul.c > gcc -LC:/silc-1.3/src/client -o mmul mmul.o -lsilc -lws2_32
-I オプションと -L オプションにはそれぞれ client.h と libsilc.a があるディレクトリを指定します. また, WinSock2 ライ ブラリをリンクするために -lws2_32 オプションが必要です.
プログラムを繰返し修正してコンパイルする場合は mmul.c と同じ ディレクトリに次のような Makefile を作成しておくと便利です:
all: mmul SILC= C:/silc-1.3 CC= gcc CFLAGS= -I$(SILC)/src/client LDFLAGS= -L$(SILC)/src/client LIBS= -lws2_32 mmul: mmul.c $(CC) $(CFLAGS) -c mmul.c $(CC) $(LDFLAGS) -o $@ mmul.o -lsilc $(LIBS)
このファイルを用いて mmul.c をコンパイルするには次のように make コマンドを実行します:
> make
もうひとつ別のコマンドプロンプトを開いて SILC サーバを起動します:
> C: > cd \silc-1.3\src\server > server
次に, 最初のコマンドプロンプトでユーザプログラムを実行します:
> mmul connected to kajiyama on port 1639 number of formats = 4 0: "SILC:dense (column major)" 1: "SILC:Band" 2: "SILC:CRS" 3: "SILC:JDS" Request: >A Response: 200 OK Request: :9:X = A * A Response: 200 OK Request: <X Response: 200 OK A = 1.000000e+000 3.000000e+000 2.000000e+000 4.000000e+000 A * A = 7.000000e+000 1.500000e+001 1.000000e+001 2.200000e+001 >
上記のような実行結果が得られれば正常に動作しています.
本ソフトウェアの著作権は SSI プロジェクトにあります. あなたは所定の利 用条件にしたがって自由に本ソフトウェアを利用できます. 本ソフトウェアは 無保証です. 本ソフトウェアの詳細な利用条件については LICENSE ファ イルをご覧下さい.
また、本パッケージには以下の著作物が含まれています. これらの著作物は当 該著作物の利用条件にしたがって利用して下さい.
src\server\libblas.dll, src\server\liblapack.dll
BLAS および LAPACK: The Netlib (http://www.netlib.org/) より.
src\server\dgefa.f, src\server\dgesl.f
LINPACK: The Netlib (http://www.netlib.org/linpack/) より.
src\lib\mt\mt19937ar.c, src\lib\mt\mt19937ar.h
疑似乱数生成器 Mersenne Twister: 原本は以下の場所から入手できます.
バグ報告, ご要望, ご意見等をお寄せ下さい. 下記の宛先までお気軽にどうぞ.
SSI プロジェクト <devel at ssisc.org>
$Id: README.win32.ja,v 1.14 2007/10/31 05:18:48 kajiyama Exp $