Например, у меня есть процесс root, который отправляет некоторые вычисления для выполнения рабочими процессами. Но поскольку у меня ограниченные (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);
}
}
Теперь возникает проблема, что я хочу отправить данные, которые завершили обработку, обратно в процесс root, но я не могу сделать еще один while(true);
. Я уверен, что должен быть гораздо более элегантный способ сделать это.
РЕДАКТИРОВАТЬ 1: Причина, по которой я хочу отправить процесс root, заключается в том, что он чище. Тем не менее, в качестве альтернативы, я могу просто распечатать вычисленные решения из рабочих процессов, но выходные данные искажены из-за чередования. Объявление метода print
как synchronized
не работает.