2017-01-18 11 views
1

MPI_Infoを、プロセスが生成されるホストに設定しています(MPI_Comm Spawn)。MPI_Infoを設定するときのエラー:値が長すぎます

問題は、私はプロセスの大きな量を使用する際の設定は、このエラーを投げて、正しく行われていないことである。

Fatal error in MPI_Info_set: Invalid MPI_Info value , error stack: 
MPI_Info_set(117): MPI_Info_set(info=0x9c000000, key=hosts, value=cuda00,cuda00,cuda00,cuda00,cuda00,cuda00,cuda00,cuda00,cuda01,cuda01,cuda01,cuda01,cuda01,cuda01,cuda01,cuda01,cuda02,cuda02,cuda02,cuda02,cuda02,cuda02,cuda02,cuda02,cuda03,cuda03,cuda03,cuda03,cuda04,cuda0 
MPI_Info_set(97).: Value is too long 

フィールド「の値が」ホストリストであり、このホストリストです

"mpihostsは" のchar *ある
MPI_Info_set(info, "hosts", mpihosts); 

:でMPI_Info構造に割り当てられています。

の容量を変更することはできますかMPI_Info

答えて

0

@フランシスのコメントを考慮して、私はこの問題に対する他のアプローチをすることにしました。

MPI_MAX_INFO_VALは変更できません。MPI_Info_set(info, "hostfile", filename)は無視されますので、MPI_Comm_spawn_multiple()を使用する必要があります。

MPI_Comm_spawn_multiple()は、その長さのノードおよびいくつかのアレイの数を想定しています。このソリューションの

私は今、そのように設定することができる配列であることMPI_Infoフィールドにフォーカス、キープ:

MPI_info *infos = malloc(sizeof (MPI_Info) * nodecnt); 
for (i = 0; i < nodecnt; i++) { 
    MPI_Info_create(&infos[i]); 
    MPI_Info_set(infos[i], "hosts", hostnames[i]); 
} 
  • nodecnt新しいプロセスを生成するノードの合計量です。
  • hostnamesは、そのホストでプロセスが生成される回数だけ、ホスト名が繰り返し(コンマで区切られた)文字列の配列です。

したがって、MPI_Comm_spawn_multiple()の呼び出しでは、変数infosを使用します。 鉱山は、次のようになります。ちなみに

MPI_Comm_spawn_multiple(nodecnt, commands, MPI_ARGVS_NULL, maxprocs, infos, 0, MPI_COMM_WORLD, &newcomm, MPI_ERRCODES_IGNORE); 

は、原因ホスト名の非常に長いリストで、私たちは同じ問題になるだろうし、問題を完全に解決していないことは事実です。しかし、この解決策は私たちに操縦のための余裕を与えてくれます。

1

実際には、値を記述する文字列のハードコード化された最大長はMPI_INFOです。mpi.hで定義されており、MPI_MAX_INFO_VALと命名されています。 MPI standardsによると、第9章(P397)の冒頭で:

values have an implementation-defined maximum length of MPI_MAX_INFO_VAL ... ... If either key or value are larger than the allowed maximums, the errors MPI_ERR_INFO_KEY or MPI_ERR_INFO_VALUE are raised, respectively.

のは、この値を印刷してみましょう:printf("MPI_MAX_INFO_VAL is %d\n",MPI_MAX_INFO_VAL);を試みることによって、私のOpenMPIの値は256です...ライン#define MPI_MAX_INFO_VAL 1024は、ファイルmpich3-2にありMPICH2の/src/include/mpi.h.in。その結果、ホスト名のリストは、キーの値としてMPI_INFO構造体に格納するには長すぎる可能性があります。代替として

、ホストのリストをファイルに格納することができ、ファイルの名前は、documentation of OpenMPI

に詳述するようMPI_INFO構造のキー hostfileの値として MPI_Comm_spawn()に提供することができます
+0

ありがとう@francis、私は話題に深くなるようになり、同じことが分かりました。さらに、あなたが提案するhostfileオプションを試してみましたが、無視されているようです。 http://stackoverflow.com/questions/41728334/mpi-comm-spawn-is-ignoring-mpi-info-set-hostfile – siserte

+1

をご覧ください。ようこそ。もう1つの方法は、 'host'キーを利用し、[' MPI_Comm_spawn_multiple() '](https://www.open-mpi.org/doc/v1.8/man3/MPI_Comm_spawn_multiple.3.php)を使って複数のMPI_INFO。各ホストは、[here](http://lists.mcs.anl.gov/pipermail/mpich-discuss/2006-February/001194.html)で提案されているように、ホストに異なる値を持っています。 – francis

関連する問題