MPI_Send и MPI_Recv

Я установил MPICH2 на два компьютера (suaddell и o01) с операционной системой Windows 7. Для компиляции я использую VC ++ Express Edition 2008. Все хорошо. Я могу запускать простые MPI-приложения «Hello World» на обоих хостах. Но при попытке запустить простые приложения MPI_Send и MPI_Recv программа не завершается, она зависает. Я могу видеть, как он работает без конца на моем компьютере и удаленном хосте, используя Resource Monitor. Если я нажму «Ctrl + C», он закончится, и появится сообщение ниже, оно делает вид, что все работает нормально.


команда mpiexec и сообщение после Ctrl + C

C:\>mpiexec.exe -hosts 2 suaddell o01 -noprompt mesajlasma.exe
mpiexec aborting job...
Received Message :Hello World
_OK!_

job aborted:
rank: node: exit code[: error message]
0: suaddell: 123: mpiexec aborting job
1: o01: 123

код здесь:

#include "stdafx.h"
#include "string.h"
#include "mpi.h"

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

int  nTasks, rank;
char mesaj[20];
MPI_Status status;

MPI_Init(&argc,&argv);
MPI_Comm_size(MPI_COMM_WORLD,&nTasks);
MPI_Comm_rank(MPI_COMM_WORLD,&rank);

if(rank == 1)
{
strcpy_s(mesaj, "Hello World");
if (MPI_SUCCESS==MPI_Send(mesaj, strlen(mesaj)+1, MPI_CHAR, 0, 7, MPI_COMM_WORLD)) printf("_OK!_\n");
}

if(rank == 0)
{
MPI_Recv(mesaj, 20, MPI_CHAR, 1, 7, MPI_COMM_WORLD, &status);
printf("Received Message :%s\n", mesaj);
}

MPI_Finalize();

return 0;
}

Когда программа запускается с использованием «-verbose», я вижу, что система ждет здесь, пока не нажмет «Ctrl + C»:

. (Здесь много строк).

......command written to left: "cmd=result src=0 dest=2 tag=5 cmd_tag=0 ctx_key=
0 result=SUCCESS "
......\smpd_free_command
.......\smpd_init_command
......./smpd_init_command
....../smpd_free_command
...../smpd_state_writing_cmd
..../smpd_handle_op_write
....sock_waiting for the next event.
....\SMPDU_Sock_wait

(это последняя строка, пока я не нажму "Ctrl + C")

Как я могу исправить эту проблему.

заранее спасибо


person adba    schedule 06.09.2011    source источник
comment
Вы уверены в команде? В Linux это команда mpirun.   -  person Dimitri    schedule 06.09.2011
comment
@Dimitri: mpiexec и mpirun одинаковы, в OpenMPI оба указывают на один и тот же файл orterun.   -  person kokosing    schedule 30.09.2011


Ответы (1)


Обновите MPICH2 до последней версии 1.4.1p1.

person Dave Goodell    schedule 06.09.2011