我用“-np 2”调用mpirun。我指的是将等级0称为“主”的过程,将等级1称为“从属”的过程。
目标:
实施
奴隶跑:
mpi::send(1, UPDATE, data);
当主人跑:
...
int updateData, computeData;
mpi::request updateRequest = world.irecv(0,UPDATE, updateData);
mpi::request computeRequest = world.irecv(0,COMPUTE, computeData);
do {
cerr << "slave ready to take a command" << endl;
if(updateRequest.test()) {
cerr << "slave ireceived UPDATE" << endl;
world.send(0, UPDATE_ACK, 0);
cerr << "slave sent UPDATE_ACK" << endl;
/* do something useful
...
...
*/
updateRequest = world.irecv(0, UPDATE, updateData);
} else if (computeRequest.test()) {
...
} else {
boost::this_thread::sleep( boost::posix_time::seconds(1) );
}
}
主代码的更多上下文:
...
world.send(1, UPDATE, 10);
cerr << "master sent UPDATE" << endl;
int dummy;
world.recv(1, UPDATE_ACK, dummy);
cerr << "master received UPDATE_ACK" << endl;
...
输出:
...
奴隶准备接受命令
master发送UPDATE
奴隶获得更新
slave发送了UPDATE_ACK
master收到UPDATE_ACK
奴隶准备接受命令
...
奴隶准备接受命令
master发送UPDATE
奴隶获得更新
slave发送了UPDATE_ACK
奴隶准备接受命令
...
问题: 主人第一次发送UPDATE消息时,一切似乎都没问题。但是,在第二次,主服务器没有收到UPDATE_ACK。