【SX-Aurora TSUBASA】SX-Aurora TSUBASA用NEC MPI FAQ
質問内容
回答内容
NEC MPI の使用方法関連
- 物理的なVE番号を取得する方法はありますか?
mpirun に -v オプションを指定するとプロセス生成情報が出力されます。
本情報から物理VE番号を確認できます。
% mpirun -v -np 8 a.out
mpid: Creating 8 process of './a.out' on VE 0 of local host
↑ 物理VE番号0上にプロセスを8個生成したことを示しています。
またプログラム内から取得する場合には、環境変数 VE_NODE_NUMBERを参照することで物理VE番号を確認できます(getenv("VE_NODE_NUMBER"))。
- NQSV qsubでNEC MPIを利用する際、実行結果をリダイレクトする方法はありますか?
mpisep.shを利用すれば、各ランクの出力をファイルにそれぞれリダイレクトできます。
export NMPI_SEPSELECT=4
mpirun -np 4 /opt/nec/ve/bin/mpisep.sh ./a.out
上記実行により、各プロセスの標準出力・エラー出力がファイル"std.ユニバース番号:ランク番号"
にリダイレクトされます。
(ユニバース番号は通常0。MPI_Comm_spawn等で生成したプロセスは1以上)
「
NEC MPIユーザズガイド」の3.3 MPI プロセスの標準出力 および 標準エラー出力 に詳しくは記載されています。
ご利用中のNQSVのキューの設定においてNEC MPI プロセスマネージャーが hydra の場合、MPIプログラム実行時に環境変数NMPI_OUTPUT_COLLECTを設定することで出力先を以下の通り制御できます。
・NMPI_OUTPUT_COLLECT=ON
MPIプログラムの出力をMPI実行コマンドの標準出力・標準エラー出力へ出力します。
・NMPI_OUTPUT_COLLECT=OFF(既定値)
mpdと同様のMPIプログラムの出力を論理ノードごとに出力します。
- mpirunコマンドあるいはmpiexecコマンドの出力をリダイレクトし(mpirun ... > output.txt など)、
MPIプログラム全体の実行結果を保存することはできますか?
NQSVを利用した実行の場合、既定値の動作として、MPI実行コマンド(mpirunコマンドあるいはmpiexecコマンド)の出力をリダイレクトする方法では、
MPIプログラムの実行結果を保存することはできません。
ただし、NQSVキューのプロセスマネージャがHydraの場合、NMPI_OUTPUT_COLLECT=ONの指定により、
MPIプログラムの実行結果をMPI実行コマンドの出力に統合し出力することができます。
- バッチ実行時に以下のエラーが発生する原因は何でしょうか?
host1: mpid(0): bind or listen failed in listen_port_range: Address already in use
mpirun: cannot find fifo file: /tmp/mpi2mpid_fifo.xx_xxxxxxx; jid xxxxxxx
mpirun: fatal error : cannot find fifo file (not created by mpid)
MPIデーモンが利用するポートの確保に失敗している可能性があります。
NEC MPIが接続待ち受けに利用するポートは既定値では25257から25266の10ポートであり、
1ノードで多数(11個以上)のMPIデーモンを同時に起動する場合、10ポートでは不足となります。
ポート不足を解消するためには、ポート数を拡大する必要があります。
例えば、20個のMPIデーモンを1ノード上で同時に起動する場合は、
NMPI_PORT_RANGE=25257:25276の指定により、ポート数を20に拡大することができます。
このポート数の拡大はシステム設定、あるいは、ジョブごとに #PBS -v オプションなどで指定することができます。
SX-Aurora TSUBASA インストレーションガイド 、4.8.2 ファイアウォールの設定も参照してください。
- source necmpivars.sh や source necmpivars.csh を実行すると
以下の警告が出力されます。なぜでしょうか?
necmpivars.sh: Warning: invalid argument. LD_LIBRARY_PATH is not updated.
Note: "necmpivars.sh [gnu|intel] [version]" format should only be used
at runtime in order to use VH MPI shared libraries other than those specified
by RUNPATH embedded in a MPI program executable by the MPI compile command.
In other cases, "source /opt/nec/ve/mpi/2.x.0/bin/necmpivars.sh"should be used without arguments.
version is a directory name in the following directory:
/opt/nec/ve/mpi/2.x.0/lib64/vh/gnu (if gnu is specified)
/opt/nec/ve/mpi/2.x.0/lib64/vh/intel (if intel is specified)
引数をとるシェルスクリプト内やsetコマンドを実行した後、source necmpivars.shやsource necmpivars.cshを実行した場合、
necmpivars.shやnecmpivars.cshに位置パラメタが渡されるためです。
警告は無視して問題ありません。
「
NEC MPIユーザズガイド」の3.11 その他の注意事項(19)も参照してください。
- コンパイル・リンク時に利用したNEC MPIバージョンと異なるバージョンを利用してプログラムを実行することはできますか?
NEC MPIのライブラリは、既定値では主要機能を含め大部分が静的リンクされます。
このため、MPIプログラムの実行時にsourceするNEC MPIのセットアップスクリプトのバージョンに依らず、バージョンAのライブラリが使用されます。
MPIプログラムの実行時にNEC MPIのバージョンを変更したい場合、
コンパイル・リンク時に-shared-mpiオプションを指定してNEC MPIの
全ライブラリを動的リンクしてください。
これにより、実行時にバージョンBのセットアップスクリプトをsourceした場合
NEC MPIをバージョンBに切り替えてMPIプログラムを実行できます。
なお、NEC MPIの全ライブラリを動的リンクした場合、
静的リンクの場合と比較してMPI通信性能が低下する可能性がある点にご注意ください。
- 非ブロッキング MPI 手続きにFortranの部分配列などが指定できないのはなぜですか?
「NEC MPI ユーザーズガイド」の「2.13 非ブロッキング MPI 手続利用時の注意事項」に記載されている注意事項において、
非ブロッキングMPI手続きの通信バッファ、入出力バッファの実引数に下記のいずれかを指定すると、
正しい結果が得られないことや、プログラムの実行に異常をきたすことがあると記載されています。
・部分配列
・配列式
・配列ポインタ
・形状引継ぎ配列
「
NEC MPIユーザズガイド」の「2.13 非ブロッキング MPI 手続利用時の注意事項」に記載の内容については、
MPI仕様(MPI手続きの引数仕様)とコンパイラの最適化処理に起因するものです。
なお、ここでのコンパイラの最適化処理とは、NECコンパイラに特有なものではなく、命令順序の入れ替えやメモリアクセス削減(レジスタ最適化)等、
広く一般的に行われている最適化処理を指しており、
MPI仕様 (MPI: A Message-Passing Interface Standard, Version 3.1, June 4, 2015)、
17.1.17 Problems with Code Movement and Register Optimization
において説明されている内容となります。
- VE数とプロセス数を指定しましたが、各VEあたりに割り当てられたプロセス数が等しくなりません。なぜですか?
各VEに均等にプロセスを割り当てるためには、-venode オプションを使ってVEホストとして明示的に指定する必要があります。
明示的に指定していない場合、VHがホストとみなされ、各VHに均等にプロセスが割り当てられます。
その結果VHあたりのVE数が異なる場合には、VEあたりに割り当てられるプロセス数は異なることになります。
-venodeを含めmpirunのオプションは「
NEC MPIユーザズガイド」の以下の章で説明しています。
3.2.2 実行時オプション
この例ではVEがホストして明示的に指定されてていませんので、VHがホストとみなされます。
一方NQSVの条件により
・8VE利用可能なVHが15台
・5VE利用可能なVHが1台
がリソースとして割り当てられます。
その結果MPIは16VHに対して均等に1000プロセスを割り当てます。
1000÷16=62.5のため、端数を切り上げて1VHあたり63プロセスを基準に割り当てます。また最後のVH(job:0015)に55プロセスが割り当てられ、その結果VEあたり8プロセス以上が起動します。
本ケースのようにVHのVE数やVHあたりのプロセスうが不均等な場合
mpirun -venode -np 1000 ./a.out
としてVEをホストして指定することによりMPIは125VEノードに対して1000プロセスを1000÷125=8のため割り均等に当てられます。
- Intel XEON プロセッサの8VEモデル(A300-8, A311-8, B300-8, A500-64, A511-64など)上でMPI通信性能を改善する方法はありますか?
4VE/論理ノードでの実行に変更することで通信性能が改善する場合があります。
・インタラクティブ実行での実行例
mpirun -ve 0-7 -np 64 ve.out
↓
NMPI_EXEC_LNODE=ON mpirun -host host_0 -ve 0-3 -np 32 -host host_0/A -ve 4-7 -np 32 ve.out
・NQSVバッチリクエスト実行での実行例
#PBS -b 2
#PBS --venum-lhost=8
mpirun -np 128 ve.out
↓
#PBS -b 4
#PBS --venum-lhost=4
#PBS --use-hca=2
mpirun -np 128 ve.out
PROGINF/FTRACE 関連
- スレッド並列をおこなうとFTRACEの結果が演算量が少なくなったように表示されます。なぜですか?
自動並列化・OpenMP並列化された関数を-ftraceオプションを指定せずに
コンパイルした場合は、マスタースレッド以外の性能情報が解析結果に含まれません。
また、NLC (NEC Numeric Library Collection) の並列化関数を使用した場合、
当該関数により生成されるマスタスレッド以外のスレッドの性能情報も解析結果に含まれません。
本注意事項については、「PROGINF/FTRACE ユーザーズガイド」の2.4 注意事項をご参照ください。
- プログラムが異常終了した場合、標準エラー、PROGINF、FTRACEの結果は全rank最後まで出力されますか?
プログラムが異常終了した場合、標準エラー、PROGINF、FTRACEの結果の出力は保証されません。
このため、これらの一部または全部が出力されない場合があります。
InfiniBand関連
- InfiniBandの異世代機種間でのMPI実行について何か注意するべき点はありますか?
異世代 HCA 間ではMPIプログラムの実行ができないことがあります。
一部のInfiniBand通信に互換性が無いため、EDR HCA と HDR HCA (HDR100)の間、
および、EDR HCAと NDR HCAの間ではMPIプログラムは実行できません。
Auroraでは EDR HCA、HDR HCA (HDR100)、および NDR HCAを搭載したモデルがあり、
各モデルと搭載HCAの対応は以下の表を参照ください。
Aurora各モデルと搭載HCAの対応
EDR |
HDR |
NDR |
(オンサイトモデル)
A300-2 A300-4 A300-8
(データセンタモデル)
A500-64 A511-64 |
(オンサイトモデル)
A311-4 A311-8 B300-8 A412-8 B401-8 B302-8 |
(オンサイトモデル)
C401-8 |
製品名カテゴリ
SX-Aurora TSUBASA Software
補足/関連情報
改版履歴
2021/09/30 新規公開
2021/12/24 NEC MPI の使用方法関連の質問・回答内容の情報を更新
2023/09/28 NEC MPI、PROGINF/FTRACE、InfiniBand 関連の質問と回答を更新
-
コンテンツID:
3150115800
-
公開日:
2021年09月30日
-
最終更新日:2023年09月28日
アンケート
サポート情報充実のためアンケートにご協力をお願いいたします。
コメント欄: