Eclipse PTPを使ったMPIプログラムのデバッグ

出典: トータル・ディスクロージャ・サイト(事実をありのままに)

オープンソースの統合開発環境(Integrated Development Environment, IDE)として有名なEclipse。「Java向けIDE」というイメージが強いこのEclipseであるが、後に各種プログラミング言語へ対応する拡張が開発され、現在は様々な言語の開発環境として意外に使い物になるものとなっている(以前紹介した、NVIDIA製CUDA向けIDEのNsightもEclipseがベースであるように!)。今回は、このEclipseを使った、MPI並列のFortranプログラムのデバッグ作業のチュートリアルを書いてみる。

目次

Eclipse PTP

EclipseでMPIプログラムの開発を行うためのプラグインとして、Parallel Tools Platform (PTP)と呼ばれるものが有る。これをプラグインの形でインストールしても良いのだが、今回は説明を簡便にするために、初期状態でPTPが導入されているEclipse for Parallel Application Developersをダウンロードして説明に使う。

プロジェクトの作成

ダウンロードしたファイルを展開したフォルダに含まれている実行ファイルを実行すると、Eclipseが起動する。 ファイル:Screenshot_from_2013-04-05_10_32_31.png

File > New > Project...を選択して、新しいプロジェクトを作成する。 ファイル:Screenshot from 2013-04-05 10 33 04.png

今回はFortranプログラムをネットワークの向こう側のサーバで実行するので、Remote > Synchronized Fortran Projectを選ぶ。 ファイル:Screenshot from 2013-04-05 10 33 46.png

サーバの情報を入力するため、Remote directory > Connectionの横のNew...をクリック。 ファイル:Screenshot from 2013-04-05 10 35 44.png

SSHの認証情報を入力するダイアログが開くので、サーバへのログインに必要な情報を埋めていく。 ファイル:Screenshot from 2013-04-05 10 36 29.png

今回はMPIプログラムのサンプルとしてEclipseに付属する、Makefile project > Demo - Calculate Pi - Fortran using MPIのテンプレートを選択する。 ファイル:Screenshot from 2013-04-05 10 39 11.png

これで、ソースコードの変更やビルドがリモートのサーバに同期する、MPIのプロジェクトが作成できた。

MPIプログラムの実行

プログラムの編集やビルドは、通常のローカルのプロジェクトと同様に行えるので、ここでは割愛する。その際に編集されたローカルのファイル一式は、自動的にサーバに転送される。ビルドが正常にでき、実行ファイルが無事にサーバに転送されたものとして、このプログラムを実行することを考える。

Run > Run Configurations...で、手動で実行のコンフィギュレーションを作る。通常のプロジェクトのように、自動的にコンフィギュレーションを作ってくれるわけではないので注意されたい。 ファイル:Screenshot from 2013-04-05 10 40 12.png

Parallel Applicationとしてコンフィギュレーションを新規作成。 ファイル:Screenshot from 2013-04-05 10 40 49.png

今回はOpen MPIを使うので、Target System ConfigurationOpen MPI-Generic-Interactiveを選び、Connection nameには先ほど設定したサーバの設定の名前が選べるようになっているのでそれを選ぶ。MPIのプロセス数やホストファイルを設定するテキストボックスには、サーバに適した情報を入れておく。 ファイル:Screenshot from 2013-04-05 10 41 40.png

Application Programには、自動的にサーバ側に転送されている実行ファイルを指定。 ファイル:Screenshot from 2013-04-05 10 43 41.png

MPIのプログラムが正しく実行できるはずだ。 ファイル:Screenshot from 2013-04-05 10 44 04.png

MPIプログラムのデバッグ

プログラムが単に実行できるだけでなく、デバッグもきちんと対応している。ただし、事前にサーバ側でScalable Debug Manager (SDM)と呼ばれるソフトウェアを準備する必要が在る。

Eclipseのpluginsディレクトリに含まれる、org.eclipse.ptp.debug.sdm_(バージョン番号).jarorg.eclipse.ptp.proxy_(バージョン番号).jarorg.eclipse.ptp.utils_(バージョン番号).jarの、3つのファイルをサーバに転送し、サーバの適当なディレクトリに「.jar」を抜いた名前のディレクトリを3つ掘り、それぞれのJARファイルを展開する。

$ jar xf ...

として解凍しても良いし、JARファイルの正体はZIPファイルに他ならないので、

$ unzip ...

としても解凍できる。

utils > proxy > sdmの順番で、各ディレクトリで

$ bash configure
$ make

のコマンドを入力すれば、ビルドが順に進んでいく。最終的にsdmのディレクトリにsdmというファイルが作られているはずだ。

さて、Eclipseの操作に戻って、Run > Debug Configurations...で、デバッグ用のコンフィギュレーションを作る。 ファイル:Screenshot from 2013-04-05 10 46 10.png

Path to SDM executableに、先ほどビルドしたsdmファイルを指定する。 ファイル:Screenshot from 2013-04-05 10 47 37.png

デバッガが起動するが、実際のブレークポイントに関わらずMPI_Initで止まる。 ファイル:Screenshot from 2013-04-05 10 48 08.png

ソースコードの左端の桁をダブルクリックするとブレークポイントが作られ、実行をそこで引っかけることができる。理屈ではそういう動作なのであるが、現行のEclipse 4.2 SR2では「プログラムの実行中に作成したブレークポイントは、実行中のプログラムでのみ有効」であり、かつ「プログラムが実際には終了していても、デバッガが実行終了を検知できず実行中のままの扱いとなる」ため、プログラムの実行履歴が在ると「設定したブレークポイントが終了したはずの前プロセスのローカルのものとして扱われ、新しく立ち上げたプロセスで素通りしてしまう」現象が起きてしまう。デバッグ実行ごとにEclipseを再起動するか、デバッグプロセスを立ち上げてMPI_Initで止まったところでブレークポイントを設定するか、という対処をしたい。 ファイル:Screenshot from 2013-04-08 10 58 57.png

ダイアモンドはMPIのプロセスに対応し、ダイアモンドの色は青が実行中、黄が一時停止中、赤が終了である。四角い枠があるダイアモンドはデバッガがアタッチしていて、ダブルクリックで新しくアタッチすることができる。コントラストが反転しているダイアモンドがデバッガにとってのアクティブであり、アタッチ中のダイアモンドをクリックすると切り替えることができる。 ファイル:Screenshot from 2013-04-08 11 17 10.png

OpenMPによるハイブリッド並列など、MPIの各プロセスがマルチスレッド実行する場合、DebugペインのそれぞれのProcessノードの下のThreadノードとして表現される。Threadのアイコンをダブルクリックしてアタッチし、バックトレースからサブルーチンを選択して各スレッドのデバッグを行うことができる。 ファイル:Screenshot from 2013-04-08 12 54 29.png

建前では右上のペインからVariablesのタブを選択すれば、変数の一覧が表示されることになっている。しかし筆者の環境では、Fortranプログラムの変数を表示しようとするとsdmプログラムがエラーで強制終了し、正しい変数が表示されないままデバッグプロセスが不安定になってしまう。C言語のMPI実行や、非MPIのFortran実行では問題が無い。sdmプログラムの作りこみ不足であれば、改善を期待したいところである。 ファイル:Screenshot from 2013-04-08 14 10 23.png


この記事へのコメントをお寄せください

  • サイトへの書き込みに差し支えございましたら トータルディスクロージャーサイトサポート係へメールをお送りください
  • トータル・ディスクロージャ・サイトに投稿された文章と画像は、すべてその著作権がHPCシステムズ株式会社に帰属し、HPCシステムズ株式会社が著作権を所有することに同意してください。
  • あなたの文章が他人によって自由に編集、配布されることを望まない場合は、投稿を控えてください。
  • コメントを書き込む場合は名前にひらがなを織り交ぜてください。
  • あなたの投稿する文章と画像はあなた自身によって書かれたものであるか、パブリック・ドメインかそれに類する自由なリソースからの複製であることを約束してください。あなたが著作権を保持していない作品を許諾なしに投稿してはいけません!

<comments hideform="false" />


Comments

ノート:Eclipse PTPを使ったMPIプログラムのデバッグ

個人用ツール