2

Windows 7 コンピューターのネットワーク上に MPICH2 がインストールされた Intel MKL の ScaLAPACK を使用しています。次のように、単一のマシンでジョブを実行すると正常に動作します。

mpiexec -n 16 Z:/myprogram.exe       # Z:/ is a mapped network drive

さらに、実行するとネットワーク経由で正常に動作しますcpi.exe(テスト プログラムは MPICH2 と共に提供されます)。

mpiexec -hosts 4 host1 4 host2 4 ... Z:/cpi.exe

私のコード (大きな一次方程式の解) も、単一のマシンで正常に動作します。ただし、次の場合は失敗します。

mpiexec -hosts 2 host1 8 host2 8 Z:/myprogram.exe

メッセージは次のとおりです。

Fatal error in PMPI_Comm_create: Other MPI error, error stack:
PMPI_Comm_create(609)................: MPI_Comm_create(MPI_COMM_WORLD, group=0x8
8000001, new_comm=001DF644) failed
PMPI_Comm_create(590)................:
MPIR_Comm_create_intra(250)..........:
MPIR_Get_contextid(521)..............:
MPIR_Get_contextid_sparse(683).......:
MPIR_Allreduce_impl(712).............:
MPIR_Allreduce_intra(197)............:
allreduce_intra_or_coll_fn(106)......:
MPIR_Allreduce_intra(357)............:
MPIC_Sendrecv(192)...................:
MPIC_Wait(540).......................:
MPIDI_CH3I_Progress(402).............:
MPID_nem_mpich2_blocking_recv(905)...:
MPID_nem_newtcp_module_poll(37)......:
MPID_nem_newtcp_module_connpoll(2656):
gen_cnting_fail_handler(1739)........: connect failed - Semaphore timeout period has expired. (errno 121)

job aborted:
rank: node: exit code[: error message]
0: 10.30.10.182: 1: process 0 exited without calling finalize
1: 10.30.10.184: 123
2: 10.30.10.184: 123
3: 10.30.10.184: 123
4: 10.30.10.184: 123
5: 10.30.10.184: 123
6: 10.30.10.184: 123
7: 10.30.10.184: 123
8: 10.30.10.184: 123
9: 10.30.10.184: 123
10: 10.30.10.184: 123
11: 10.30.10.184: 123
12: 10.30.10.184: 123
13: 10.30.10.184: 123
14: 10.30.10.184: 123
15: 10.30.10.184: 123

私が今知っていることから、問題は私のCコードの早い段階で発生します:

Cblacs_pinfo(&mype, &npe); // OK, gets correct values
Cblacs_get(-1, 0, &icon); // OK, gets correct value
Cblacs_gridinit(&icon, "c", mp, np); // Never returns from this line.

助けやアドバイスをいただければ幸いです。この問題を解決することは、私にとって非常に重要です。

編集: 以下のコードは機能するので、私の MPI インフラストラクチャは問題ないようです..?

int main(int argc, char* argv[])
{

 int numprocs, rank, namelen;
 char processor_name[MPI_MAX_PROCESSOR_NAME];
 printf("start\n");

 MPI_Init(&argc, &argv);
 MPI_Comm_size(MPI_COMM_WORLD, &numprocs);
 MPI_Comm_rank(MPI_COMM_WORLD, &rank);
 MPI_Get_processor_name(processor_name, &namelen);

 printf( "Process %d on %s out of %d\n" , rank, processor_name, numprocs);

 MPI_Finalize();
}
4

0 に答える 0