Comments
Description
Transcript
NAREGI Middleware SBC - NAREGI-CA
利用者ガイド NAREGI Middleware SBC (Synchronous Data Transfer Library) 2008年10月 国立情報学研究所 利用者ガイド NAREGI Middleware SBC ドキュメントリスト ◆ 管理者ガイド グループ ¾ 管理者ガイド NAREGI Middleware IS(Distributed Information Service) ¾ 管理者ガイド NAREGI Middleware IS(Distributed Information Service) - LRPSConfig - ¾ 管理者ガイド NAREGI Middleware SS(Super Scheduler) ¾ 管理者ガイド NAREGI Middleware GridVM(Grid Virtual Machine) ¾ 管理者ガイド NAREGI Middleware Portal ¾ 管理者ガイド NAREGI Middleware PSE(Problem Solving Environment) ¾ 管理者ガイド NAREGI Middleware WFT(GUI Workflow Tool) ¾ 管理者ガイド NAREGI Middleware GVS (Grid Visualization System) ¾ 管理者ガイド NAREGI Middleware DataGrid ¾ 管理者ガイド NAREGI Middleware CA(Certification Authority) ¾ 管理者ガイド NAREGI Middleware UMS(User Management Server) ¾ 管理者ガイド NAREGI Middleware Authorization Service ¾ 管理者ガイド NAREGI Middleware Renewal Service ¾ 管理者ガイド NAREGI Middleware SBC(Synchronous Data Transfer Library) ¾ 管理者ガイド NAREGI Middleware Mediator i 利用者ガイド NAREGI Middleware SBC ◆ 利用者ガイド グループ ¾ 利用者ガイド NAREGI Middleware IS(Distributed Information Service) ¾ 利用者ガイド NAREGI Middleware Portal ¾ 利用者ガイド NAREGI Middleware PSE(Problem Solving Environment) ¾ 利用者ガイド NAREGI Middleware PSE(Problem Solving Environment) - Command line Interface - ¾ 利用者ガイド NAREGI Middleware WFT(GUI Workflow Tool) ¾ プログラミングガイド NAREGI Middleware WFT(GUI Workflow Tool) ¾ 利用者ガイド NAREGI Middleware GVS(Grid Visualization System) - Client Module - ¾ 利用者ガイド NAREGI Middleware GVS(Grid Visualization System) - Parallel Visualization Module - ¾ 利用者ガイド NAREGI Middleware CA(Certification Authority) ¾ 利用者ガイド NAREGI Middleware UMS(User Management Server) ¾ 利用者ガイド NAREGI Middleware Authorization Service ¾ 利用者ガイド NAREGI Middleware Renewal Service ¾ 利用者ガイド NAREGI Middleware SBC (Synchronous Data Transfer Library) ¾ 利用者ガイド NAREGI Middleware Mediator Copyright© 2004-2008 National Institute of Informatics, Japan. All rights reserved. This file or a portion of this file is licensed under the terms of the NAREGI Public License, found at http://www.naregi.org/download/. If you redistribute this file, with or without modifications, you must include this notice in the file. ii 利用者ガイド NAREGI Middleware SBC 目次 第1章 概要 ........................................................................................................................ 1 1.1 はじめに ............................................................................................................. 1 1.2 システム階層 ...................................................................................................... 2 1.3 動作環境 ............................................................................................................. 3 1.3.1 必要なハードウェア............................................. 3 1.3.2 必要なソフトウェア............................................. 3 1.3.3 対応コンパイラ ............................................................................................. 3 第2章 同期型ファイル転送による連成プログラム構築ガイド.......................................... 5 2.1 同期型ファイル転送ライブラリの機能と特長........................... 5 2.2 同期型ファイル転送による連成プログラム実行の概要 ................... 5 2.2.1 コマンドラインからの実行........................................ 5 2.2.2 NAREGI Workflow Toolからの実行................................. 7 2.3 連成プログラムの処理フローの構築................................... 8 2.3.1 MeshプログラムへのAPIの挿入................................... 10 2.3.2 ParticleプログラムへのAPIの挿入............................... 13 2.3.3 SBC 設定ファイルの作成........................................ 15 2.3.4 実行.......................................................... 15 第3章 同期型ファイル転送ライブラリ操作ガイド ......................................................... 16 3.1.概要 ............................................................. 16 3.2 コマンドラインから起動する場合の操作手順.......................... 16 3.2.1 環境設定...................................................... 16 3.2.2 コンパイル・リンク............................................ 17 3.2.2.1 MPIを利用しないプログラムの場合........................... 17 3.2.2.2 MPIを利用するプログラムの場合............................. 17 3.2.3 SBC設定ファイルの作成......................................... 18 3.2.4 実行.......................................................... 19 3.2.4.1 通信バッファの作成........................................ 19 3.2.4.2 環境変数の設定............................................ 20 3.2.4.3 プログラムの起動.......................................... 20 3.3 Workflow Toolから起動する場合の操作手順........................... 21 3.3.1 環境設定...................................................... 21 3.3.2 コンパイル・リンク............................................ 21 3.3.2.1 MPIを利用しないプログラムの場合........................... 21 iii 利用者ガイド NAREGI Middleware SBC 3.3.2.2 MPIを利用するプログラムの場合............................. 22 3.3.3 NAREGI Workflow Toolによるワークフローの作成 .................. 22 3.3.4 実行.......................................................... 29 3.3.4.1 通信バッファの準備........................................ 29 3.3.4.2 プログラムの起動.......................................... 29 3.4 実行結果の検証.................................................... 29 3.4.1 ログファイルによる検証........................................ 29 3.4.2 デバッグ用ログ出力機能による検証方法.......................... 30 3.5 実行時ログファイル出力機能........................................ 31 3.6 実行後の手動クリーンアップ........................................ 31 3.6.1 GridMPIジョブのkill........................................... 31 3.6.2 同期型ファイル転送............................................ 31 第4章 APIリファレンス ............................................................................................. 33 4.1 起動 ............................................................. 33 4.2 MPI情報取得....................................................... 33 4.3 ファイル転送...................................................... 34 4.4 終了処理.......................................................... 37 第5章 注意事項 ............................................................................................................... 39 第6章 トラブルシューティング ...................................................................................... 40 6.1 コンパイル・リンク時 ...................................................................................... 40 6.2 実行時 ............................................................................................................... 41 iv 利用者ガイド NAREGI Middleware SBC 第1章 概要 1.1 はじめに 計算科学分野では、空間・時間スケールの異なる物理現象が複雑に絡み合ったマルチ スケール・マルチフィジックスの問題を解析するニーズが増えています。例えば、創薬シ ミュレーションでは、マクロ領域の溶媒中に存在するナノ高分子の電子構造を解析するこ とが必要です。マルチスケール・マルチフィジックスの問題は、一つの組織の所有する計 算機、シミュレーションプログラムと知識データベースなどの計算資源では解決できない ことが多いと考えられます。そこで、複数の組織に跨る計算資源を連携したグリッド計算 環境を積極的に活用し、問題の解析を効率化することが期待されています。同期型ファイ ル転送ライブラリ(Strage Based Communication , SBC)は、グリッド上で複数のシミュレ ーションプログラムを連結した連成シミュレーションを支援することを目的に開発してい ます。 連成シミュレーションでは、異なる物理モデルや計算手法のシミュレーションを連結し、 物理精度の向上と解析規模の拡大を目指します。そこでは、複数のシミュレーションを同 時に実行し、且つ、シミュレーション間で反復的にデータを交換することが必要なため、 以下の課題が挙げられます。 ① シミュレーションプログラムの改変を最小限に抑えながら、複雑なデータ交換を実現す ることが重要です。例えば、各種プログラミングスタイルの構成による並列プロセス間 のデータ交換が必要です。 ②シミュレーション単体の計算量、並びに、複数シミュレーション間のデータ転送量に応 じて、広域グリッド上の疎結合またはローカルグリッド上の密結合の連成シミュレーショ ンに対応しなければなりません。また、複数のシミュレーションは同時に実行するため、 シミュレーション間で同期を図りながらデータ転送を行う必要があります。 SBC では、これらの課題を解決すべく、グリッド上の連成シミュレーションを支援する同 期型のデータ転送機能を提供します。連成シミュレーションに必須な機能を共通ライブラ リ化することで、シミュレーションプログラムの改変を最小限に抑えた効率的な連結を実 現します。 1 利用者ガイド NAREGI Middleware SBC 1.2 システム階層 システム階層を図1に示します。超並列機(AIX)や PC クラスタ(Linux)上に同時に起動さ れたシミュレーションA,Bは SBC を通じたデータ交換により連成シミュレーションを実 現します。 連成シミュレーションを実行するホストの予約は NAREGI グリッドミドルウェアを通し て行われ、実行ホストなどの情報は NAREGI グリッドミドルウェアから収集するので、ユ ーザが指定する必要はありません。 Simulation A Simulation B SBC NFS GridFTP scp/rcp NAREGI Middleware Globus AIX ・ Linux Massive Parallel Computer ・ PC Clusters 図1 システム階層 2 利用者ガイド NAREGI Middleware SBC 1.3 動作環境 1.3.1 必要なハードウェア SBC を利用する際に、必要最小限のハードウェアを以下に示します。ただし、実行時に は、シミュレーションの計算規模に応じたメモリ容量が必要です。 [Linux 環境] ■ CPU: IA-32 ■ メモリ: 10MB 以上 ■ ハードディスク: 10MB 以上 [AIX 環境] ■ CPU: PowerPC(POWER4) ■ メモリ: 10MB 以上 ■ ハードディスク: 10MB 以上 1.3.2 必要なソフトウェア [Linux 環境] ■ OS: Linux(Centos 5,OpenSUSE 10) ■ その他: glibc2.5, GlobusToolkit 4.0.5, j2sdk 1.5 , gcc 3.2 以降 [AIX 環境] ■ OS: AIX Version5.2 ■ その他: GlobusToolkit 4.0.5, j2sdk 1.5, 1.3.3 節の AIX 用各コンパイラ 1.3.3 対応コンパイラ [Linux 環境] ■ gcc3.2 以降 ■ Intel(R) C Compiler Version 8.1 ■ Intel(R) Fortran Compiler Version 8.1 [AIX 環境] ■ IBM XL C Version 6 ■ IBM XL Fortran Version 8 release 1 ■ 日立最適化 Fortran90 01-05-/C なお、以下の場合については動作を保証いたしません。 (1) 上記コンパイラ以外のコンパイラを使用したSBCのコンパイル・リンク (2) 上記コンパイラ以外のコンパイラでコンパイルしたプログラムと SBC のリンク (3) (1)をリンクしたプログラムの実行 3 利用者ガイド NAREGI Middleware SBC (4) (2)で作成したプログラムの実行 Globus is trademarks held by the University of Chicago. AIX is trademarks of IBM Corporation in the US and other countries. Linux is a registered trademark of Linus Torvalds. NFS is a trademark of Sun Microsystems, Inc. Java is a trademark or registered trademark of Sun Microsystems, Inc. in the US and other countries. 4 利用者ガイド NAREGI Middleware SBC 第2章 2.1 同期型ファイル転送による連成プログラム構築ガイド 同期型ファイル転送ライブラリの機能と特長 SBC は以下のような機能と特徴を持っています。 ①アプリケーションごとに「通信バッファ」と呼ぶディレクトリを設け、通信バッファの URL 情報をアプリケーション間で共有することで、アプリケーションの実行中に、アプ リケーション相互の通信バッファを通じた同期的なファイル転送を双方向で行うことが できます。 ②ファイル転送のプロトコルとして、rcp/scp/GridFTP をサポートしており、ネットワーク の構成や目的に応じて、転送プロトコルを自由に選択することができます。 ③NAREGI Workflow Tool 上での利用が可能です。 2.2 同期型ファイル転送による連成プログラム実行の概要 2.2.1 コマンドラインからの実行 ユーザは SBC を使う前の従来の起動方法で各シミュレーションプログラムを起動できま す。各シミュレーションプログラムは起動時に SBC の「設定ファイル」から、通信バッフ ァの情報と、アプリケーション間の接続情報を読み込みます。各シミュレーション中でフ ァイル転送の API が呼び出されると、読み込んだ情報を元に、通信バッファを通じて同期 型ファイル転送を行います。図ではプログラムは2つですが 3 つ以上のプログラムの結合 も可能です。 5 利用者ガイド NAREGI Middleware SBC SBC configuration ・buffer info ・Transfer Protocol etc. Command Line Simulation A MPI/none-MPI Internet or Intranet Simulation B File Transfer by SBC MPI/none-MPI rcp/scp/GridFTP 図 2 コマンドラインからの実行 6 利用者ガイド NAREGI Middleware SBC 2.2.2 NAREGI Workflow Tool からの実行 ユーザは NAREGI Middleware の Co-allocation 機能を用いて各プログラムを一括起動 します。各シミュレーションプログラムのアイコンには通信バッファと接続プロトコルの 情報を設定しておきます。NAREGI Super Scheduler,NAREGI GridVM を通じて各プログ ラムが起動される際に、NAREGI Information Service に上記情報が SBC-XML という形 式で登録されます。 各シミュレーションプログラムが起動されると、SBC の初期処理 API(SBC_Init,後述)に より NAREGI Information Service から必要な SBC-XML を検索・取得します SBC のファイル転送 API は、取得した情報を元に、各シミュレーションプログラム中で通 信バッファを通じて同期型ファイル転送を行います。図ではプログラムは2つですが 3 つ 以上のプログラムの結合も可能です。 NAREGI Workflow Tool から実行する場合、同期型ファイル転送は、広域グリッド間では GridFTP、ローカルサイト内では NFS 共有ディスク上での cp によりファイル転送を行う ことが可能です。広域グリッドについては、管理ノードがグローバルアドレス、計算ノー ドはローカルサイト内のプライベートアドレスであるような構成に対応しています。広域 グリッドでの計算ノード間のファイル転送については、管理ノード上のRFTサービスを 利用して、管理ノード間で GridFTP によるファイル転送を行います。 また、実行時ログ出力機能により、SBC の実行状態をWFT上で確認することができます。 environment variables ・Transfer Protocol etc. Workflow NAREGI WFT co-allocated jobs Simulation Simulation SimulationAA A Job 1 Simulation Simulation SimulationBA A Job n Super Scheduler Information Service GridVM GridVM SBC-XML ・Global Job ID ・Allocated nodes ・Transfer Protocol etc. Internet or Intranet Simulation B File Transfer by SBC MPI/none-MPI Simulation A MPI/none-MPI rcp/scp/GridFTP 図3 NAREGI Workflow Tool からの実行 7 利用者ガイド NAREGI Middleware SBC 2.3 連成プログラムの処理フローの構築 以下では、有限差分法(FDM)と分子軌道法(MO)のプログラムの骨組みだけのプロ グラム(スケルトンプログラム)を結合した場合を例に、同期型ファイル転送による連成 プログラムの構築手順について説明します。以下では簡単のため有限差分法のプログラムを "Mesh"、分子軌道法のプログラムを"Particle"と呼びます。 Mesh Program Particle Program File Transfer by SBC SBC_init() make mesh points SBC_init() particle points SBC_Get() read particle points SBC_Put() mesh points SBC_Put() SBC_Get() Internet or Intranet read particle points read mesh points mesh data SBC_Get() SBC_Put() particle data SBC_Get() SBC_Put() read particle data read mesh data FDM calculation MO calculation SBC_Finalize() SBC_Finalize() 図4 Mesh-Particle 連成方式の構成 図において、緑色で示した処理が既存の Mesh,Particle プログラムの処理です*1 。 既存の Mesh の処理では粒子の座標とそのデータは、あらかじめファイルで与えられていたもの を使用しています。同様に、Particle の処理では、メッシュの座標とそのデータは、あらかじめファイ ルで与えられていたものを使用しています。 Mesh,Particle のそれぞれが計算で使用しているデータ、および計算で得られたデータを、ファイ ルとして実行中に交換できるようにすることで、Mesh と Particle を連成したシミュレーションを実現し ます。 粒子座標とデータ、およびメッシュ座標とそのデータのファイルを交換するために、赤で示した API を既存のプログラムに挿入します。 図において、SBC_Init,SBC_Finalize は API 内部の初期設定・終了処理を行う API です。 SBC_Put/SBC_Get はファイルの送信・受信を行う処理です。 また、連成シミュレーション全体としてある収束条件に至るまで繰り返すループを挿入します。*2 8 利用者ガイド NAREGI Middleware SBC 以上により図のような Mesh と Particle を連成したシミュレーションの処理フローが構築されます。 ここではごく簡単な例を示しましたが、一般のプログラムを連成する場合には、全体の処理フロ ーを構築する段階で、データ形式やその内容などに仕様の不整合がないかどうか充分検討しま す。 以下の章で具体的な API の挿入方法について説明します。 *1 簡単のため、メッシュ点を用いた MO の処理と、原子の座標を用いた FDM の計算処理はあ らかじめ組み込まれていると仮定しています。 *2 一般のプログラムの場合には必ずしも必要ではありません。 9 利用者ガイド NAREGI Middleware SBC 2.3.1 Mesh プログラムへの API の挿入 図 5 に Mesh プログラムのメインルーチンを示します。 処理フローと API の挿入箇所について以下に説明します。 (1) ヘッダファイルの読み込み C 言語で書かれたプログラムの場合にはヘッダファイル"SBC.h"を読み込む必要があり ます。 (2) SBC 初期化 SBC の API 内部の初期処理を行います。 コマンドラインから実行されたプログラムの場合には、SBC 設定ファイルから通信バッ ファと接続プロトコルの情報を読み取ります。また、NAREGI Workflow Tool から起動さ れた場合には、NAREGI Inofrmation Service から同様の情報を取得します。 読み取った情報を元に、SBC で結合された他のプログラム(この例の場合 Mesh)とホ スト名やプロセスの情報を交換します。引数には、このプログラムのプログラム名を設定 します。名称は任意ですが、結合するプログラム間で一意な名称を設定してください。 通常、プログラムの先頭に記述します。ただし、MPI で書かれたプログラムの場合には、 MPI_Init()関数の後に記述してください。 (3) メッシュ座標の作成とファイル出力 メッシュ座標を計算し、ファイルに出力します。 (4) 粒子座標ファイルの受信 粒子座標を Particle から受信します。受信には SBC_Get という API を使用します。 Particle が送信したファイルを引数のファイル名のファイルとして Mesh の実行ディレク トリ上に受信します(Particle が送信したファイルとファイル名が同一である必要はあり ません)。同名のファイルが同じディレクトリに既にある場合には上書きされますので、 指定する名称には充分注意してください。 (5) 粒子座標の読み込み (4)で受信したファイルから粒子座標を読み込みます。 (6) メッシュ座標ファイルの送信 メッシュ座標ファイルを Particle に送信します。送信には SBC_Put という API を使用し ます。 (7) メッシュデータの出力 FDM 計算に用いるメッシュデータをファイルに出力します。 (8) メッシュデータファイルの送信 出力したメッシュデータを Particle に送信します。 (9) 粒子データファイルの受信 Particle が計算に用いる粒子データを受信します。 (10) 粒子データの読み込み 10 利用者ガイド NAREGI Middleware SBC 粒子データを(9)で受信したファイルから読み込みます。 (11) FDM の計算 メッシュ座標、メッシュデータ、粒子座標、粒子データを入力として、FDM 法による計 算を行います。 (11) 収束フラグファイルの受信 連成シミュレーション全体が収束したかどうかは、Particle 側で判定し、判定結果の真偽 値を Particle ファイルに出力し、Mesh に送信したものを受信します。 (13) 収束フラグチェック 収束フラグをファイルから読み込み、未収束の場合には、(7)に戻り処理を繰り返します。 (14) メッシュデータのファイル出力 連成シミュレーション収束後のメッシュデータをファイルに出力します。 (15) SBC 終了処理 SBC の API 内部の終了処理を行います。通常、プログラムの終了直前に記述します。 ただし、MPI で書かれたプログラムの場合には、MPI_Finalize()関数の前に記述してくだ さい。 11 利用者ガイド NAREGI Middleware SBC #include <stdio.h> #include <stdlib.h> #include "SBC.h" (1)SBC用ヘッダファイルの読み込み int main( int argc, char **argv) { int i, n, nx, ny, nz, ngrid, np, converged; double *data, *pdata , *coord, *pcoord; FILE *fp,*fpin,*ngfp,*gfp,*pdatafp,*convfp; (2) SBC初期化 SBC_Init("MESH"); /* (1) initialize */ nx = ny = nz = 3; ngrid = nx*ny*nz; coord = (double*)malloc(sizeof(double)*ngrid*3); data = (double*)malloc(sizeof(double)*ngrid); for( i = 0 ; i < ngrid ; i++ ){ coord[i*3] = (double)( i % nx ); coord[i*3+1] = (double)( i / nx ); coord[i*3+2] = (double)( i / (nx*ny) ); } for( i = 0 ; i < ngrid ; i++ ) data[i] = (double)(100+i); /* dummy data */ (3) メッシュ座標の作成とファイル出力 if(( ngfp = fopen("m.dat","w") ) == NULL) fopen_error("m.dat"); fprintf(ngfp,"%d¥n",ngrid); for( i = 0 ; i < ngrid ; i++ ) fprintf( ngfp, "%le¥n", coord[i] ); fclose(ngfp); SBC_Get("pin.dat"); /* (2) receive particle data File */ (4) 粒子座標ファイルの受信 if(( fpin = fopen("pin.dat","r") ) == NULL) fopen_error("pin.dat"); fscanf( fpin, "%d", &np ); pcoord = (double*)malloc(sizeof(double)*np*3); for( i = 0 ; i < np*3 ; i++ ) fscanf( fpin, "%f",pcoord+i ); fclose(fpin); (5) 粒子座標の読み込み SBC_Put("m.dat"); /* (3) send mesh coordinates */ (6) メッシュ座標ファイルの送信 converged = -1; do{ (7) メッシュデータの出力 if(( gfp=fopen("mout","w") ) == NULL) fopen_error("mout"); for( i = 0 ; i < ngrid ; i++ ) fprintf( gfp , "%e¥n",data[i]); fclose(gfp); SBC_Put("mout"); /* (4) send data */ (8) メッシュデータファイルの送信 SBC_Get("pdata"); /* (5) receive data */ (9) 粒子データファイルの受信 if(( pdatafp = fopen("pdata","r") ) == NULL) fopen_error("pdata"); for( i = 0 ; i < np ; i++ ) fprintf( pdatafp , "%le¥n",pdata+i); fclose(pdatafp); (10) 粒子データの読み込み (11) FDMの計算 do_calculation( nx, ny, nz, coord, data , np, pdata ); SBC_Get("convflag"); if(( convfp = fopen("convflag","r") ) == NULL) fopen_error("convflag"); fscanf(convfp,"%d",&converged); fclose(convfp); (12) 収束フラグファイルの受信 (13) 収束フラグチェック } while( converged < 0 ); if (( fp = fopen( "mout", "w") ) == NULL ) fopen_error("mout"); for( i = 0 ; i < ngrid ; i++ ) fprintf( fp , "%d %12.5e¥n",i,data[i]); fclose(fp); free( pdata ); free( pcoord ); free( data ); free( coord ); (15) SBC終了処理 SBC_Finalize(); /* (6) finish */ } 図5 Mesh プログラム(抜粋) 12 (14) メッシュデータの出力 利用者ガイド NAREGI Middleware SBC 2.3.2 Particle プログラムへの API の挿入 図 6 に Particle プログラムのメインルーチンを示します。 処理フローと API の挿入箇所について以下に説明します。 (1) ヘッダファイルの読み込み C 言語で書かれたプログラムの場合にはヘッダファイル"SBC.h"を読み込む必要があり ます。 (2) SBC 初期化 SBC の API 内部の初期処理を行います。 (3) 粒子座標の読み込み MO の計算に用いる粒子の座標データをファイルから読み込みます。 (4) 粒子座標のファイルの送信 粒子の座標データファイルを Mesh に送信します。 (5) メッシュ座標ファイルの受信 メッシュ点の座標データファイルを Mesh から受信します。 (6) メッシュ座標の読み込み 受信したメッシュ座標ファイルからメッシュ座標を読み込みます。 (7) メッシュデータファイルの受信 メッシュデータファイルを受信します。 (8) メッシュデータの読み込み メッシュデータをメッシュデータファイルから読み込みます。 (9) 粒子データのファイル出力 粒子のデータをファイルに出力します。 (10) 粒子データファイルの送信 粒子データを Mesh に送信します。 (11) MO の計算 粒子座標、粒子データ、メッシュ座標、メッシュデータを用いた MO 法の計算を行います。 (12) 収束判定 計算の結果、連成シミュレーションが収束したかどうかを判定します。収束していない場 合は、(12)の処理後に(6)に戻り処理を繰り返します。 (13) 収束フラグファイルの送信 収束フラグ(収束判定の結果の真偽値)をファイルに出力し、Mesh に送信します。 (14) SBC 終了処理 SBC の API 内部の終了処理を行います。 13 利用者ガイド NAREGI Middleware SBC #include <stdio.h> #include <stdlib.h> #include "SBC.h" (1)SBC用ヘッダファイルの読み込み int main( int argc, char **argv) { int i, iter, nmesh, np, converged; FILE *fpin, *meshfp, *meshdatfp, *pdatafp, *convfp; double *data, *pdata, *mcoord , *pcoord; SBC_Init("PARTICLE"); /* (1) initialize */ (2) SBC初期化 if(( fpin = fopen( "p.in", "r") ) == NULL ) fopen_error( "p.in" ); fscanf(fpin,"%d",&np); pcoord = (double*)malloc(sizeof(double)*np*3); for( i = 0 ; i < np*3 ; i++ ) fscanf(fpin,"%lf",pcoord+i); fclose(fpin); pdata = (double*)malloc(sizeof(double)*np); for( i = 0 ; i < np ; i++ ) pdata[i]=(double)i; /* dummy data */ (3) 粒子座標の読み込み (4) 粒子座標ファイルの送信 SBC_Put("p.in"); /* (2) send particle coordinates File */ (5) メッシュ座標ファイルの受信 SBC_Get( "mcoord"); /* (3) receive mesh coordinates */ if(( meshfp = fopen("mcoord","r") ) == NULL ) fopen_error( "mcoord" ); fscanf( meshfp , "%d",&nmesh); mcoord = (double*)malloc(sizeof(double)*nmesh*3); data = (double*)malloc(sizeof(double)*nmesh); for( i = 0 ; i < nmesh*3 ; i++ ) fscanf( meshfp, "%le", mcoord+i ); fclose( meshfp ); iter = 0; converged = -1; do{ SBC_Get( "mesh.dat"); /* (4) recieve mesh data */ (6) メッシュ座標の読み込み (7) メッシュデータファイルの受信 if(( meshdatfp = fopen("mesh.dat","r")) == NULL ) fopen_error( "mesh.dat" ); for ( i = 0 ; i < nmesh ; i++ ) fscanf( meshdatfp , "%le", data+i ); fclose( meshdatfp ); (9) 粒子データのファイル出力 if(( pdatafp = fopen( "p.out", "w")) == NULL ) fopen_error( "p.out" ); for ( i = 0 ; i < np ; i++ ) fprintf( pdatafp , "%3d %12.5e¥n", i, pdata[i] ); fclose( pdatafp ); SBC_Put( "p.out" ); /* (5) send data */ (8) メッシュデータの読み込み (10) 粒子データファイルの送信 do_particle_calculation( iter, nmesh, mcoord, data , np, pdata ); (11) MOの計算 converged = check_convergence( np, pdata ); (12) 収束判定 if(( convfp = fopen( "conv.out", "w")) == NULL ) fopen_error( "conv.out" ); fprintf( convfp , "%d¥n", converged ); fclose( convfp ); (13) 収束フラグファイルの送信 SBC_Put( "conv.out" ); iter++; } while( converged < 0 ); free( pcoord ); free( data ); free( pdata ); free( mcoord ); SBC_Finalize(); /* (6) finish */ (14) SBC終了処理 } 図6 Particle プログラム(抜粋) 14 利用者ガイド NAREGI Middleware SBC 2.3.3 SBC 設定ファイルの作成 コマンドラインからプログラムを起動するには SBC 設定ファイルが必要です。設定ファ イルにはプログラムの使用する通信バッファとプログラム間の接続関係を設定します。図 7 に Mesh-Particle 連成シミュレーションの場合の例を示します。詳細な設定方法については、 第3章を参照してください。 [BUFFER] MESH file://pbg2010//home/demo/particle_work PARTICLE file://sig0001//home/demo/mesh_work [/BUFFER] [CONNECTION] PARTICLE MESH LAN_CLUSTER [/CONNECTION] 図7 SBC 設定ファイルの例 [BUFFER]~[/BUFFER](1~4 行目) MESH という名前のプログラムを pbg2010.naregi.org というホストで起動し、そのホスト の home/demo/particle_work というディレクトリを MESH プログラムの通信バッファと します。 PARTICLE という名前のプログラムを sig0001.naregi.org というホストで起動し、そのホ ストの/home//demo/mesh_work というディレクトリを PARTICLE プログラムの通信バッ ファとします。 [CONNECTION]~[/CONNECTION] (5~7 行目) PARTICLE と MESH 間でファイル転送が可能で、rsh/ssh(LAN_CLUSTER)で転送します。 2.3.4 実行 作成した連成アプリケーションの実行方法については、第3章で説明します。 15 利用者ガイド NAREGI Middleware SBC 第3章 同期型ファイル転送ライブラリ操作ガイド 3.1.概要 同期型ファイル転送の API を挿入して作成した連成シミュレーションプログラムを実際に 動作させるために必要な操作手順について以下に説明します。 【注意事項】 連成シミュレーションプログラムの起動方法として、コマンドラインから起 動する方法と、NAREGI Workflow Tool から起動する方法があります。起動方法に応じて プログラムにリンクするライブラリおよびリンク時のオプションが異なりますので、コマ ンドラインから起動していたプログラムを NAREGI Workflow Tool から起動するには、操 作手順に従って、再度リンクを行ってください。逆に、NAREGI Workflow Tool で起動し ていたプログラムをコマンドラインで起動する場合にも、再度リンクする必要があります。 3.2 コマンドラインから起動する場合の操作手順 3.2.1 環境設定 プログラムのコンパイル・リンク・実行を行う全てのホストに、以下の環境変数を設定 してください。(1)~(3)の各環境変数の値は、そのホストに SBC をインストールした管理 者から提供を受けてください。 (1) SBC_ROOT SBCをインストールしたディレクトリを指定します。 (2) GLOBUS_LOCATION Globusがインストールされているディレクトリを指定します。 (3) MPIROOT (オプション) GridMPIがインストールされているディレクトリを指定します。GridMPIを利用するプ ロ グ ラ ム が あ る 場 合 は 設 定 し て く だ さ い 。 設 定 し た 場 合 は PATH 変 数 の 先 頭 に $MPIROOT/binを追加します。 (4) SBCCONFFILE (オプション) SBC の設定ファイルのファイル名をプログラムの実行ディレクトリからの相対パスま たは絶対パスで指定します。指定が無い場合は、プログラムの実行ディレクトリにある "sbc.conf"という名前のファイルが読み込まれます。 【重要】rsh/ssh などのリモートシェル実行の場合にもリモートホスト上で上記環境変数が 設定されている必要があります。 16 利用者ガイド NAREGI Middleware SBC 3.2.2 コンパイル・リンク 3.2.2.1 MPI を利用しないプログラムの場合 (1)コンパイル C 言語のプログラムをコンパイルする場合には以下のオプションを追加指定してくだ さい。 -I$SBC_ROOT/inlude 例: $ cc -c md.c -I$SBC_ROOT/include (2)リンク リンク時には以下のオプションを追加指定してください。 -L$SBC_ROOT/lib -lsbcmpi Intel(R) Fortran の場合はさらに以下のオプションを追加してください。(太字部 分は Linux や gcc のバージョンによって異なる場合があります) -L/usr/lib/gcc-lib/i386-redhat-linux/3.2/ -lg2c 例: $ cc -o md md.o -L$SBC_ROOT/lib -lsbc (C 言語) $ f77 -o mo mo.o -L$SBC_ROOT/lib -lsbc (Fortran) $ ifort -o mo mo.o -L$SBC_ROOT/lib -lsbc -L/usr/lib/gcc-lib/i386 -redhat-linux/3.2/ -lg2c(Intel(R) Fortran) 3.2.2.2 MPI を利用するプログラムの場合 (1)コンパイル C 言語のプログラムをコンパイルする場合には以下のオプションを追加指定してくだ さい。 -I$SBC_ROOT/inlude 例: $ mpicc -c md.c -I$SBC_ROOT/include (2)リンク リンク時には以下のオプションを指定してください。 -L$SBC_ROOT/lib -lsbcmpi mpif77 が内部で Intel(R) Fortran を使用している場合はさらに以下のオプショ ンを追加してください。 (太字部分は Linux や gcc のバージョンによって異なる場合が あります) 17 利用者ガイド NAREGI Middleware SBC -L/usr/lib/gcc-lib/i386-redhat-linux/3.2/ -lg2c 例: $ mpicc -o md md.o -L$SBC_ROOT/lib -lsbcmpi $ mpif77 -c md.c -I$SBC_ROOT/include (C 言語) (Fortran) $ mpif77 -c md.c -I$SBC_ROOT/include -L/usr/lib/gcc-lib/i386-re dhat-linux/3.2/ -lg2c(Intel(R) Fortran) 3.2.3 SBC 設定ファイルの作成 設定ファイルは通信バッファを設定する[BUFFER]セクションと、アプリ間の接続関係と 接続方法を指定する[CONNECTION]セクションの2つのセクションから構成されます。 (1)[BUFFER]セクション [BUFFER]~[/BUFFER]の間に、SBC_Init に指定するアプリケーション名と、通信バッ ファ用ディレクトリを URL 形式で指定します。 アプリケーションごとに1行ずつ指定します。 APP file://host1/path/wk SBC_Initに指定する アプリ名 ホスト名*1 通信バッファのパス*2 *1) ユーザ名が異なるホストには user@host のような記述が可能です。 *2) 絶対パスを指定します。 (2)[CONNECTION] セクション [CONNECTION]~[/CONNECTION]の間に、アプリ間の接続関係と接続方法を指定しま す。1つの接続ごとに1行ずつ指定します。 APP1 APP2 接続する2つのアプリ (順序はどちらが先でも良 い) GRID_GT 接続(実際のファイル転送)方法。GridFTPの場合GRID_GT, リモートシェルの場合、LAN_CLUSTERとする。 接続方法は"cp"の場合"LAN_NFS"を指定します。 [記述例] 18 利用者ガイド NAREGI Middleware SBC [BUFFER] MC file://pfg2057.naregi.org//home/wp6/wp6skubo/ims_skel_rel/ex/rep/mc RISM file://sig0001.naregi.org//home/wp6/wp6skubo/ims_skel_rel/ex/rep/rism G1 file://pfg2058.naregi.org//home/wp6/wp6skubo/ims_skel_rel/ex/rep/g1 G2 file://sig0001.naregi.org//home/wp6/wp6skubo/ims_skel_rel/ex/rep/g2 [/BUFFER] [CONNECTION] MC G1 LAN_CLUSTER G1 RISM GRID_GT RISM G2 LAN_CLUSTER G2 MC GRID_GT [/CONNECTION] 図 8 設定ファイルの記述例 【説明】 [BUFFER]~[/BUFFER](1~6 行目) MC は pfg2057.naregi.org と い う ホ ス ト で 起 動 し 、 そ の ホ ス ト の /home/wp6/wp6skubo/ims_skel_rel/ex/rep/mc というディレクトリを MC プログラムの通 信バッファとします。 RISM は sig0001.naregi.org と い う ホ ス ト で 起 動 し 、 そ の ホ ス ト の /home/wp6/wp6skubo/ims_skel_rel/ex/rep/rism というディレクトリを RISM プログラム の通信バッファとします。 G1,G2 も同様です。 [CONNECTION]~[/CONNECTION] (7~12 行目) MC,G1,G2,RISM という4つのアプリケーションを、MC-G1-RISM-G2-MC のように、ル ープ状に接続しています。 接続プロトコルは、G1 と RISM 間および G2 と MC 間が GridFTP(GRID_GT)、MC と G1 間および RISM と G2 間が rsh/ssh(LAN_CLUSTER)としています。 3.2.4 実行 3.2.4.1 通信バッファの作成 【重要】通信バッファは、必ず管理ノードとその配下の計算ノード間でNFS共有されて いるディレクトリを指定してください。また、そのディレクトリは、管理ノードとその配 下の計算ノード間で、同じパス名でアクセスできる必要があります。 もし通信バッファとして指定したディレクトリが存在しない場合には、作成しておきます。 もしすでに存在する場合には、作業用の一時ファイル(アンダースコア'_'で始まるファイル) が存在しないことを確認します。もし存在する場合には、前回実行した際のプロセスが残 っている可能性があります。それらのプロセスをすべて kill してから、作業用一時ファイ ルをすべて消します。(必ず kill してから消すように注意してください。) 19 利用者ガイド NAREGI Middleware SBC 3.2.4.2 環境変数の設定 LAN_CLUSTER を指定した場合は、デフォルトでは rcp が使用されます。ssh を使用する 場合には、環境変数 SBC_REMOTE_SHELL を以下のように設定してください。 SBC_REMOTE_SHELL=ssh 3.2.4.3 プログラムの起動 同期型ファイル転送ライブラリをリンクした場合においても、各プログラムの実行方法に 変更はありません。従来どおりの起動方法で、実行してください。 20 利用者ガイド NAREGI Middleware SBC 3.3 Workflow Tool から起動する場合の操作手順 3.3.1 環境設定 プログラムのコンパイル・リンク・実行を行う全てのホストに、以下の環境変数を設定 してください。ホスト毎の各環境変数の値は、そのホストに SBC をインストールした管理 者から提供を受けてください。 (1) SBC_ROOT SBCをインストールしたディレクトリを指定します。 (2) GLOBUS_LOCATION Globusがインストールされているディレクトリを指定します。 (3) JAVA_HOME JAVAがインストールされているディレクトリを指定します。AIXで32ビットモードのプ ログラムをコンパイル・リンクする場合には、32ビット用のJAVAがインストールされて いるディレクトリを指定してください。64ビット用のプログラムをコンパイル・リンクす る場合には、64ビット用のJAVAがインストールされているディレクトリを指定してくだ さい。 (4) MPIROOT (オプション) GridMPIがインストールされているディレクトリを指定します。GridMPIを利用するプロ グ ラ ム が あ る 場 合 は 設 定 し て く だ さ い 。 設 定 し た 場 合 は PATH 変 数 の 先 頭 に $MPIROOT/binを追加します。 3.3.2 コンパイル・リンク 3.3.2.1 MPI を利用しないプログラムの場合 (1)コンパイル コンパイル時には以下のオプションを指定してください。 -I$SBC_ROOT/inlude 例: $ cc -c md.c -I$SBC_ROOT/include (2)リンク リンク時には以下のオプションを指定してください。 Linuxの場合: -L$SBC_ROOT/lib -lsbcg -L$JAVA_HOME/jre/lib/i386/client -ljvm -W l,-rpath,$JAVA_HOME/jre/lib/i386/client:$JAVA_HOME/jre/lib/i386 Intel(R) Fortran の場合はさらに以下のオプションを追加してください。(太字部 分は Linux や gcc のバージョンによって異なる場合があります) -L/usr/lib/gcc-lib/i386-redhat-linux/3.2/ -lg2c 21 利用者ガイド NAREGI Middleware SBC AIX の場合: -L$SBC_ROOT/lib -lsbcg -L$JAVA_HOME/jre/bin/classic -ljvm -bM:UR 【日立最適化 Fortran90 を使用する場合】 -L$SBC_ROOT/lib -lsbcg -L$JAVA_HOME/jre/bin/classic -Wl,'-bM:UR' 3.3.2.2 MPI を利用するプログラムの場合 (1)コンパイル コンパイル時には以下のオプションを指定してください。 -I$SBC_ROOT/inlude 例: $ mpicc -c md.c -I$SBC_ROOT/include (2)リンク リンク時には以下のオプションを指定してください。 Linux の場合: -L$SBC_ROOT/lib -lsbcmpig -L$JAVA_HOME/jre/lib/i386/client -ljvm -Wl,-rpath,$JAVA_HOME/jre/lib/i386/client:$JAVA_HOME/jre/lib/i38 6 MPI が内部で Intel(R) Fortran を使用している場合はさらに以下のオプションを 追加してください。 (太字部分は Linux や gcc のバージョンによって異なる場合があり ます) -L/usr/lib/gcc-lib/i386-redhat-linux/3.2/ -lg2c AIX の場合: -L$SBC_ROOT/lib -lsbcmpig -L$JAVA_HOME/jre/bin/classic -ljvm -bM:UR 【日立最適化 Fortran90 を使用する場合】 -L$SBC_ROOT/lib -lsbcmpig -L$JAVA_HOME/jre/bin/classic -ljvm -Wl,'-bM:UR' 3.3.3 NAREGI Workflow Tool によるワークフローの作成 連成プログラムは NAREGI ミドルウェアの Co-allocation 機能を利用して同時起動する 必 要 が あ り ま す 。 Co-alocation 機 能 を 利 用 す る に は 、 NAREGI Workflow Tool の Co-Allocation アイコンを使用します。 22 利用者ガイド NAREGI Middleware SBC 以下では SBC を使用した連成シミュレーション用の Co-Allocation アイコンを含むワーク フローの一般的な作成手順を示します。以下で用いる NAREGI Workflow Tool の用語や一 般的な使用法については NAREGI Workflow Tool のマニュアルを参照してください。 【手順 1】Co-Allocation アイコンの作成 まず Co-Allocation アイコンを新規に作成します。 【手順2】連成する各プログラムアイコンの作成 (1) MPI を使わないプログラムの場合 Program アイコンを手順 1 で作成した Coallocation アイコン中に作成します。 Program アイコンに通常の設定の他、SBC 用に以下の環境変数を設定します。 ① DEXAPPNAME SBC_Init の引数に指定したアプリケーション名を設定します。 【注意】もし違う名前を指定した場合、エラーにはならず、ここで設定した値がアプリケ ーション名になります。その場合、SBC_Init の引数の値は無視されます。 例:DEXAPPNAME=PARTICLE ② SBCBUFFER 通信バッファの情報を設定します。 形式: A executable_A buffer_A, B executable_B buffer_B {, X executable_X buffer_X }* 但し、buffer_A はアプリAの通信バッファで、Aを起動したホストの実行ディレクトリか らの相対パスです。また、executable_A はアプリAの executable 名(パスは含まない)で す。 (例) SBCBUFFER= PARTICLE particle ex/work , MESH mesh exam/work ③ SBCCONNECTION 変数名: SBCCONNECTION 形式: A B [protocol] {, X Y [protocol]}* 但し、A,B,X,Y は SBCBUFFER で設定したアプリケーション名です。 23 利用者ガイド NAREGI Middleware SBC また、protocol は通信プロトコルで、"GRID" と "LAN" が設定でき、省略した場合は GRID がデフォルトで選択されます。 GRID を選択した場合には、GridFTP が通信プロトコルとして使用されます。 LAN を選択した場合には、cp が通信プロトコルとして使用されます。 ただし LAN を選択した場合には、アプリ A,B の各通信バッファディレクトリがA,Bの実 行時に相互に直接参照可能(cp コマンドによるファイルのコピーが可能)である必要があ ります。 (例) SBCCONNECTION= PARTICLE MESH GRID (2) MPI を使うプログラムの場合 MPI アイコンを作成し、その中にプログラムアイコンを作成します。 MPI アイコンに(2-1)の①~③と同様の環境変数を設定します。 作成後、(1)の Coallocation アイコンに作成した MPI アイコンをコピー&ペーストしま す。 【手順3】全体ワークフローの作成 手順1で作成した Coallocation アイコンを含む全体のワークフローを作成します。 【作成例】 2章で説明した Mesh と Particle の連成プログラムを用いた場合の作成例について説明し ます。 (1) Coallocation アイコン中に Mesh と Particle のプログラムのアイコンをそれぞれ作成し た状態です。 24 利用者ガイド NAREGI Middleware SBC 図9 Coallocation アイコン上に作成した Mesh と Particle のプログラムアイコン (2) Mesh プログラムアイコンのプロパティ Mesh プログラムアイコンのプロパティの設定例を図11に示します。 25 利用者ガイド NAREGI Middleware SBC ① ② ③ ④ ⑤ ⑥ ⑦ ⑧ ⑨ 図10 メッシュのプログラムアイコンのプロパティ ① Mesh プログラムの実行バイナリへの Working Directory からのパスを指定しています。 ② プログラムの標準出力を mesh.out というファイルに設定しています。 ③ プログラムのエラー出力を mesh.err というファイルに設定しています。 ④ プログラムの実行ディレクトリへのパスを指定しています。 ⑤ 環境変数 DEXAPPNAME として、SBC_Init の引数"MESH"を指定しています。 ⑥ 環境変数 SBCBUFFER を設定しています。Mesh の実行バイナリは"mesh"で、通信バ ッファは"mbuf"としています。また、Particle の実行バイナリは"particle"で、通信バッフ ァは"pbuf"としています。 ⑦ 環境変数 SBCCONNECTION を設定しています。Mesh と Particle 間の通信プロトコ ルは GRID としています。 ⑧ プログラムの実行時間の最大値として、500 秒を設定しています。 ⑨ プログラムを実行する OS として、AIX を選択しています。 26 利用者ガイド NAREGI Middleware SBC (3) Particle プログラムアイコンのプロパティ Particle プログラムアイコンのプロパティの設定例を図11に示します。 ① ② ③ ④ ⑤ ⑥ ⑦ ⑧ ⑨ 図11 Particle のプログラムアイコンのプロパティ ① Particle プログラムの実行バイナリへの Working Directory からのパスを指定していま す。 ② プログラムの標準出力を particle.out というファイルに設定しています。 ③ プログラムのエラー出力を particle.err というファイルに設定しています。 ④ プログラムの実行ディレクトリへのパスを指定しています。 ⑤ 環境変数 DEXAPPNAME として、SBC_Init の引数"PARTICLE"を指定しています。 ⑥ 環境変数 SBCBUFFER を設定しています。内容は、Mesh のプログラムアイコンと同 一です。 ⑦ 環境変数 SBCCONNECTION を設定しています。内容は、Mesh のプログラムアイコ 27 利用者ガイド NAREGI Middleware SBC ンと同一です。 ⑧ プログラムの実行時間の最大値として、500 秒を設定しています。 ⑨ プログラムを実行する OS として、Linux を選択しています。 28 利用者ガイド NAREGI Middleware SBC 3.3.4 実行 3.3.4.1 通信バッファの準備 もし通信バッファとして指定したディレクトリが存在しない場合には、作成しておきます。 もしすでに存在する場合には、作業用の一時ファイル(アンダースコア'_'で始まるファイル) が存在しないことを確認します。もし存在する場合には、前回実行した際のプロセスが残 っている可能性があります。それらのプロセスをすべて kill してから、作業用一時ファイ ルをすべて消します。(必ず kill してから消すように注意してください。) 3.3.4.2 プログラムの起動 作成したワークフローアイコンに対して NAREGI Workflow Tool のメニューから"Run"を 選択し、全体の workflow を実行します。 3.4 実行結果の検証 3.4.1 ログファイルによる検証 各プロセスの通信の進行状況は、各通信バッファ用ディレクトリに出力される_sbclog*フ ァイルにより確認できます。 プロセスの実行状況は、ps コマンド等、通常の unix コマンドで確認します。 【_sbclog*ファイルのフォーマット】 host=pfg2057.naregi.org pid=13634 MO(0) <- MD(0) recv start time=1114166150.297477 type=INT len=1 MO(0) <- MD(0) recv end time=1114166150.733874 type=INT len=1 MO(0) <- MD(0) recv start time=1114166150.733924 type=BYTE len=20 MO(0) <- MD(0) recv end time=1114166151.164545 type=BYTE len=20 MO(0) -> MD(0) send start time=1114166151.164594 type=INT len=1 MO(0) -> MD(0) send end time=1114166151.603754 type=INT len=1 MO(0) -> MD(0) send start time=1114166151.603832 type=BYTE len=20 MO(0) -> MD(0) send end time=1114166152.033095 type=BYTE len=20 MO(0) SBC ready time=1114166152.033186 MO(0) <- MD(0) recv start time=1114166152.035638 type=FILE name=coord.inp MO(0) <- MD(0) recv end time=1114166152.367402 type=FILE name=coord.inp MO(0) -> MD(0) send start time=1114166152.373976 type=FILE name=ene.out MO(0) -> MD(0) send end time=1114166152.741894 type=FILE name=ene.out MO(0) <- MD(0) recv start time=1114166152.742062 type=FILE name=work.inp MO(0) <- MD(0) recv end time=1114166153.078241 type=FILE name=work.inp MO(0) SBC finish time=1114166153.080165 ①起動ホスト名とプロセスID ②データ送受信: 自プログラム名(ランク)、 送受信の方向、相手のプログラム名(ランク) 、 send/recvとその開始/終了、その時のタイムスタンプ、 送受信のデータタイプ、データの長さもしくはファイル名 ③初期処理の完了 ④終了処理の完了 ①当該プロセスの起動ホスト名と、プロセス ID が先頭行に出力されます。 ②データの送受信の開始と終了時に、タイムスタンプと、データの形式、長さまたはファ イル名が出力されます。 ③初期処理が完了した際に、'SBC ready'というメッセージとともに、タイムスタンプが出 力されます。 ④終了処理が完了した際に、'SBC finish'というメッセージとともに、タイムスタンプが出 力されます。このメッセージにより SBC の通信は正常に終了したことが確認できます。 29 利用者ガイド NAREGI Middleware SBC その他、SBC の通信にエラーが発生した際にも、_sbclog*ファイルにエラーメッセージが 出力されます。 3.4.2 デバッグ用ログ出力機能による検証方法 連成シミュレーションプロセスの実行時に各プロセスからデバッグ用ログを端末に出力す ることができます。この機能を用いて実行状態を検証することが出来ます。 (1)ログ出力の設定 以下の2つの方法があります。 (1-1) DEX_LOGOPTION という環境変数に記述します。記述方法は後述します。 (1-2) ログ出力設定ファイルの作成 連成シミュレーションの各プロセス起動されるホストのホームディレクトリに $HOME/.dex_logoption というファイルを作成することで、ファイルの設定内容に従って各プロセスの標準エラー 出力もしくは特定のファイルに各種実行時ログが出力されます。 NAREGI Mediator で同一の環境変数・設定ファイルを使用しますので、既存の設定がある 場合には、後述するオプションを追記して利用してください。 【注意事項】 30 利用者ガイド NAREGI Middleware SBC 通信頻度、並列プロセス数、送受信データの規模が大きい場合は大量のログが短時間に出 力される場合があります。本機能を利用される場合は充分ご注意ください。 (2)設定方法 アルファベットの'S'を設定または追記します。 以下に記述例を示します。 (例).dex_logoption(すでに'ABCDFJ'が記入されていた場合) ABCDFJS 3.5 実行時ログファイル出力機能 環境変数 SBC_OUTPUT_ELOGS を 1 に設定することにより、実行時のログや警告・エ ラーメッセージを標準エラー出力ではなく実行時ログファイルに出力することができます (ただし、エラーメッセージは標準エラー出力にも出力されます)。実行時ログファイルは、 各アプリの実行ディレクトリに「sbc_elog.アプリ ID.ランク値」というファイル名で、各プ ロセス毎に出力されます。 実行時ログファイルは、NAREGI Workflow Tool の"Download"機能によって、実行ディ レクトリからダウンロードし、内容を確認することができます。 実行時ログファイルの出力先ディレクトリは、環境変数 SBC_ELOGDIR で変更すること ができます。相対パスで指定した場合は実行ディレクトリからの相対パスになります。 3.6 実行後の手動クリーンアップ 連成アプリケーションの実行後は、以下の事項の確認と、必要であればクリーンアップ作 業を行ってください。 3.6.1 GridMPI ジョブの kill GridMPI より起動したプロセスが残っていないか、プロセスを起動した各ホストについ て確認し、残っていた場合は必ずすべて kill しておきます。 特に、いずれかのプロセスが異常終了した場合には、並列で起動された他のプロセスが残 ってしまうことがあるので注意が必要です。 3.6.2 同期型ファイル転送 (1)プロセスが正常終了した場合 _sbclog*ファイルは消されずに残るので、必要が無い場合は削除してください。 (2)プロセスが異常終了した場合 31 利用者ガイド NAREGI Middleware SBC 通信バッファに_(アンダースコア)で始まるファイル名で通信用の一時ファイルおよび一 時ディレクトリが残る場合があるので、各通信バッファディレクトリから、それらを削除 してください。また、ファイル転送のためにSBCにより起動されたプロセスが残る場合 があるので、それらもすべて kill しておきます。 【重要】以前に実行したプロセスが残ったままアプリケーションを再度起動した場合、再 起動したプロセスの通信に乱れが生じる場合があります。 32 利用者ガイド NAREGI Middleware SBC 第4章 4.1 APIリファレンス 起動 (1)SBC_Init [機能] 初期化 [事前条件] ・MPI プログラム内で使用する場合は、MPI_Init が呼び出されていること。 [事後状態] ・各プロセスごとにログファイルが SBC ファイルで指定されたディレクトリに生成される。 [呼び出し形式] FORTRAN: call SBC_Init( appname ) C 言語: int SBC_Init( char* appname ) [引数] 表 1 SBC_Init の引数 引数名 型 I/O サイズ 内容 appname character* I 1 各アプリケーションの固有名(SBC ファイル内で定義さ れている名前) [戻り値] 0 = 正常終了 [説明] 初期化処理を行います。 [注意事項] ・DEXAPPNAME という環境変数が設定されている場合、引数 appname のかわりに DEXAPPNAME の値がアプリケーション名として使用されます。 ・MPI プログラム内で使用する場合には全ての rank のプロセスにおいて本 API を呼び出し てください。 4.2 MPI 情報取得 (1)dex_get_localcomm [機能] 自アプリのローカルコミュニケータを取得する。 [事前条件] ・MPI プログラム内で使用すること。 33 利用者ガイド NAREGI Middleware SBC ・SBC_Init が呼び出されていること。 [事後状態] 本呼び出しによる状態変化はない。 [呼び出し形式] FORTRAN: call dex_get_localcomm( comm ) C 言語: int dex_get_localcomm( MPI_Comm* comm ) [引数] 表2 dex_get_localcomm の引数 引数名 型 I/O サイズ 内容 comm integer O 1 同じアプリごとに split されたコミュニケータのうち、自プ (FORTRAN) ロセスの属するコミュニケータ MPI_Comm* (C) [戻り値] 0 = 正常終了 [説明] SBC_Init で同じ名前が指定されたプロセスごとに MPI_Comm_split されたアプリ毎のロ ーカルコミュニケータのうち、自プロセスの属するコミュニケータを取得します。 4.3 ファイル転送 (1)SBC_Put [機能] 指定したファイルを他アプリに送る。 [事前条件] ・SBC_Init が呼び出されていること。 ・送付するファイルが存在し、かつ、クローズされた状態であること。 [事後状態] ・送られたファイルは、消されずに残る。 [呼び出し形式] FORTRAN: call SBC_Put( fname ) C 言語: int SBC_Put( char* fname ) [引数] 34 利用者ガイド NAREGI Middleware SBC 表 3 SBC_Put の引数 引数名 型 I/O サイズ 内容 fname character* I 1 送信するファイル名を指定する。送信可能な送信先が 複数ある場合は、ファイル名の先頭に送信先のアプリ 名を'APP:'のような形式で指定する。 [戻り値] 0 = 正常終了 [説明] 他のアプリに対し、引数で指定したファイルを送信することができる(受信側では、SBC_Get を呼 び出す必要がある)。送信可能なアプリが複数ある場合(SBC ファイルの[CONNECTION]セクショ ンで複数のアプリと接続関係が設定されている場合)には、送信ファイル名の先頭に、送信先を 'APP:'のような形式で記述します。 例: アプリ RISM に対して、coord.out というファイルを送信する場合 call SBC_Put('RISM:coord.out') (2)SBC_Get [機能] 指定したファイルを他アプリから受信する。 [事前条件] ・SBC_Init が呼び出されていること。 [事後状態] ・指定したファイル名のファイルが受信前に存在する場合は、受信したファイルで置き換えられる。 [呼び出し形式] FORTRAN: call SBC_Get( fname ) C 言語: int SBC_Get( char* fname ) [引数] 表4 SBC_Get の引数 引数名 型 I/O サイズ 内容 fname character* I 1 受信するファイル名を指定する。送信可能な送信元が 複数ある場合は、ファイル名の先頭に送信元のアプリ 名を'APP:'のような形式で指定する。 受信ファイル名は、送信元のファイル名と同一でなくて も良い。 35 利用者ガイド NAREGI Middleware SBC [戻り値] 0 = 正常終了 [説明] 他のアプリから SBC_Put により送信されたファイルに対し、引数で指定したファイル名のファイルと して受信することができます。自アプリに送信可能なアプリが複数ある場合(SBC ファイルの [CONNECTION]セクションで複数のアプリと接続関係が設定されている場合)には、送信ファイル 名の先頭に、送信先を'APP:'のような形式で記述します。 例: アプリ MC から、mccoord.inp というファイル名で受信する場合 call SBC_Get('MC:mccoord.inp') (3)SBC_Put_to [機能] 指定したファイルを他アプリの指定ローカルランクのプロセスに送る。 [事前条件] ・SBC_Init が呼び出されていること。 ・送付するファイルが存在し、かつ、クローズされた状態であること。 ・他アプリに指定ローカルランクのプロセスが存在すること。 [事後状態] ・送られたファイルは、消されずに残る。 [呼び出し形式] FORTRAN: call SBC_Put_to( fname , rank ) C 言語: int SBC_Put_to( char* fname , rank ) [引数] 表 5 SBC_Put_to の引数 引数名 型 I/O サイズ 内容 fname character* I 1 送信するファイル名を指定する。送信可能な送信先が 複数ある場合は、ファイル名の先頭に送信先のアプリ 名を'APP:'のような形式で指定する。 rank Integer I 1 他アプリのローカルランク [戻り値] 0 = 正常終了 [説明] 他アプリのローカルランク(dex_get_localcomm で取得可能なローカルコミュニケータにおける rank 36 利用者ガイド NAREGI Middleware SBC 値)のプロセスにファイルを送信します。ランク指定ができる点以外は SBC_Put と同じ仕様です。 (4)SBC_Get_from [機能] 指定したファイルを他アプリの指定ローカルランクのプロセスから受信する。 [事前条件] ・SBC_Init が呼び出されていること。 ・指定ローカルランクのプロセスが他アプリに存在すること。 [事後状態] ・指定したファイル名のファイルが受信前に存在する場合は、受信したファイルで置き換えられる。 [呼び出し形式] FORTRAN: call SBC_Get_from( fname , rank ) C 言語: int SBC_Get_from( char* fname , rank ) [引数] 表 6 SBC_Get_from の引数 引数名 型 I/O サイズ 内容 fname character* I 1 受信するファイル名を指定する。送信可能な送信元が 複数ある場合は、ファイル名の先頭に送信元のアプリ 名を'APP:'のような形式で指定する。 受信ファイル名は、送信元のファイル名と同一でなくて も良い。 rank Integer I 1 他アプリのローカルランク [戻り値] 0 = 正常終了 [説明] 他アプリのローカルランク(dex_get_localcomm で取得可能なローカルコミュニケータにおける rank 値)のプロセスからファイルを受信します。ランク指定ができる点以外は SBC_Get と同じ仕様です。 4.4 終了処理 (1) SBC_Finalize [機能] 終了処理 [事前条件] ・SBC_Init が呼び出されていること。 ・MPI_Finalize が呼び出されていないこと。 37 利用者ガイド NAREGI Middleware SBC [事後状態] ・ログファイルは削除されない。 [呼び出し形式] FORTRAN: call SBC_Finalize C 言語: int SBC_Finalize(); [引数] なし [戻り値] 0 = 正常終了 [説明] 終了処理を行います。 [注意事項] ・MPI プログラム内で使用する場合には全ての rank のプロセスにおいて本 API を呼び出し てください。 38 利用者ガイド NAREGI Middleware SBC 第5章 注意事項 (1)ファイル転送時に通信エラーが起こった場合には間隔を倍々にしながらリトライを 行います。10 秒から開始し、20 秒、40 秒おいてリトライを繰りかえし、最大 320 秒まで 間隔をおきます。計 6 回リトライしても通信エラーとなった場合には、エラーメッセージ を表示してプログラムを停止します。 (2)SBC でシミュレーションを行っているいずれかのプログラムが異常終了した場合、 ファイルの転送待ちをしているプロセスが待ち状態のままになります。次に連成シミュレ ーションを起動したときにこのプロセスにより通信異常が起こりますので、かならず kill するようにしてください。 (3)SBC でシミュレーションを行っているいずれかのプログラムが異常終了した場合、 プロセス通信バッファ上に"_"で始まるファイルが残ります。次に連成シミュレーションを 起動したときにこのファイルにより通信異常が起こりますので、かならず削除するように してください。 (4)AIX 使用時のスレッド数 AIX 上でプログラムを実行する場合は1つの PE に複数スレッドが割りあたらないよう、 適切なスレッド数を指定してください。1つの PE に複数のスレッドが割り当たった場合、 プログラムの実行時間が非常に長くなり、WallTimeLimit を超えて異常終了する場合があ ります。 (5)NAREGI 情報サービスとの情報連携時のリトライ動作 SBC を使用した連成プログラムをワークフローから実行した場合、SBC の API(SBC_Init) 中の処理において、NAREGI 情報サービスに対し当該連成プログラムのジョブ情報の情報 検索を行います。通信遅延等なんらかの不具合で検索に失敗した場合は、当該検索処理の リトライを行います。リトライ時は、標準エラー出力にリトライを行った旨の以下のメッ セージが表示されます。ただしリトライ中に WallTimeLimit の時間を越えた場合は、その 時点で異常終了します。 リトライメッセージの例: S ISQuery retry after 5000 msec. count=1 (6)ファイルアクセスの遅延時のリトライ動作 SBC の各 API の処理中に、通信バッファ上のファイルへのファイルアクセスに遅延が起こ 39 利用者ガイド NAREGI Middleware SBC った場合には API 内でリトライ処理を行います。所定回数正常にアクセスできない場合は エラーとして異常終了します。ただしリトライ中に WallTimeLimit の時間を越えた場合は、 その時点で異常終了します。 SBCのログ出力機能を有効にしている場合、リトライ中は以下のようなメッセージが標 準エラー出力に出力されます。 例: mo.err:S pid=1544438 waiting 1 seconds for next trial(#5) (7)転送可能なファイルのサイズ SBC によって転送可能なファイルのサイズの上限は 2GB です。 (8) 残存一時ファイル 連成ジョブの実行毎に、管理ノードの/tmp 下に"_sbc_ジョブID"というディレクトリが 一時的に作成されます(ジョブ ID は Coallocation の実行毎に作成される ID です)。 SBC_Init()の処理が正常に終了した場合には当該ディレクトリは自動的に消去されますが、 SBC_Init()の処理が中断された場合には、/tmp 下に残存したままになります。 管理者により定期的にクリーンアップされますが、過去に流したジョブのものであれば、 利用者が削除しても問題ありません。 第6章 6.1 トラブルシューティング コンパイル・リンク時 (1)mpif77 や mpif90 を用いてアプリケーションプログラムのコンパイルを行った際に 以下のエラーが出る。 エラーメッセージの例: sbc_fapi.o(.text+0x61): undefined reference to `s_cmp' sbc_fapi.o(.text+0x8d): undefined reference to `s_copy' sbc_fapi.o(.text+0xeb): undefined reference to `s_cat' 【対処法】 Intel(R) Fortran コンパイラがアプリケーション内部で使用されている可能性があります。 その場合以下のコンパイルオプションを追加してください。 (太字部分は Linux や gcc のバ ージョンによって異なる場合があります) -L/usr/lib/gcc-lib/i386-redhat-linux/3.2/ -lg2c 40 利用者ガイド NAREGI Middleware SBC 6.2 実行時 ジョブ実行時のSBCの詳細ログを管理者に提供することで、不具合箇所の特定を効率よ く行うことができます。詳細ログの出力方法は、3.4.2節を参照ください。 (1)NAREGI Workflow Tool での実行時に、Exception となる。以下のエラーメッセー ジが標準エラー出力もしくは実行時ログファイルに出力されている。 エラーメッセージ:(注:ログの最終行に出力されるとはかぎりません) S ISQuery failed. count > 30 (1-1)以前に正常動作したジョブについて当該エラーが発生した場合 【対処法】 NAREGI ミドルウェアの設定に以下の不具合がある可能性があります。詳しくは NAREGI ミドルウェアの管理者にお問い合わせ下さい。 (a) 管理ノード上の GridVM が使用する証明書の期限が切れている、もしくは削除されて いる可能性があります。 (b) LRPS 等の認証情報(grid-mapfile 等)に誤りがあるため、認証エラーになっている可能 性があります。 (c) IS に不要なハンドルが多数登録されているため SBC-XML の検索に時間が掛かっている 可能性があります。 (1-2)一度も動作したことのないジョブの場合 【対処法】 (a) SBCBUFFER,SBCCONNECTION の設定に誤りがある可能性があります。 3.3.3節の仕様に基づいて正しく設定してください。 (b) (1-1)と同様の原因が考えられます。(1-1)を参照ください。 (2)エラーメッセージが無く終了している 【対処法】WallTimeLimit の時間制限により、ジョブが中断された可能性があります。 WallTimeLimit の設定を大きくしてください。 (3)NAREGI Workflow Tool での実行時に、Exception となる。以下のエラーメッセー ジが標準エラー出力もしくは実行時ログファイルに出力されている。 エラーメッセージ:(注:ログの最終行に出力されるとはかぎりません) class find error method find error 41 利用者ガイド NAREGI Middleware SBC 【対処法】 環境変数 SBC_ROOT が正しく設定されていない可能性があります。 SBC_ROOT の値が NAREGI ミドルウェアの管理者により自動で提供されている計算環境 の場合、ユーザが個別に設定した値によって実行時に上書きされている可能性があります。 SBC_ROOT の値が管理者により自動で提供されていない計算環境の場合、管理者より正し い設定値の提供を受けて設定してください。 前記エラーメッセージと同時に javacore が出力される場合は、$SBC_ROOT にインストー ルされている SBC とバージョンの異なるSBCライブラリがリンクされている可能性があ ります。ログオプションを指定して、詳細なログを出している場合には、ログ中の以下の 行でバージョンを確認することができます(ただしバージョン1以降)。 リンクされているSBCのバージョン情報の例:(pid の値は通常は実行ごとに異なります) S pid=5012 SBC Version 1.0 $SBC_ROOT にインストールされているバージョン情報の取得例: $ grep SBC_VERSION $SBC_ROOT/include/SBC.h # define SBC_VERSION "1.0" (4)NAREGI Workflow Tool での実行時に、Exception となる。以下のエラーメッセー ジが標準エラー出力もしくは実行時ログファイルに出力されている。 error: globus_ftp_client: the server responded with an error 500 Command failed. : globus_xio: An end of file occurred 【対処法】 Globus にデリゲーション段数の上限を引き上げるパッチが適用されていない可能性があり ます。詳しくは NAREGI ミドルウェアの管理者にお問い合わせ下さい。 (5)アプリケーション単体の実行速度が遅くなる 【対処法】 AIXを使用している場合、スレッド数がしていされていない場合、アプリの実行速度が 遅くなる場合があります。スレッド数が指定されているか確認してください。 42 利用者ガイド NAREGI Middleware SBC (6)実行が途中で止まる 各アプリの SBC_Init の処理がすべて終了した後に止まっている場合は、 SBCの通信のデッドロックにより止まっている可能性があります。SBC の各通信ログ(3. 4.1節参照)で通信状態を確認してください。デッドロックしていない場合は、(5)の 問題によって実行が遅くなっている可能性があります。デッドロックおよび(5)の問題 に該当しない場合は、SBCの通信以外の問題と考えられます。 【対処法】 ユーザアプリ自身の通信フローに問題がないか確認ください。 連成アプリ起動の前に通信バッファがクリアされていない場合、起動後に通信が乱れハン グアップする場合があります。通信バッファをクリアしてから、再度ジョブを実行してく ださい。 43