6.12. MPIの集団通信アルゴリズム(knomial, rabenseifner)

言語環境tcsds-1.2.42から、BcastにKnomialアルゴリズム、ReduceとAllreduceにRabenseifnerアルゴリズムを追加しました。これらのアルゴリズムは既存のアルゴリズムより高速な領域があります。
使用しているアプリケーションプログラムの通信がこの高速な領域を使用している場合は、追加されたアルゴリズムを使用することで性能が改善する可能性があります。
Knomialアルゴリズムは従来のBinomialアルゴリズムを発展させたもので、より効率的なブロードキャスト通信が期待できます。
またbychipにおいては小メッセージサイズの領域で既存のアルゴリズムよりも高速であることが確認されています。
Rabenseifnerアルゴリズムは再帰的ベクトル分割(recursive vector halving)と再帰的距離倍増(recursive distance doubling)の組み合わせによるReduce-scatterと、それに続くBinomial GatherまたはRecursive Doubling Allgatherによって実装されたアルゴリズムです。
KnomialおよびRabenseifnerアルゴリズムは、ジョブ形状が指定されず、かつ、3次元形状が割り当てられなかった場合に特に有効です。
一方で、3次元ジョブの場合は既存のアルゴリズムより性能が低下する可能性もあるため、ご使用の際はご注意ください。
Knomialアルゴリズム、Rabenseifnerアルゴリズムを使用する場合はアルゴリズムの指定が必要です。
アルゴリズムを指定しない場合は、ブロッキング集団通信ルーチンが呼び出された際に、集団通信ルーチンの引数やコミュニケータの形状の情報をもとに、tcsds-1.2.41以前からある既存のアルゴリズムの中から高速なアルゴリズムを選択します。

Knomialアルゴリズム、Rabenseifnerアルゴリズムの選択の参考情報として、Intel(R) MPI Benchmarks 2021.3を使用した測定結果をFAQ:MPIの集団通信アルゴリズム(knomial, rabenseifner)の使用方法に掲載しています。

6.12.1. アルゴリズムの指定方法

アルゴリズムの指定方法には、次のの3つの方法があります。

  1. MCAパラメーターを指定

  2. Infoオブジェクトによる指定

  3. 外部入力ファイルによるアルゴリズム選択

指定方法の詳細はマニュアル「MPI使用手引書」の「第8章ブロッキング集団通信の高速化」を参照ください。

6.12.1.1. MCAパラメーター

実行時にMCAパラメーターに使用するアルゴリズムを指定します。この選択方法では、アプリケーションプログラムの再翻訳は不要です。

BcastのアルゴリズムとしてKnomialを用いる際の指定例:

mpiexec --mca coll_select_bcast_algorithm knomial ./a.out

ReduceのアルゴリズムとしてRabenseifnerを用いる際の指定例:

mpiexec --mca coll_select_reduce_algorithm rabenseifner ./a.out

AllreduceのアルゴリズムとしてRabenseifnerを用いる際の指定例:

mpiexec --mca coll_select_allreduce_algorithm rabenseifner ./a.out

6.12.1.2. Infoオブジェクトによる指定

アプリケーションプログラムの中でInfoオブジェクトに、使用するアルゴリズムを指定します。この選択方法では、アプリケーションプログラムの修正と再翻訳が必要となります。
詳細はマニュアル「MPI使用手引書」の「8.3.1.4 Infoオブジェクトによるアルゴリズム選択」を参照ください。

以下の例は、コミュニケータMPI_COMM_WORLDに対し、Reduce時にRabenseifnerアルゴリズムを実行するよう指定するプログラムの一部です。

MPI_Info info;
MPI_Info_create(&info);
MPI_Info_set(info, "reduce_rules", "rabenseifner");
MPI_Comm_set_info(MPI_COMM_WORLD, info);

6.12.1.3. 外部入力ファイルによるアルゴリズム選択

外部入力ファイルにアルゴリズムの選択を記述し、実行時にMCAパラメーターで外部入力ファイルを指定します。
詳細はマニュアル「MPI使用手引書」の「8.3.1.5 外部入力ファイルによるアルゴリズム選択」を参照ください。

以下の例は、BcastのアルゴリズムとしてKnomialを用い、セグメントサイズも指定する際の選択ルールファイルです。

header:
  version: 1.0
  require: mtofu,base

bcast:
  knomial(segsize=65536)
外部入力ファイルは実行時にMCAパラメーターでファイル名を指定して使用します。
以下は、/path/to/my_rules.confファイルを外部入力ファイルとして使用する場合の指定例です。
mpiexec --mca coll_select_dectree_file /path/to/my_rules.conf ./a.out

6.12.1.4. 注意事項

実行時に使用する言語環境がtcsds-1.2.42より前の版の場合、Knomialアルゴリズム、Rabenseifnerアルゴリズムは使用できません。使用できない場合は、標準エラー出力にメッセージを出力し、アルゴリズムの指定は無視されます。