OpenMP で並列化したプログラムを Cluster に移行しています。クラスタはスケジューラとして Lava 1.0 を使用しており、各ノードに 8 つのコアがあります。ジョブ スクリプトで MPI ラッパーを使用して、複数ホストの並列処理を行いました。
ジョブ スクリプトは次のとおりです。
#BSUB -q queue_name
#BSUB -x
#BSUB -R "span[ptile=1]"
#BSUB -n 1
#BSUB -J n1p1o8
##BSUB -o outfile.email
#BSUB -e err
export OMP_NUM_THREADS=8
date
/home/apps/bin/lava.openmpi.wrapper -bynode -x OMP_NUM_THREADS \
~/my_program ~/input.dat ~/output.out
date
1つのホストのみでいくつかの実験を行いました。しかし、結果の一部を説明する方法がわかりません。
1.
-nOMP_NUM_THREADStime
1 4 21:12
2 4 20:12
ここで MPI が並列処理を行わないということですか? 2 番目のケースでは、すべての MPI プロセスに 4 つの OMP スレッドがあるため、最初のプロセスよりも高速な 800% の CPU 使用率を使用する必要があると考えました。
それを証明する別の結果は、
-nOMP_NUM_THREADStime
2 2 31:42
4 2 30:47
また、実行時間もかなり近いです。
2.
この場合、簡単な方法でこのクラスター内のこのプログラムを合理的な最適化速度で並列処理したい場合、すべてのホストに 1 つの MPI プロセス (1 つのコアを使用することを LFG に伝える) を配置するのが合理的ですか? OMP_NUM_THREADS = 8 を設定します。排他的に実行しますか?したがって、MPI はクロスノード ジョブでのみ機能し、OpenMP は内部ノード ジョブで機能します。(-n = ホストの数; ptile = 1; OMP_NUM_THREADS = 各ホストの最大コア数)
更新: プログラムは mpicc なしで gfortran -fopenmp によってコンパイルされます。MPI は、実行可能ファイルの配布にのみ使用されます。
UPDATE Mar.3: プログラムメモリ使用量モニター
ローカル環境:Mac 10.8 / 2.9 Ghz i7 /8GB メモリー
OpenMP なし
- 実メモリサイズ:8.4MB
- 仮想メモリ サイズ: 2.37 GB
- 共有メモリ サイズ: 212 KB
- プライベート メモリ サイズ: 7.8 Mb
- 仮想プライベート メモリ: 63.2 MB
OpenMP あり (4 スレッド)
- 実メモリサイズ:31.5MB
- 仮想メモリ サイズ: 2.52 GB
- 共有メモリ サイズ: 212 KB
- プライベート メモリ サイズ: 27.1 Mb
- 仮想プライベート メモリ: 210.2 MB
クラスタ ハードウェアの概要情報
各ホストには、ノードあたり 8 コアと 8GB メモリのデュアル クワッド チップが含まれています。このクラスター内のホストは、インフィニバンドで接続されています。