Это часть кода.
if(rank==0) {
temp=10000;
var=new char[temp] ;
MPI_Send(&temp,1,MPI_INT,1,tag,MPI_COMM_WORLD);
MPI_Send(var,temp,MPI_BYTE,1,tag,MPI_COMM_WORLD);
//MPI_Wait(&req[0],&sta[1]);
}
if(rank==1) {
MPI_Irecv(&temp,1,MPI_INT,0,tag,MPI_COMM_WORLD,&req[0]);
MPI_Wait(&req[0],&sta[0]);
var=new char[temp] ;
MPI_Irecv(var,temp,MPI_BYTE,0,tag,MPI_COMM_WORLD,&req[1]);
MPI_Wait(&req[0],&sta[0]);
}
//I am talking about this MPI_Barrier
MPI_Barrier(MPI_COMM_WORLD);
cout << MPI_Wtime()-t1 << endl ;
cout << "hello " << rank << " " << temp << endl ;
MPI_Finalize();
}
<сильный>1. при использовании MPI_Barrier - Как и ожидалось, весь процесс занимает почти одинаковое количество времени, которое составляет порядка 0,02.
<сильный>2. когда не используется MPI_Barrier() - корневой процесс (отправляющий сообщение) ждет некоторое дополнительное время. и (MPI_Wtime -t1)
сильно различается, а время, затрачиваемое корневым процессом, составляет порядка 2 секунд.
Если я не ошибаюсь, MPI_Barrier используется только для приведения всех запущенных процессов на один уровень. так почему же время, когда я использую MPI_Barrier(), не составляет 2 секунды (минимум всех процессов, т.е. корневой процесс). Пожалуйста, объясни ?
t1
? - person Hristo Iliev   schedule 29.06.2013