Рекурсивный алгоритм
Еще один способ умножения матриц: умножение подматриц и суммирование
Рекурсивная подпрограмма на языке C++:
mat_mult(A_pp,B_pp,s)
{
if(s= =1)
C=A*B;
else {
s=s/2;
P0=mat_mult(A_pp,B_pp,s);
P1=mat_mult(A_pq,B_qp,s);
P2=mat_mult(A_pp,B_pq,s);
P3=mat_mult(A_pq,B_qq,s);
P4=mat_mult(A_qp,B_pp,s);
P5=mat_mult(A_qq,B_qp,s);
P6=mat_mult(A_qp,B_pq,s);
P7=mat_mult(A_qq,B_qq,s);
C_pp=P0+P1;
C_pp=P2+P3;
C_pp=P4+P5;
C_pp=P6+P7;
}
return C;
}
Существуют и другие алгоритмы распараллеливания задачи матричного умножения.
При разных архитектурах суперкомпьютеров наиболее эффективные алгоритмы могут оказаться различными.
[Назад]
[Оглавление]
[Вперед]
Последнее обновление 21.11.2001 WebMaster