Comments
Transcript
ParaGraph f。r VPP-PVM - Kyushu University Library
ParaGraph for VPP-PVM -VPPシステム上のPVMのための可視化ツールの紹介- ParaGraph for VPP-PVM - VPPシステム上のPVMのための可視化ツールの紹介大塚寛* 目次 1 はじめに 2 VPP-PVM用ライブラリの利用法 3 可視化ツールParaGraphの利用法 4 VPP-PVM用ライブラリの詳細 5 MPI用可視化ツールの紹介 謝辞 参考文献 1 はじめに 筆者は九州大学大型計算機センターのプログラムライブラリ開発の援助の下、当計算機センターの 並列スーパーコンピュータVPP700/56 (kyu-vpp.cc.kyushu-u.ac.jp,以下VPPシステムと略記)におけ るPVM (以下VPP-PVMと略記)を利用したプログラム用にライブラリを開発し、そのための可視化 ツールを用意しました。ここではそれらの利用法について解説します。オリジナルのPVMの詳細につ いては1. 2等を、 VPfLPVMの詳細については[3, 4]等を参照して下さい。 開発したライブラリはPVMタスク実行時のVPP-PVMの1対1通信関数に関するデータを収集 し、可視化ツールが得られたデータを元にⅩ-Window上で幾つかのグラフ等を表示します。 なおVPPシステムにはVPP-PVMの他にもMPI (Message Passing Interface Standard) 1.1[5, 6] を実装したライブラリ閏があり、プロファイリングインターフェイス機能が提供されています。これ を利用したライブラリとその可視化ツールも用意したので、それらも合わせて紹介します。 1.1 VPP-PVMの概要 VPP-PVMはVPPのプロセッシングェレメント(PE)間での高速なメッセージパッシングによる 通信を目的に開発されたもので、オリジナルのPVMが持つPVMコンソール(pvm)やPVMデーモン (pvm3d)等の機能は実装されていません。またVPP-PVMを利用したプログラムにも幾つかの制限事 項同があります。更に当計算機センターにおいてはVPPシステムの利用にバッチを採用していること により、インタラクティブな操作やVPPシステムの外部のオリジナルのPVMとの接続が実質的に不 可能です。 *九州大学大学院数理学研究科 ohtsuka◎math.kyushu-u.ac.jp -61- 九州大学大型計算機センター広報 Vol.32 No.2 1999 研究 開 発 読者の方々はPVMやMPIを使った並列プログラムなんて簡単に書ける人ばかりだと思いますが、 筆者にはとてもそんなまねは出来ないので、オリジナルのPVMでプログラムを開発する際には、 PVM 関数をトレース/可視化するPG-PVM[8]やXPVM[9]等を利用していました。しかし上のような理由 から、このようなアプリケーションがVPP-PVMでは利用出来なくなり、プログラムの作成やデバッ グに支障をきたすようになりました。 そこで改めてPVM関数をトレースするためのライブラリを作成し、標準的な可視化ツールで表示 することを試みました。ライブラリと可視化ツールを使ってみたい方は2,3章を、ライブラリの詳細や 何故ここに紹介する方法をとったのか興味のある方は4章をご覧下さい。 1.2 利用可能な環境 開発したライブラリは内部でVPPシステム上のVPP-PVMライブラリの関数を呼び出しているの で、 VPPシステム上でのみ利用可能です。またこれをリンクしたプログラムは、やはりVPPシステ ム上の並列実行用キュー上でのみ利用可能です。なおソース自体はオリジナルのPVMがインストール してあるUnixであればコンパイル可能と思いますが、これを利用するよりはPG_PVMやXPVMを 利用する方を勧めます。また現在のところ上記ライブラリはC言語からのみ利用可能ですが、 Fortran でも利用出来るようにする予定です。 一方VPP-PVM用の可視化ツールは{kyu-cc,wisdom}.cc.kyushu-u.ac.jp (以下kyu-ccおよびWISdomと略記)上で、 MPI用の可視化ツールはwisdom上で利用可能ですが、これらは共にX-Window 用のアプリケーションなので、 X-Window上であればどこででも表示出来ますし、必要なライブラリ さえあればどこででもインストール出来ます。 2 VPP-PVM用ライブラリの利用法 開発したライブラリとそれに関連した以下の4つのファイルを用意しています。 ヘッダファイル prof」)Ⅴ皿・h /usr/local/include以下にあると仮定 ライブラリ本体 Iibprof_pvm.a /usr/local/lib以下にあると仮定 可視化ツール pG パスの通ったディレクトリにあると仮定 シェルスクリプト mkpgfile.sh パスの通ったディレクトリにあると仮定 ライブラリ(-ツダフアイルとライブラリ本体)を利用するには、以下の作業をVPPシステム上で行な うだけであり、いたって簡単と言えます。 1.対象となるPVMタスクをコンパイルする際に、ヘッダファイルをインクルードし、 2.リンクする際に、 PVM関数のラッパーとそれに関連した関数から成るライブラリをリンクする。 以下では上の作業を、ライブラリを利用したソースコード(の一部)とそのコンパイル/リンク/実 行例を通して具体的に見ていきます。なお例に使うプログラムはディレクトリ /pⅧ/merge-sort以 下にmerge-sort.cというファイル名で作成してあるものとします。この例はマージソートを再帰的に 繰り返す部分を2分木上に配置したPVMタスクに行なわせます。但し2分木の葉にあたるPVMタス クではCの標準ライブラリであるqsortによりソートを行ないます。プログラム自身は並列化の効率 も何も考えていない、いたって簡単なプログラムです。 2.1 ソースコードの変更 ソースコードの変更は以下のアンダーライン部分、すなわち-ツダファイルprof_pvm.hをインク ルードするだけです PVM関数を呼び出しているソースファイルだけでなく、 main関数を定義した り、 exit関数を呼び出しているソースファイルでもprof_pvm.hをインクルードする必要があるので、 注意してください。 九州大学大型計算機センター広報 Vol. 32 No. 2 1999 -62- ParaGraph for VPP-PVM -VPPシステム上のPVMのための可視化ツールの紹介- #include <stdio.h> #mclude くstdlib.h> #include くpvm3.h> #include くprof_pvm.h> int main(int argc, char *argv[])) { なおprof_pvm.hは内部で/usr/include/sys/time.hをインクルードしています。 2.2 コンパイル/リンク時の指定 コンパイルおよびリンク時にライブラリを指定するには、基本的に通常のVPP-PVMのコンパイル /リンクオプションに加えて、以下の様にアンダーライン部分を追加するだけです。これらは -I/usr/local/include -ツダフアイルのあるディレクトリを指定 -L/usr/local/lib -lprof_pvm ライブラリのあるディレクト1)とライブラリ名を指定 を行なっています。但しライブラリの指定の順序には注意が必要です。ライブラリは内部でVPP-PVM の関数を呼び出しているので、 -lprof_pvmは-lpvmより前に指定する必要があります。以下の例では h793ila◎kyu-vpp merge-sort>はシェルのプロンプトであり、コマンドラインが複数行にわたるの で、継続行がある場合は行末に\を入れています。 h79311a@kyu-vpp merge-sort> cc -I/usr/lang/pvm/include -I/usr/local/include \ -Wl,-J,-P -dy -o merge-sort merge-sort.c -L/usr/local/lib -lprof_pvm \ -L/usr/lang/pvm/lib/VPP300 -1pvm -Imp -lgen -lelf -lsocket -lpx -lc 上の例で指定したVPfLPVMを利用したプログラムのコンパイル/リンクに必要なコンパイラのコマ ンドラインオプションの詳細について叫3, 4]等を参照して下さい。 ところで、毎回このようなコマンドを書いていては、たとえシェルスクリプトやヒストリ等を利用し ていても面倒です。オリジナルのPVMではMakefile.aimkを用意し、 aimkコマンドでPVMタスク を生成するようになっています。そこでこの仕組みよりは筒単ですが、 makeコマンドでコンパイル/ リンクするためのMakefileを以下に挙げますので、参考にしてください。 なお最後から2行目のS(CC)の前の空白はTABです。この場合はmakeコマンドのみ、あるいは h79311a(りkyu-vpp merge-sort> make merge-sort で、もしソースファイルmerge-sort.cがPVMタスクmerge-sortより新しければ、コンパイル!リ -63- 九州大学大型計算機センター広報 Vol.32 No. 2 1999 研究 開 発 ンクが行なわれmerge-sortが生成されます。 2.3 実行例 ライブラリを利用したプログラムが出来上がれば、あとはそれを並列実行用キュー(s8,p8,p16,p32) で実行するだけです。この実行にはライブラリを利用するための作業は必要ありませんが、実行中にラ イブラリが書き出すファイルを実行後にマージして1つのファイルにする必要があります。この作業の ために、ライブラリが書き出したファイルを引数とし、標準出力にそれらをマージした結果を書き出す シェルスクリプトmkpgfile.shを用意しています。なおライブラリは標準で"pg file.数字"なるファ イルをカレントディレクトリに書き出します。数字は0から始まるプロセッサ番号を表します。 ここではキューに投入するための以下の様な内容のシェルスクリプトを /script.exec以下に merge-sort.shというファイル名で用意します。通常のPVMタスクの起動に加えて、例えば以下の 様なアンダーラインの部分を追加するだけです。これらは (*)行 安全のため、それ以降にライブラリやシェルスクリプトが出力するファイルと同じ名前のファ イルの削除 (千)行 ライブラリが書き出したファイルをmkpgfile.shでまとめてpgfile.ms-3の生成 を行なっています。その他にもPVMタスクの実行時に参照される環境変数も指定しています。 # ! /bin/csh # setenv PVM_BUF_SIZE 51200000 setenv VPP.MBX_SIZE 51200000 ♯ cd pvm/merge-sort rm -f pgfile.[0-9]* pgfile.ms-3--・・- -一一・・・--・・-蝣(*) . /merge-sort mkpgfile.sh. pgfile. [0-9]* > pgfile.ms-3 -・ - - -・・- -(†) プログラムmerge-sortの実行後、ここで得られたファイルpgfile.ms-3を引数に次章で紹介する可 視化ツールを起動すれば、このプログラムの通信に関わる諸データがグラフ等で表示されます。 マージソートを行なうこのプログラムは、標準で深さ3の2分木状にPVMタスクが配置してある ものとして通信を行なうので、 2J-1個のPEが必要になります。そこで上で用意したシェルスクリプ トをキューs8(CPU時間: 10分,メモリサイズ:省略時1PEあたり512MB,8PE並列)に投入します。 h793ila@kyu-vpp merge-sort> qsub -q s8 "/script. exec/merge-sort. sh 但しVPPシステム上で同じ作業を何度も繰り返すのであれば、このようなコマンドもシェルスクリプ トやエイリアスあるいはmakeを利用すると簡単になります。以下では筆者がこの作業のために利用し ている方法を挙げます。まずそのための準備として、 1.キューに投入するシェルスクリプトは全て /script.exec以下に拡張子.shをつけて用意します。 2.またホームディレクトリに以下の内容のMakefile.execを用意します。ここではqsubのオプショ ンとして、指定がなければS8に投入する他 ・キューに投入するシェルスクリプトの標準出力/標準エラー出力の出力先ファイル名 ・実行の開始/終了/実行時の情報をメールで通知 を指定しています。またmakeの引数に指定した名前を持つ /script.exec以下の拡張子が.sh のシェルスクリプトが投入されることになります qsubのオプションについてはオンラインマニュ アルや10等を参照してください。 九州大学大型計算機センター広報 Vol.32 No. 2 1999 -64- ParaGraph for VPP-PVM -VPPシステム上のPVMのための可視化ツールの紹介- # Make file for qsub SDIR = /script.exec QUEUE = s8 # . DEFAULT : qsub -e S(SD工R)/S匂.err -O S(SDIR)/S匂.out \ -mb -me -mi -mu [email protected] \ -q S(QUEUE) S(SDIR)/S匂.sh 3.更に以下の様なエイリアスを /.cshrcに用意し、シェルにこれらを認識させます。各々対応す る並列実行用キューに、引数に対応するシェルスクリプトを投入しています。 # alias for qsub in make -f "/Make file.exec alias mkex 'make -f /Make file.exec' alias mkexl6 'make -f "/Make file.exec QUEUE=pl6J alias mkex32 'make -f "/Make file.exec QUEUE=p323 alias mkex8 'make -f "/Make file.exec QUEUE=p8' ちなみにディレクトリやエイリアスの名前はどのようにつけても構いませんが、それらを参照するもの との整合性が保たれる様にして下さい。 以上の準備が出来た後、以下の様に投入出来ます。なお1行目以外はmakeコマンドの出力です。 h79311a@kyu-vpp merge-sort> mkex merge-sort qsub -e /script.exec/merge-sort.err -o /script.exec/merge-sort.out -mb -me -mi -mu ohtsuka(白math.kyushu-u.ac.jp \ -q s8 /script.exec/merge-sort.sh これでプログラムmerge-sortがキューS8で実行され、ライブラリが7個のファイルpgfile. [0-6] を書き出し、 mkpgfile.shがそれらをまとめてファイルpgfile.ms-3が得られます。 なおプログラムmerge-sortは以下のようなコマンドライン引数をとり、従って並列実行用キュー (s8, p8, p16, p32)のいずれでも実行可能です。 merge-sort [-d n] [-1 m] [-h /] [-s k] 各々の引数の意味とデフォルト値は以下の通りです。 -d n から5までの2分木の深さを表し、デフォルトは3(PVMタスクは2n-1個)0 -1 m ソートするデータの個数の最小値をmに指定、デフォルトは102400個。 -h l ソートするデータの個数の最大値をlに指定、デフォルトは1024000個。 -s k ソートするデータの個数の増加量をkに指定、デフォルトは51200個。 ライブラリをリンクしない場合のプログラムサイズは984088バイトであるのに対し、ライブラリをリ ンクした場合は1026420バイトになります。またqsubのオプションのメールで知らされる実行時情報 では、ライブラリをリンクしない場合とした場合で実行に要する時間は以下の表のようになりました。 -65- 九州大学大型計算機センター広報 Vol.32 No.2 1999 研究 開 発 この時ライブラリによって出力されるファイルのサイズの合計は49583バイト、個々ファイルのサイズ は多くて11992バイトですが、ライブラリがファイル-書き出す際のバッファサイズが20480バイトな ので、各PEは1度しか書き出しておらず、上記の差はあまり当てにならないかも知れません。 3 可視化ツールParaGraphの利用法 開発したライブラリの利用法は2章で説明した通りです。そこで得られたファイルは標準的な可視化 ツールであるParagraph(コマンド名pG)国を用いてグラフ等で表示することが出来ます。と言って 「はい、さようなら」では開襲したライブラリは誰にも使って貰えないので、ここでは2章の例のシェ ルスクリプト'/script.exec/merge-sort.sh.の後ろ3行を以下の様に変えて rm pgfile. [0-9J* pgfile.ms-5 ./merge-sort -d 5 mkpgfile.sh pgfile. 【0-9]* > pg file.ms-5 キューp32で実行した結果を用いて簡単にParaGraphの利用法を紹介します。 ParaGraphはkyu-ccとwisdom上で利用可能ですが、ここではwisdom上での実行例を挙げます。 これらのマシンでは、各ユーザのホームディレクトリのVPPというシンボリックリンク名からVPPシ ステム上の各ユーザのホームディレクトリ以下が参照出来ます。前章の例のプログラムやそれが出力し たファイルはwisdom上では /VPP/pvm/merge-BOrt以下にあることになります。 3.1 起動と終了 ParaGraphを立ち上げるには、単にPGと入力するか、引数にトレース ファイルを指定して立ち上げるだけです。この事の例では上のシェルスク リプトにより得られるpgfile.ms-5がトレースファイルにあたります。 h79311a◎wisdom merge-sort> PG pg file.ms-5 すると右図の様なParaGraphのメインウインドウが開きます0 このウインドウはParaGraphのメインメニューにあたり、サブメニュー (SUBMENUS)の中から項目を選ぶことにより、様々なグラフやダイアグ ラム等を表示し、コントロールメニュー(CONTROLS)の中から項目を運 ぶことにより、グラフを時間の推移に沿って表示を進めたり様々な設定を 行なうことが出来ます。 以下はこの事で解介するサブメニューの項目です。 Utilization プロセッサ(ここではPVMタスク)の利用率を表示 Communication プロセッサ間の通信に関するデータを表示 なお引数をつけずにPGを起動した場合は、 Tracefile項目を選んでトレース ファイルを指定する必要があります。 また主に利用するコントロールメニューの項目は以下の通りです。 Start グラフの時間推移に沿った連続表示を開始 Stop グラフの時間推移に沿った連続表示を終了 Slow Motion グラフの連続表示のスピードを調節 Refuse/Resume グラフの時間推移に沿った連続表示の中断/再開 最下行の項目であるQuitを選ぶとParaGraphは終了します。 ちなみに、 ParaGraphはnet叫12]から配布されているファイルをそのままコンパイルしただけなので、 九州大学大型計算機センター広報 Vol. 32 No. 2 1999 -66- ParaGraph for VPP-PVM - VPPシステム上のPVMのための可視化ツ-ルの紹介- 例えば起動時にフォントが見つからないとか、 Screen Dump項目が動作しないなどの些細な、あるいは 回避可能な問題点がいくつかあります。特に、ダイアグラムなどを表示するウインドウあるいはその一 部が隠れている状態から、見える状態になったときに再描画してくれないといったパッキングストア関 係の問題があるので、他のX-Window用のアプリケーションも含めて多くのウインドウを重ねて表示 させる場合は注意してください。 以下では上記のサブメニューの中から幾つかの利用頻度の高い項目を簡単に紹介します。 3.2 Utilizationサブメニュー サブメニューのUtilizationを選ぶと右図の様なウインドウが開きます。 この中の項目を選ぶことで、プロセッサ(ここではPVMタスク)の利用率 に補する様々なグラフやダイアグラムを表示させることが出来ます。 例えばCount項目を選ぶと図1のような表示が得られます。これはbusy, overhead, idleの3つの状態ごとのプロセッサの総和の時間推移を表した もので、横軸は時間、縦軸はプロセッサ数を表します。各々の状態はParaGraphでは次のような意味を持ちますo idle 未到着のメッセージを待っているか実行を終了した状態 overhead 通信を実行中(メッセージを待っているわけではない) busy 通信以外のコードを実行中 図1: Utilization Count 残念ながらというか、 VPPシステムのPE間の高速メッセージパッシング通信のおかげか、 overheadにあたる部分が殆んど表示されません。コントロールメニューのStartを選ぶと右から左-グラフ がスクロールし、最後まで行き着くかStopを選ぶとスクロールが止まります。これは何度も繰り返す ことができますし、他のコントロールメニューの中の項目も利用出来ます。 -67- 九州大学大型計算機センター広報 Vol.32 No.2 1999 研究 開 発 Gantt項目はGanttチャートを、 Kiviat項目はKiviatダイアグラムを表し、その他の表示形式もあ りますが、詳しい解説勘11]に譲ります。 3.3 Communicationサブメニュー サブメニューのCommunicationを選ぶと右図の様なウインドウが開き ます。この中の項目を選ぶことで、プロセッサ(ここではPVMタスク)間 の通信に関する様々なグラフを表示させることが出来ます。 例えばSpacetime項目を選ぶと図2の様な表示が得られます。各プロセッ サの水平な線はbusyな状態を、プロセッサ間を結ぶ線はその間の通信を 表しますが、再び残念ながらというか、 VPPシステムのPE間の高速メッ セージパッシング通信のおかげか、通信を表す線は殆んど垂直、すなわち 送信と受信の時間差が殆んどありません。 他にもMatrix項目を選ぶと図3の様な表示が得られます。各行が送信プロ セッサを、各列が受信プロセッサを表しており、通信が行なわれた部分に 対応する成分が示されています。 1行目の0プロセッサを除いて2分木の 親子関係にあたるプロセッサ同士(nプロセッサの子は2n+lと2n+2プ ロセッサ>・・・)で通信が行なわれているのが分かります。 0プロセッサは最 初に2分木を構成するた糾こ全プロセッサに送信を行なっているので、他 プロセッサ-の送信が示されています。 Animation項目を選ぶと図4の様な表示が得られます。ここでは2分木上に配置されたPVMタスクを 表すための配置ファイルを用意し、それを読み込んで表示していますが、その他にもリング状や2次元 メッシュ状等の標準的なプロセッサの配置が選べます。 SPHCETIHE 王HRGRflM P hR O C E一S S ロ z r> M CO ≡ I I 二 ≡ ≡ 1 ﹁ ・ 二 . 〓〓、11 こ 、〓、J、∴㍉ 二≡lニ、、三二≡ IIl叫.コ痔旦那輔 fSK&^ssrs-x:描 mill崩 副 〓﹂︰〓、11:1,1ifこHv㌶・'f、毒 UI Ct co** 〓ノノnuhVfh±Ijr;誉当巧守.乍言 S^S . T , . ' ] 豆 デ 章 く r V 芸 当 SS iixir.ロ〓=軍′〓﹂、XI!t!.悠・蚤を芋等 ≡ : X t ≡ m m 宗 ︺ ¥ ' ニ く ⋮ , n i n i n e r 古 拙 i ・ I , I I I , │ I I I ! I I . . i i i i i i i i i i i i i i i i . . I S 覗 、 K s ﹂ ! & 7 ﹂ S X S ? 2 & ! t % i S i i i % ' i i ' Z ' t J { ' % 弧 弧 濫 弧 挑 5割S r . サ ー . ^ . . * . . 1 . r r . v i : . : . i v . " ; : . t ' v i ? t v 、 i l 一 ' ' 蝣. ! 類 S 蝣 ; 蝣 '/ . " 蝣 ? : / . ! ' ; 蝣 一 蝣 : 蝣 * . ' : ' ・ % ? : : < ' 加2 l⊥ :i * TIME 520 図2: Spacetime Diagram いずれの表示もCount項目のダイアグラムと同じく、コントロールメニューの項目が利用出来ますO その他にも様々な表示がありますが、詳しい解説は【111に譲ります。 九州大学大型計算機センター広報 Vol.32 No. 2 1999 -68- ParaGraph for VPP-PVM -VPPシステム上のPVMのための可視化ツールの紹介- 図4: Animation 図3: Communication Matrix 4 VPP-PVM用ライブラリの詳細 問罪したライブラリの動作は非常に簡単です。 2章の作業に沿って説明すると、 1. prof_pvm.liのインクルード時に、通常のPVMの通信関数とma-関数およびexiも関数をそのラッ パーで置き換えます。 2. libprof_pvm.a内のラッパーは以下の作業を行ないます。 main関数 ラッパーの初期化とユーザが用意したmam関数の呼び出し、お よび終了処理 pvMの通信関数のラッパー PVM関数の呼び出し、およびPVM関数の呼び出し時の引数と 戻り値から、以下に述べるトレースフォーマットを構成し、ファ イル-書き出し ライブラリの中にmam関数が定義されているので、 2章で述べた様にmam関数を定義したソースファ イルやexit関数が象れるソースファイルでもprof_pvm.hをインクルードする必要があります。 pvMタスクの実行時にライブラリを制御するにはt.コマンドラインオプションではなく環境変数で 指定します。現在は以下の2つしか用意していません。 PGFILE 書き出すファイル名は標準で``pgfile.数字"ですが、環境変数PGFILEで指定する ことも出来ます。この場合書き出すファイル名は"指定した名前.数字'になります。 数字は0から始まるプロセッサ番号を表します。 PGBUFSIZE これらのファイル-書き出す際のバッファサイズは標準で20480バイトですが、環 境変数PGBUFS工ZEでそれ以上のサイズを指定出来ます。 プログラムmerge-sortを実行した結果得られたpgfile.Oを例にとると、書き出されたファイルは以 下の様になっています。 まず最初の5行の注釈内で、プログラム名、それを実行するPVMタスク(PE,プロセッサ番号)、 および実行開始時間を示しています。 6行目以降は、 PICL(Portable Instrumented Communication Library)【131と呼ばれるライブラリのトレースフォーマット国と、それを書き出したPVM関数がど のファイルの何行目で呼び出されたかという情報を、薄で区切って出力しています。 -69- 九州大学大型計算機センター広報 Vol. 32 No. 2 1999 研究 開 発 港 # prof_pvm trace file for merge-sort # °n process: 0 # start at: Tim Apr 1 14:58:54 1999 # -3 -901 0.000000 0 -1 0# prof_main.c: 107 -3 -501 0.025404 0 -1 1 2 6* merge-sort.c: 157 -2 -503 0.350000 0 -1 2 2 1 -1* merge-Sort.c: 157 -2 -503 0.350000 0 -1.2 2 2 -1# merge-sort.c: 157 同様のファイルがpgfile. Cl-6]として計7個得られますが、これらをmkpgfile.shでマージすると 以下の様になります。 -3 -901 0.000000 0 -1 0 -3 -501 0.025404 0 -1 1 2 6 -2 -503 0.350000 0 -1 2 2 1 -1 -3 -21 0.357225 0 -1 3 2 32 1 6 -4 -21 0.357288 0 -1 0 -3 -901 0.363712 2 -1 0 -3 -901 0.363734 4 -1 0 -3 -901 0.363958 1 -1 0 -3 -901 0.366333 3 -1 0 -3 -901 0.366337 5 -1 0 -3 -901 0.366345 6 -1 0 PICLのトレースフォーマットについての説明は[14】に譲りますが、 3桁目がトレースをはじめてから の相対的な時間を秒単位で表しており、ファイル自身はこの順でソートされています。また4桁目がそ の行を出力したPEのプロセッサ番号にあたります。最初から0.357288秒までの数行はpgfile.Oの 内容ですが、それ以降は他のファイルからのデータになっています。 4.1 ライブラリ作成の経緯 オリジナルのPVMにはPVMタスクの通信に関わる性能の解析と評価を行なうためのアプリケー ションが存在しますが、 VPP-PVMでは幾つかの制限のため、オリジナルのPVMで利用出来たこれ らのアプリケーションが利用出来ませんでした。そこで改めて上記の様なライブラリを作成したわけで すが、何故この様な方法を取ったのか僑単に説明します。まず参考までにこれらのアプリケーションの うち代表的なものとそれらの特徴を以下に挙げます。これらは共にロギングの対象となるPVMタスク の他に、特別なPVMタスクであるPVMコンソールやPVMデーモンを別に持ち、これらがロギング の対象となるPVMタスクが通信を行なうたびに送るデータを受け取り、ファイルに書き出したり表示 を行ったりするものです。 4.1.1 PG_PVM【8】 ポストモーテム型のアプリケーションで表示にはParaGraphを利用します PG.PVMでは、ロギ ングの対象となるPVMタスクに特別な制限はつけませんが、通信関数のラッパーとロギングを調節す るための関数を用意しており、そのためにPVMタスクの作成には以下の作業が必要となります。 九州大学大型計算機センター広報 Vol. 32 No. 2 1999 70- ParaGraph for VPP-PVM -VPPシステム上のPVMのための可視化ツールの紹介- 1.必要に応じて、 PGJPVMの関数を呼出す様にソースを書き直す。 2.通常のPVMの通信関数をそのラッパーと置き換えるために、 PGJPVM用の-ツダフアイルをイ ンクルードしてコンパイルする。 3.ラッパーとそれに関連した関数をリンクするた桝こ、 PG.PVM用のライブラリをリンクする。 得られたデータのフォーマットはPICLのトレースフォーマットで、 ParaGraphによりX-Window上 に表示されます。 4.1.2 XPVM[91 Ⅹ⊥Window上のPVMコンソールでありリアルタイム/ポストモーテム型です XPVMではロギ ングの対象となるPVMタスクをトレースモードで立ち上げ、 PVMの関数(通信関数だけではない)が 呼ばれるたびに出力されるトレース情報を取り込んでいます。このためコンパイル/リンクには特別な 作業は必要ありませんが、 XPVMでロギング出来るPVMタスクはある程度制限され、しかもXPVM から立ち上げなければなりません。また得られたデータはSDDFと呼ばれるフォーマットで出力され、 XPVM自身が表示を行ないます。 4.2 VPP⊥PVMでログを取る方法 VPP-PVMにはプログラムの記述の際にも、またPVMタスクの実行の際にも様々な制限がありま す[31.もちろん通常の目的でVPP-PVMを用いてプログラムを書く分には、オリジナルのPVMとの 違いは余り気になりません。しかしPVMコンソールやPVMデーモンの機能を利用したプログラムが 書けないので、以下のような制約の下でVPP-PVMを用いてPG_PVMあるいはXPVMと同様の手 法でログを取ることは、私の頭とプログラミング・スキルではほとんど出来ません。ここで制約とは、 ログを取るための特別な(PVMタスクとして動作する様な)ライブラリ関数を用意出来たとしても、 ●その関数が動作するための特別なPEは用意しない ●その関数を対象となるPVMタスクから隠蔽する という条件ですが、これはロギングの対象となるPVMタスクに対する制限を最小限に留める上では、 極めて妥当なものと思われます。 なおロギングを行なうPVMタスクを用意するとなると、 pvm_spawn関数は1度しか呼び出せず更 に第1引数が有効にならないという制限があるので、この関数のラッパーを用意してその中でPVMタ スクに対応するライブラリ関数を呼び出さなければなりません。しかしVPP-PVMでは1PEにつき 1PVMタスクしか割り当てられないという制限のために、そのライブラリ関数が1PEを必要とし、例 えば各並列実行用キューでPEを全て指定するようなプログラムでは利用出来なくなります。 そこでここではVPPシステムでは標準で並列動作する複数個のPEのうちの1つが他のPEのI/0 を全て引き受けることを利用して、 1.対象となるPVMの通信関数のラッパーを用意し、これがログを直接ファイルに書き出す 2.個々のPEから書き出された別々のファイルを、 PVMタスク終了後マージする 方法を取りました。これは基本的にはPG.PVMの方法で、ログの出力先をPE毎に個別のファイルに 変え、これらをマージする作業はPVMタスクとは別に行なう様にしたものです。この方法により前章 で紹介した方法で1対1通信のログをとることが可能になりました。但し以下の様な制限がつきます。 ●ラッパー等の置き換えはCのプリプロセッサ命令だけで行なっているので、それと整合が取れて いないといけない。 ●ログを取り直したりログをやめたりするには、改めてコンパイルしなければならない。 ●各PEで動作するPVMタスクは既にログの書き出しのた糾こ1個ファイルをオープンしている のでオープン可能なファイル数が減少する。 71- 九州大学大型計算機センター広報 Vol. 32 No. 2 1999 研 究 開 発 ●ログの対象を調節するための関数は用意していないので、ログを取るための細かな調節がファイル 単位およびプリプロセッサ命令単位でしか出来ない。 このうちオプションで切り替えられたり、関数を用意すればよいだけのものは対応する予定です。 なおPVMタスクをトレースモードで立ち上げ、トレースデータをファイルに書き出す方法も考え られますが、私のPVMおよびVPP-PVMに関する理解の範囲内ではどうやら無理の様で、途中で挫 折してしまいました。 4.3 ParaGraph ParaGraphはPICLと呼ばれる通信ライブラリのトレースファイルを表示する可視化ツールです。 一方PVMと PICLの通信関数にはセマンテイクス上の違いがあるため、得られたデータが必ずしも PVMの通信関数の正確な意味を表しているとは限りません。従って細かいことですがParaGraphの 表示するグラフにもそれが反映されています。特にプロセッサのidleやoverhead状態についてそれを 感じました。しかし、おおざっぱな見方をすれば、 ParaGraphの表示でも十分と思われます。 その点XPVMはPVM専用に作られているので、この方法で表示出来れば良かったのですが、今回 はSDDFフォーマットで出力するライブラリを用意することまでしか出来ませんでした。 5 MPI用可視化ツールの紹介 VPPシステムではVPP-PVMの他にも標準のメッセージパッシングインターフェイスであるMPI が利用出来ます。そこでMPIのプロファイリングインターフェースに基づいた同様のライブラリおよ び可視化ツールとして、 mpich国に付属のMPEのライブラリとnupshotを用意しました MPEは mpichのソースを展開後のmpeサブディレクトリに、 nu.psh.otはprofiling/nupshotサブディレクト リにあります MPEのライブラリは開発したライブラリと同じくVPPシステムで、 nupshotはwisdom で利用可能です。ここでは説明は抜きにして、簡単にそれらの利用法を説明します。 5Tl ライブラリ MPEのライブラリとしてIibtmpi.a, liblmpi.a, libmpe.aの3つを用意しています。このうち 可視化ツールnupshotで利用可能なALOGフォーマットのファイルを出力するのはIiblmpi.aです。 MPIを用いたプログラムでプロファイリングインターフェースを利用するには、ライブラリのリン ク時に一叫piの前に-lpmpiを指定する必要があり、また上記のライブラリはIibpmpi.aの関数を呼 び出しているので、これらより前に指定する必要があります。ここでは /mp主/mpe以下のディレクト リで作業を行なっており、 MakefileはVPPシステムに合わせて書き直してあるものとして、 MPEに 付属のsrtest.cのコンパイル/リンク例を以下に挙げます。なおプログラム名は利用するライブラリ に合わせてsrtest.lmpiとしており、 1行目以外はmakeコマンドの出力です。アンダーライン部分 とそれに引き続く-llmpiがライブラリを利用する際に新たに付け加える部分になります。 b73432a◎kyu-vpp mpe> make srtest. lmpi cc -DHAVE_STDLIB_H=1 -DPCONTROL_NEEDS_CONST=1 -DHAVE_PROTOTYPES=1 \ -DHAVE_UNAME=1 -DHAVE_SYSINFO=1 -DHAVE_SYS_SYSTEMINFO_H=1 -K a4 \ -I/usr/lang/mpi/include -DMPI_ -o srtest.o -c srtest.c cc -o srtest.lmpi srtest.o \ -Wl,-J,-P -L/usr/lang/mpi/lib -L. -llmpi -lpmpi -lmpi -Imp \ -lelf -lpx -lm -lgen 以上によりsrtest.lmpiが生成されます。これを実行するとALOGフォーマットのsrtest.lmpi.alog という名前のファイルが得られます。 九州大学大型計算機センター広報 Vol. 32 No. 2 1999 -72- ParaGraph for VPP-PVM -VPPシステム上のPVMのための可視化ツールの紹介5.2 iiupshot nupskotはTcl/Tkを利用したX-Window用のアプリケーションですが、 kyu-ccではTcl/Tkを利 用したアプリケ-ツヨンを実行するとロードアベレージが上がるので、 kyu一ccには用意していません。 ここでは上で得られた昏rte醜. lmpi.alogをwisdo如上のnupShotで表示してみます。 wisdom上ではこのファイルは'/VPP/mpi/mpe以下にあります。叩Shotはパスの 通ったディレクトリにあるものとします。 nupskotを引数無しで起動すると右図の様なウインドウが、 Srte5七,lmpi.叫喝を引数にして起動 すると図5の様なウインドウが開きます。 引数を指定しなかった場合はここでL喝fileを選ぶと右図 の様なウインドウが開きます。ここではPICLのトレース フォーマットファイルも運べるようになっていますが、 nupshotが表示可能なトレースフォーマットのバージョン が1なのに対し、 ParaGraphが表示可能なトレースフォー マットのバージョンは2で、両者に互換性はありません。 従って開発したライブラリが出力するファイルはnupshot では表示出来ないので注意してください。 ここでsrtest.lmpi.alogを選択すると図5の様なウイン ドウが開きsrtest.lmpi.alogの内容が表示されます。 srtest. cはMPI_Barrier, MPI_Send, MPI且ecvの3つの MPIの通信関数しか利用していないので、 BARRIER, RECV, SEND項目のみが表示されていますO これらの項目を選ぶと、図6の様にその関数が時間の推移に沿ってどれだけ行なわれたか表示します。 図5: nupshot - srtest.lmpi.alog 図5のグラフは縦軸がプロセッサ(ここではMPIプロセス)を、横軸が時間を表し、これらの関数の 実行を時間の推移に沿って表示し、また対応するSEND/RECVを矢印で結んで通信を表しています。 この例では全てのデータが表示されていますが、入りきらない場合はスクロールさせることも出来ます。 グラフのある部分だけを拡大したい場合はその部分をズームさせ ることも出来ます。またグラフの特定の部分を選ぶことで、右図 の様にその部分の関数の実行に要した時間を表示します。 -73 九州大学大型計算機センター広報 Vol. 32 No. 2 1999 研究 開 発 図6: state RECV lengths MPI用可視化ツールの紹介は以上で終りますが、 mpichにはプロファイリングインターフユースを 利用した関数を生成してくれるツール(サブディレクトリprofiling/wrappergen以下)も付属してい ます。またprofiling以下のサブディレクトリlibやex弧piesには簡単な例や参考となるソースがあ ります MPIの性能等を調べたいとき、あるいは自分の好みの可視化ツールを利用したい時には役に 立っので、利用してみてはいかがでしょうか?なお並列スーパーコンピュータではPVMよりもMPI を実装したライブラリが多い様です。また最近はPVMよりもMPIを使用している方も多い様なので、 MPIのプロファイリングインターフェースを利用したライブラリや可視化ツールの方がより利用される と思われます。 謝辞 今回のライブラリは、大型計算機センター1997年度プログラムライブラリ開発(課題番号 26-ll, 課題名:通信関数隠蔽型並列プログラミング言語の設計と実装,開発者・所属:河原康雄,森雅生・大学院 システム情報科学研究科情報理学専攻,開発期間1997.10.1 - 1998.9.31)の援助の下に開発しました。 河原研究室の大学院生からは、ライブラリの動作確蘭のた釧こ幾つかのPVMおよびMPIプログラ ムを作成し提供していただきました。また大学院数理学研究科の山本野人氏(現在は電気通信大学)に は、プログラムライブラリ開発期間以降のライブラリ開発の作業に必要なCPU時間とディスクを提供 していただきました。ここに感謝の意を表します。 参考文献 [1] A. Geist, A. Beguelin, J. Dongarra, W. Jiang, R. Manchek and V. Sunderam, "PVM: Parallel Vittual Machine - A Users'Guide and Tutorial for Networked Parallel Computing" , The MIT Press, 1994. [2] A. Geist, A. Beguelin, J. Dongarra, W. Jiang, R. Manchek and V. Sunderam, "PVM3 USER'S GUIDE AND REFERENCE MANUAL" , ORNL/TM-12187, 1994. URL: http://www. netlib.org/pvm3/ [3PUXP/V PVM使用手引書VIO用J2U5-0140-01,富士通株式会私1995. 九州大学大型計算機センター広報 γol. 32 No. 2 1999 -74- ParaGraph for VPP-PVM -VPPシステム上のPVMのための可視化ツールの紹介- [4]南里豪志, "VPP上のPVM利用法",九州大学大型計算機センター広報Vol. 30, No. 4, pp. 339362,1997. 回Message Passing Inte血ce Forum, "MPI: A Message-Passing Inte血ce Standard", June 12 1995. URL: http://www.mpi-forum.org/ 囲MPI日本語訳プロジェクト, "MPI:メッセージ通信インターフェース標準". URL: http://phase.etl.go.jp/contrib/MPI-j/ [7] "UXP/V MPI使用手引書VIO甲J2U5-0270-01,富士通株式会社1996. 回E. Walker, R. Thien and C. Weng, "PG_PVM User Manual", 1994. 回J. Kohl, "XPVM 1.0 USER'S GUIDE", ORNL/TM-12981, 1996. URL: http://www.netlib.org/pvm3/xpvm/ [10]渡部善隆, "VPP700/56利用の手引き第2版",九州大学大型計算機センター1998. [11] M. Heath and J. Finger, "ParaGraph: A tool for Visualizing Performance of Parallel Programs", 1994. URL: http://www.netlib.org/paragraph/ f12】 URL: http://www.netlib.org/国内のミラーhttp://phase.etl.go.jp/netlib/ [131 A. Geist, M. Heath, B. Peyton and P. Worley, "A user's guide to PICL: a portable instrumented communication library" , ORNL/TM-11616, 1991. URL: http://www. netlib.org/picl/ [14] P. Worley, "A NEW PICL TRACCE FILE FORMAT", ORNL/TM-12125, 1992. URL: http://www.netlib.org/picl/ [15] URL: http://vwvw.mcs.anl.gov/mpi/mpich/ -75- 九州大学大型計算機センタ-広報 Vol.32 No.2 1999