ПАРАЛЛЕЛЬНОЕ ПРОГРАММИРОВАНИЕ
102
fprintf(stream, "%i ", C[i][j]);
}
fprintf(stream, "\n");
}
fclose(stream);
} else {
// код починенного процесса
// прием матрицы В каждым подчиненным процессом
// printf("\n process id = %i \n",myid);
MPI_Bcast(Bsend, brows*bcols, MPI_INT, master,
MPI_COMM_WORLD);
for(i=0;i<brows;i++)
{
for(j=0;j<bcols;j++)
{
B[i][j] = Bsend[i*bcols+j];
}
}
// прием строки матрицы А каждым подчиненным процессом
for(;;)
{
MPI_Recv(buffer, acols, MPI_INT, master,
MPI_ANY_TAG, MPI_COMM_WORLD, &status);
if (status.MPI_TAG == 200)
{
// printf("\n process id = %i end \n",myid);
break;
}
else
{
row = status.MPI_TAG;
// printf("\nrow_in_%i = %i\n",myid, row);
for(i=0;i<bcols;i++)
{
ans[i] = 0;
for(j=0;j<acols;j++)
{
ans[i] = ans[i] + buffer[j]*B[j][i];
}
}
// посылка результата
MPI_Send(ans, bcols, MPI_INT, master,
row, MPI_COMM_WORLD);
}
}
}
MPI_Finalize();
return 0;
}
1...,94,95,96,97,98,99,100,101,102,103 105,106,107,108,109,110,111,112,113,114,...180