この記事は、Windows* クラスター環境で分散 Co-Array アプリケーションのビルドと実行方法を紹介するハウツーガイドです。
必要条件:
Windows* 環境で Co-Array Fortran の分散メモリー機能を使用するアプリケーションをビルドするには、次のものが必要です。
- インテル® Visual Fortran Composer XE 2011 Update 6 以降
- インテル® クラスター・ツールキット (個別またはインテル® Cluster Studio 2011 の一部として提供) のライセンス
- Microsoft* Windows* HPC Server 2008 または Microsoft* Windows* Compute Cluster Server 2003 を実行する Windows* ベースのクラスター
設定:
分散アプリケーションを実行するには、クラスターが構成済みで、すべてのターゲットノードにインテル® Fortran 再頒布可能パッケージがインストールされていなければなりません。ターゲットノードとは、アプリケーションの実行に使用するクラスターノードのことです。
クラスターのすべてのターゲットノードの名前をリストしたファイルを作成する必要があります。通常、このファイルの名前は machines.Windows ですが、任意の名前を付けることができます。
アプリケーションを実行する前に、Windows* のパスワードを (インテル® クラスター・ツールキットに含まれる) インテル® MPI ライブラリーに登録する必要があります。これは、インテル® クラスター・ツールキットのコマンドウィンドウから、親ノードで一度だけ行います (パスワードが変更された場合には再度行う必要があります)。次のコマンドを実行すると、パスワードの入力を求められます。
mpiexec -register
設定の確認:
分散 Co-Array アプリケーションを実行するには、インテル® MPI で MPI ジョブを正常に実行できなければなりません。この記事の最後に “hello world” サンプルプログラムがあります。分散 Co-Array アプリケーションを実行する前に、クラスター上で複数のノードを使用して、この単純なプログラムを実行し、正常に実行できるかどうか確認してみることを強く推奨します。
インテル® クラスター・ツールキットのコマンドウィンドウで hello_mpi.f90 プログラムをビルドします。
そして、次のコマンドで実行してください。
mpiexec -machinefile machines.Windows -n 4 hello_mpi.exe
期待どおりに動作することを確認します。コマンドライン・スイッチ “-n 4” は実行されるイメージの数を指定します。これは、任意の数に変更できます。
アプリケーションのビルド:
これで、Co-Array Fortran アプリケーションをビルドする準備ができました。次のコマンドを実行します。
ifort /Qcoarray=distributed /Qcoarray-num-images=N myprogram.f90
プログラムの実行:
プログラムを実行するには、いくつかの点に注意する必要があります。そうでないと、プログラムはシングルノードでしか実行されません。
FOR_COARRAY_MACHINEFILE 環境変数には、machines.Windows ファイルのフルパスを設定します。これは、最初にプログラムを実行するノードでのみ行います。
プログラムの実行イメージは、Windows* クラスターのすべてのノードがアクセス可能な共有ディレクトリーに配置する必要があります。そうでないと、ほかのノードはプログラムを実行することができません。ドライブ文字を含む実行ファイルのフルパスは、すべてのノードで有効でなければなりません。
これらの設定が完了したら、次のコマンドを使用してプログラムを実行するだけです。
myprogram.exe
コマンドラインでプログラムへの入力を指定する場合は、次のように追加します。
myprogram.exe arg1 arg2
その他の考慮事項:
プログラムへの入力ファイルは、すべてのノード上のすべてのイメージがアクセスできるように、共有のディレクトリーに配置されていなければなりません。
すべての出力ファイルは、共有のディレクトリーに生成することを推奨します。ただし、これはプログラムによっては適切でないことがあります。
MPI テスト用の Hello World サンプルプログラム
Program hello_mpi
implicit none
include "mpif.h"
integer :: size, rank, ierr, len
integer :: status
call mpi_init(ierr)
call mpi_comm_size(MPI_COMM_WORLD, size, ierr)
call mpi_comm_rank(MPI_COMM_WORLD, rank, ierr)
call MPI_GET_PROCESSOR_NAME(name, len, ierr)
write(6, "(*a,i3))") "MPI: size=", size, "rank =", rank
write(6,*) "host is", trim(name)
call mpi_finalize(ierr)
end program hello_mpi
コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。
編集部追加
本記事では、最新標準規格である Fortran 2008 の新機能 Coarray を使用したプログラムをクラスター環境にて動作させる方法を紹介しています。Coarray Fortran を活用することで、プログラムを変更することなく 1 PC 上での並列化から、クラスター環境での並列化にまで対応することができます。 インテル® Cluster Studio XE では、Fortran 2008 規格に対応したインテル® (Visual) Fortran Composer XE を含め、HPC (ハイパフォーマンスコンピューティング) 分野に向けたすべてのインテルソフトウェア開発製品を1つのパッケージにて提供します。評価版のダウンロード、お問い合わせはエクセルソフト株式会社まで。 なお本記事のサンプルプログラムについて、原文のままではコンパイルエラーになります。お試しになる際は以下のプログラムをご利用ください。Program hello_mpi implicit none include "mpif.h" integer :: size, rank, ierr, len integer :: status character(len=MPI_MAX_PROCESSOR_NAME) :: name call mpi_init(ierr) call mpi_comm_size(MPI_COMM_WORLD, size, ierr) call mpi_comm_rank(MPI_COMM_WORLD, rank, ierr) call mpi_get_processor_name(name, len, ierr) write(6,"(2(a,i3))") "MPI:rank =", rank, "| size =", size write(6,"(a,i3,2a)") "MPI:rank =", rank, "| host is ", trim(name) call mpi_finalize(ierr) End program hello_mpi