Windows* 環境での分散 Co-Array アプリケーションのビルドと実行

インテル® Fortran コンパイラー
この記事は、インテル® ソフトウェア・ネットワークに掲載されている「Building and Running a Distributed Coarray Application on Windows」 (http://software.intel.com/en-us/articles/building-and-running-a-distributed-coarray-application-on-windows/) の日本語参考訳です。

この記事は、Windows* クラスター環境で分散 Co-Array アプリケーションのビルドと実行方法を紹介するハウツーガイドです。

必要条件:

Windows* 環境で Co-Array Fortran の分散メモリー機能を使用するアプリケーションをビルドするには、次のものが必要です。

  • インテル® Visual Fortran Composer XE 2011 Update 6 以降
  • インテル® クラスター・ツールキット (個別またはインテル® Cluster Studio 2011 の一部として提供) のライセンス
Windows* クラスター環境で分散 Co-Array アプリケーションを実行するには、次のものが必要です。
  • 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
タイトルとURLをコピーしました