ВУЗ:
Составители:
Рубрика:
- 51 -
double a[NRA][NCA], /* matrix A to be multiplied */
b[NCA][NCB], /* matrix B to be multiplied */
c[NRA][NCB], /* result matrix C */
t1,t2; // time's momemts
/* Initialize A, B, and C matrices */
for (i=0; i<NRA; i++)
for (j=0; j<NCA; j++)
a[i][j] = i+j;
for (i=0; i<NCA; i++)
for (j=0; j<NCB; j++)
b[i][j] = i*j;
for(i=0; i<NRA; i++)
for(j=0; j<NCB; j++)
c[i][j] = 0.0;
t1=f_time(); // get start time's moment
/* Perform matrix multiply */
for(i=0; i<NRA; i++)
for(j=0; j<NCB; j++)
for(k=0; k<NCA; k++)
c[i][j] += a[i][k] * b[k][j];
t2=f_time(); // get ended time's moment
printf ("Multiplay time= %.3lf sec\n\n", t2-t1);
printf("Here is the result matrix:\n");
for (i=0; i<NRA; i++)
{
printf("\n");
for (j=0; j<NCB; j++)
printf("%6.2f ", c[i][j]);
}
printf ("\n");
} // end of MM_SER.C program
Теоретически (без учета затрат времени на обмен данными) задача умно-
жения матриц распараллеливается идеально (выходные данные вычисляются
по единому алгоритму на основе исходных и в процессе вычисления не изме-
няют последних), однако при практическом распараллеливании (разработке
программы) необходимо учитывать как задержки времени при обменах, так и
распределение по вычислительным узлам вычислений и блоков данных. Т.о.
стратегия распределения блоков матриц по ВУ должна основываться на ана-
лизе структуры процесса вычисления (т.н. тонкой информационной струк-
туре алгоритма, [1]).
Находящийся на пересечении i-той строки и j-того столбца элемент матри-
цы [C] представляет собой сумму последовательных произведений всех
(k=1 ÷ NCA) элементов i-той строки матрицы [A] на все (k=1 ÷NCA) элементы
j-того столбца матрицы [B]; см. рис.4.
double a[NRA][NCA], /* matrix A to be multiplied */ b[NCA][NCB], /* matrix B to be multiplied */ c[NRA][NCB], /* result matrix C */ t1,t2; // time's momemts /* Initialize A, B, and C matrices */ for (i=0; i
Страницы
- « первая
- ‹ предыдущая
- …
- 49
- 50
- 51
- 52
- 53
- …
- следующая ›
- последняя »