단일 시스템에서 여러 프로세스를 실행할 때 테스트 프로그램이 올바르게 작동합니다.여러 호스트간에 프로세스를 배포 할 때 Open MPI 프로그램이 작동하지 않습니다.
$ ./mpirun -np 2 ./mpi-test
Hi I'm A:0
Hi I'm A:1
A:1 sending 11...
A:1 sent 11
A:0 received 11 from 1
all workers checked in!
여러 호스트에서 동일한 프로그램을 실행하면 프로세스가 각 호스트에서 생성되지만 MPI_Send는 절대로 반환되지 않습니다.
$ ./mpirun -np 2 -host A,B ./mpi-test
Hi I'm A:0
Hi I'm B:1
B:1 sending 11...
다른 샘플 MPI 프로그램을 사용해 보았는데 같은 문제가 발생했습니다. 어떤 생각이 잘못 되었습니까?
EDIT : 모든 프로세스가 해당 시스템에서 생성되면 원격 시스템에서도 실행됩니다.
코드 :
#include <mpi.h>
int main(int argc, char** argv)
{
MPI::Init();
int rank = MPI::COMM_WORLD.Get_rank();
int size = MPI::COMM_WORLD.Get_size();
char name[256];
int len;
MPI::Get_processor_name(name, len);
printf("Hi I'm %s:%d\n", name, rank);
if (rank == 0) {
while (size > 1) {
int val;
MPI::Status status;
MPI::COMM_WORLD.Recv(&val, 1, MPI::INT, MPI::ANY_SOURCE, MPI::ANY_TAG, status);
int source = status.Get_source();
printf("%s:0 received %d from %d\n", name, val, source);
size--;
}
printf("all workers checked in!\n");
}
else {
int val = rank + 10;
printf("%s:%d sending %d...\n", name, rank, val);
MPI::COMM_WORLD.Send(&val, 1, MPI::INT, 0, 0);
printf("%s:%d sent %d\n", name, rank, val);
}
MPI::Finalize();
return 0;
}
편집 :
$ ./mpirun --bynode -host A,B --tag-output ompi_info -v ompi full --parsable
[1,0]<stdout>:package:Open MPI [email protected] Distribution
[1,0]<stdout>:ompi:version:full:1.4.3
[1,0]<stdout>:ompi:version:svn:r23834
[1,0]<stdout>:ompi:version:release_date:Oct 05, 2010
[1,0]<stdout>:orte:version:full:1.4.3
[1,0]<stdout>:orte:version:svn:r23834
[1,0]<stdout>:orte:version:release_date:Oct 05, 2010
[1,0]<stdout>:opal:version:full:1.4.3
[1,0]<stdout>:opal:version:svn:r23834
[1,0]<stdout>:opal:version:release_date:Oct 05, 2010
[1,0]<stdout>:ident:1.4.3
[1,1]<stdout>:package:Open MPI [email protected] Distribution
[1,1]<stdout>:ompi:version:full:1.4.3
[1,1]<stdout>:ompi:version:svn:r23834
[1,1]<stdout>:ompi:version:release_date:Oct 05, 2010
[1,1]<stdout>:orte:version:full:1.4.3
[1,1]<stdout>:orte:version:svn:r23834
[1,1]<stdout>:orte:version:release_date:Oct 05, 2010
[1,1]<stdout>:opal:version:full:1.4.3
[1,1]<stdout>:opal:version:svn:r23834
[1,1]<stdout>:opal:version:release_date:Oct 05, 2010
[1,1]<stdout>:ident:1.4.3
그것은, – Keith
확인을 B를 출력; 이제는 사소한 MPI 헬로우 월드 프로그램에 대해 어떨까요? #include int main() {MPI :: Init(); int rank = MPI :: COMM_WORLD.Get_rank(); int size = MPI :: COMM_WORLD.Get_size(); printf ("% d/% d/\ n", 순위, 크기); MPI :: Finalize(); 0을 반환; } –
안녕하세요, 0 of 2 안녕하세요, 1 of 2 – Keith