Введение в практику разработки параллельных программ в стандарте MPI. Баканов В.М - 56 стр.

UptoLike

Составители: 

- 56 -
{
c[i][k] = 0.0;
for (j=0; j<NCA; j++)
c[i][k] += a[i][j] * b[j][k];
}
В конце работы все numworkers процессов возвращают rows*NCB строк
[C] главному процессу посредством выполнения MPI_Send(&c, rows*NCB,
MPI_DOUBLE, MASTER, FROM_MASTER, MPI_COMM_WORLD); причем
предварительно номер первой строки offset передается посредством
MPI_Send(&offset, 1, MPI_INT, MASTER, FROM_MASTER, MPI_COMM_WORLD), а
число строк rows - MPI_Send(&rows,1, MPI_INT, MASTER, FROM_MASTER,
MPI_COMM_WORLD). MASTER-процесс принимает эти данные вызовом
MPI_Recv(&c[offset][0], rows*NCB, MPI_DOUBLE, source, FROM_WORKER,
MPI_COMM_WORLD, &status).
Ниже приводится начало выдачи программы при NRA=1000 и числе вы-
числительных узлов 12 (видно, что в случае невозможности деления NRA на
numworkers нацело равный extra=NRA%numworkers отстаток распределяется
равномерно по первым 4 вычислительным узлам):
Number of worker tasks = 12
task ID = 5
task ID = 11
task ID = 10
task ID = 1
task ID = 0
task ID = 6
task ID = 7
task ID = 3
task ID = 2
task ID = 9
task ID = 8
task ID = 12
task ID = 4
...sending 84 rows to task 1
...sending 84 rows to task 2
...sending 84 rows to task 3
...sending 84 rows to task 4
...sending 83 rows to task 5
...sending 83 rows to task 6
...sending 83 rows to task 7
...sending 83 rows to task 8
...sending 83 rows to task 9
...sending 83 rows to task 10
...sending 83 rows to task 11
...sending 83 rows to task 12
Эффективный (т.н. клеточный, основанный на распределении блоков мат-
риц по ОП процессов по принципу
шахматной доски) описан в работе [3];
  {
   c[i][k] = 0.0;
    for (j=0; j