例如,我有一个根进程,它发送一些计算以由工作进程完成。但是因为我的 ( 4
) 进程有限,所以我必须将工作量分担给所有进程,所以我发送了多次。我发现的解决方法是这样的:
int me = MPI.COMM_WORLD.Rank();
if(me == 0) {
sendToWorkers(); //Sends more than once to workers.
}
else {
while(true) {//wait indefinitely, accept data received from root process and work on it.
MPI.COMM_WORLD.Recv(Buf, 0, Buf.length, MPI.INT, 0, 0);
doTask(Buf);
}
}
现在问题出现了,我想将已完成处理的数据发送回根进程,但我不能做另一个while(true);
。我确信必须有一种更优雅的方式来实现这一点。
编辑1:我想发送到根进程的原因是因为它更干净。但是,或者我可以只打印来自工作进程的计算解决方案,但由于交错,输出全部被破坏。print
将方法声明为synchronized
无效。