矩阵乘法
A、B为n x n的矩阵,计算矩阵C=A·B,使用分治法(使用将矩阵分块的策略)。
Mult(C,A,B,n)
Temp matrix T[1~n,1~n]
if n=1
C[1,1] ← A[1,1]·B[1,1]
else
spawn Mult(C11,A11,B11,n/2)
spawn Mult(C12,A11,B12,n/2)
spawn Mult(C21,A21,B11,n/2)
spawn Mult(C22,A21,B12,n/2)
spawn Mult(T11,A12,B21,n/2)
spawn Mult(T12,A12,B22,n/2)
spawn Mult(T21,A22,B21,n/2)
spawn Mult(T22,A22,B22,n/2)
sync
Add(C,T,n)
Add(C,T,n)
case of partitioning>
spawn Add(C11,T11,n/2)
spawn Add(C12,T12,n/2)
spawn Add(C21,T21,n/2)
spawn Add(C22,T22,n/2)
sync
- 算法分析:
![MIT算法导论公开课之第21课 高级课题、并行算法(二)_第1张图片](http://img.e-com-net.com/image/info8/80f7724527e6490087c8434be3ffcee8.png)
- Ex:
![MIT算法导论公开课之第21课 高级课题、并行算法(二)_第2张图片](http://img.e-com-net.com/image/info8/94e9cb19d232410cadbd67f56750c3c7.png)
- 算法缺点:
在较大规模的计算过程中,使用临时矩阵T产生的分配和回收空间上的时耗会比较大,从而降低了算法的性能。
- 改进算法思路:
可以选择放弃一些并行度以减少分配和回收空间带来的时耗。
- 改进算法伪码:
Mult-Add(C,A,B,n)
case of partitioning>
spawn Mult-Add (C11,A11,B11,n/2)
spawn Mult-Add (C12,A11,B12,n/2)
spawn Mult-Add (C21,A21,B11,n/2)
spawn Mult-Add (C22,A21,B12,n/2)
sync
spawn Mult-Add (C11,A12,B21,n/2)
spawn Mult-Add (C12,A12,B22,n/2)
spawn Mult-Add (C21,A22,B21,n/2)
spawn Mult-Add (C22,A22,B22,n/2)
sync
- 改进算法分析:
![MIT算法导论公开课之第21课 高级课题、并行算法(二)_第3张图片](http://img.e-com-net.com/image/info8/dd711d84488f48819fe68d73892f96a3.png)
- Ex:
![矩阵乘法改进算法示例](http://img.e-com-net.com/image/info8/04b810958eab4658b8fed1aa245e5871.png)
归并排序
Merge-Sort(A,p,r)
if p2
spawn Merge-Sort(A,p,q)
spawn Merge-Sort(A,q+1,r)
sync
Merge(A,p,q,r)//合并排序后的两部分