ПАРАЛЛЕЛЬНОЕ ПРОГРАММИРОВАНИЕ
100
fclose(stream);
stream = fopen(fileB, &mode_r);
fscanf(stream, "%i",&brows);
fscanf(stream, "%i",&bcols);
for(i=0;i<brows;i++)
{
for(j=0;j<bcols;j++)
{
fscanf(stream, "%i", &(B[i][j]));
}
}
fclose(stream);
for(i=0;i<arows;i++)
{
for(j=0;j<acols;j++)
{
Asend[i*bcols+j] = A[i][j];
}
}
// посылка матрицы В каждому подчиненному процессу
for(i=0;i<brows;i++)
{
for(j=0;j<bcols;j++)
{
Bsend[i*bcols+j] = B[i][j];
}
}
MPI_Bcast(Bsend, brows*bcols, MPI_INT, master,
MPI_COMM_WORLD);
numsent = 0;
// посылка строки каждому подчиненному процессу;
// в TAG - номер строки = i для простоты полагаем
for(i=1;i<numprocs;i++)
{
MPI_Send((Asend+numsent*acols), acols, MPI_INT, i,
numsent,MPI_COMM_WORLD);
numsent++;
}
for(i=0;i<crows;i++)
{
MPI_Recv(ans, ccols, MPI_INT, MPI_ANY_SOURCE,
MPI_ANY_TAG, MPI_COMM_WORLD, &status);
sender = status.MPI_SOURCE;
anstype = status.MPI_TAG;
for(j=0;j<ccols;j++)
{
C[anstype][j] = ans[j];
}
1...,92,93,94,95,96,97,98,99,100,101 103,104,105,106,107,108,109,110,111,112,...180