Я пытаюсь реализовать рабочий пул здесь. Я должен отправить 100 различных чисел в числа в подчиненные процессы. Каждый подчиненный процесс затем возвращает что-то к мастер-процессу, а другое подчинение подчиняется главному. Это продолжается до тех пор, пока все 100 итераций не закончатся.MPI_Send и MPI_Recv не соответствуют C
Моя программа застряла в бесконечном цикле, который, по моему мнению, обусловлен неправильным отображением MPI_Send и MPI_Recv. Я не могу понять, что я делаю неправильно. Я потратил немало часов на изучение этого, но безрезультатно. Я новичок в MPI и программировании в целом. Код указан ниже:
if(rank == 0) {
int i,iteration = 0, a=0,inside=0,temp=0;
for(i = 1; i < slaves; i++) {
MPI_Send(&iteration,1,MPI_INT,i,0,MPI_COMM_WORLD);
MPI_Send(&a,1,MPI_INT,i,1,MPI_COMM_WORLD);
iteration++;
}
while(iteration < 100+slaves){
MPI_Recv(&temp,1,MPI_INT,MPI_ANY_SOURCE,0, MPI_COMM_WORLD, &status);
if(iteration < 100) {
MPI_Send(&iteration,1,MPI_INT,status.MPI_SOURCE,0,MPI_COMM_WORLD);
MPI_Send(&a,1,MPI_INT,status.MPI_SOURCE,1,MPI_COMM_WORLD);
}
iteration++;
inside = inside + temp;
}
}
else {
int iteration=0,count=0;
if(iteration < 100) {
MPI_Recv(&iteration,1,MPI_INT,0,0,MPI_COMM_WORLD,&status);
MPI_Recv(&count,1,MPI_INT,0,1,MPI_COMM_WORLD,&status);
MPI_Send(&count,1,MPI_INT,0,0,MPI_COMM_WORLD);
}
}
Почему цикл начинается от 1, а не от 0: 'for (i = 1; i
@ AntoJurković Поскольку мастер (ранг = 0) должен только отправлять данные подчиненным (ранг> 0). – Sohi