当前位置:文档之家› 并行算法的设计与分析(12)

并行算法的设计与分析(12)


k=3 9 5 1
i>3
564
j>3
627
978
384
赋初 1 2 3 计算对准1: 2 3 1 计算对准2 : 3 1 2 计算对准3:1 2 3
值零 9 5 1 k=1 6 2 7 k=2
3 8 4 k=3 9 5 1
000
9 10 3
21 16 10
30 24 18
564
64 5
45 6
56 4
Aij 结点内容:Bij
Cij
循环左移一列 循环上移一行
初始: 1 2 3 987 456 654 789 321
旋转对准1: 1 2 3 旋转对准2 : 1 2 3
k=1 9 5 4 k=2
951
i>1 5 6 4 i>2
564
j>1 6 2 1 j>2
627
897
978
387
384
旋转对准3: 1 2 3
a1,1 a1,2
a1,3b3,1 c1,1+
a1,4b4,2 c1,2+
c1,3
c1,4
a2,1 a2,2 a2,3
a2,4b4,1 c2,1+
c2,2
c2,3
c2,4
a3,1 a3,2 a3,3 a3,4
c3,1
c3,2
c3,3
c3,4
12.4 矩阵乘法
12.4 Systolic乘法(H.T. Kung)
(4) for r=0 to p-1 par-do //相乘
Cr=Ar×Br // O(1)时间 (5) for m=2q to 3q-1 do //求和
for r=0 to p-1 par-do
Cr=Cr+Cr(m) // 1个路由步,O(1)时间 End 复杂度:t(n)=5logn+O(logn)=O(logn),p(n)=n3,c(n)=O(n3logn),Sp(n)=O(n3/logn)
3. 算法描述
算法12.6 Mesh上Cannon矩阵乘积算法
输入: An×n, Bn×n; 输出: Cn×n Begin
(1) for k=1 to n do // 旋转矩阵元素,数据对准 (3)for k=1 to n do
for all Pi,j par-do (i) if i>k then Ai,j Ai, (j+1)mod n // 1个路由步 endif
627
38 4
95 1
62 7
000
30 12 28
48 44 48
84 69 54
978
7 89
89 7
97 8
384
9 51
62 7
38 4
000
27 56 32
90 96 41
138 114 90
12.2.3 SIMD-CC模型上的矩阵乘法
❖ 背景:由Dekel、Nassimi和Sahni 于1981年提出SIMD-CC上的矩阵乘法 (DNS乘法), 处理器数目为n3, 运行时间为O(logn), 是一种速度很快的算法。
for i=1 to m par- do
for j=1 to k par-do
(i) ci,j = (ii) while
0 Pi,j
收到a和b时
do
ci,j if i if j
= < <
mkci,jtth+heaenbn发发送送ba给给PPii+,j1+,j1
endif endif
endwhile
endfor
P2, 1 c2,1
P3,1 c3,1
P1,2 c1,2
P2,2 c2,2
P3,2 c3,2
b1,3 b2,3 b3,3 b4,3
P1,3 c1,3
P2,3 c2,3
P3,3 c3,3
b1,4 b2,4 b3,4 b4,4
P1,4 c1,4 P2,4 c2,4 P3,4 c3,4
12.4 矩阵乘法
12.2 矩阵乘积
12.2.1 矩阵乘积串行算法
设A (aij )nn B (bij )nn C (cij )nn , C A B
c0,0
c1,0
cn1,0
c0,1 c1,1 cn1,1
c0,n1 a0,0
c1,n1
cn1,n1
a1,0 an1,0
a0,1 a1,1 an1,1
c2,1
c2,2
c2,3
c2,4
a3,1 a3,2 a3,3 a3,4
c3,1
c3,2
c3,3
c3,4
12.4 矩阵乘法
12.4 Systolic乘法(H.T. Kung)
Step 3
b1,1 b2,1
b1,2
b2,2 b3,2
b1,3
b2,3 b3,3 b4,3
b1,4
b2,4 b3,4 b4,4
n
p
P0,0
P0,1
P0,2
P0,3
nn pp
P1,0 P2,0
P1,1 P2,1
P1,2 P2,2
P1,3 P2,3
n个元素
P3,0
P3,1
P3,2
P3,3
p个块
12.2.2 SIMD-MC2上矩阵乘积并行算法—Cannon 算法
2. 算法思想
① 并行旋转元素(初始数据对准)以使得处理器Pi,j准备好Ai,s和 Bs,j以计算Ci,j : 所有块Ai,j (0≤i, j≤ p-1 )向左循环移动 i 步; 所有块Bi,j (0≤i, j≤ p-1 ) 向上循环移动 j 步;
3 8
3
7A
((bb))A,B沿k维复制
((c))A沿j维复制
2 B4
8
8
2
4
7
7
1
3
-6
-6
1
3
-5 B
-5
((d)B沿i维复制
16
32
14
28
-6
-18
-5
-15
((ee))点积
10
14
9
13
((f))沿k维求和
12.4 矩阵乘法: Systolic算法
//输入: Am×n, Bn×k; 输出: Cm×k Begin
(ii) Ai,j Ai, (j+1)mod n // 1个路由步 (iii)Bi,j B(i+1)mod n, j // 1个路由步 endfor endfor End
12.2.2 SIMD-MC2上矩阵乘积并行算法—Cannon 算法
4. 算法复杂度
tc(n)=O(n)+O(1)+O(n)=O(n), tr(n)=2n+2n=4n路由步 t(n)= tc(n) + tr(n) =O(n)+4n=O(n) c(n)=n2O(n)= O(n3),执行代价最优 Sp(n)=O(n3)/O(n)= O(n2),线性加速
12.2.2 SIMD-MC2上矩阵乘积并行算法—Cannon 算法
6. 示例
A and B after initial alignment and shifts after every step
A0,0 B0,0 A1,1 B1,0 A2,2 B2,0 A3,3 B3,0
A0,1 B1,1 A1,2 B2,1 A2,3 B3,1 A3,0 B0,1
示例
A 13 42
B
5 7
86
求C A B
k j i
101
0
0 P5
111
0
0 P7
0 100 0 110
1
0
P4
2
0
001
P6
4
011
-5
-6 P1
1 000 3
-5 P0
7
8 P3 010
P2
1 -5
(a) 初始加载
2
4
-6
8
3 7
2
4
-6
8
3 7
A
2 -6
2 -5
1 -6
1 -5
4 8
4 7
5. 算法讨论
如果MESH机器只有p个处理器,那么每个处理器就要处 理一个矩阵块。 此时,要求每个处理器具有较大的局部存储空间,而且 每个处理器串行地执行矩阵乘积算法计算A矩阵块和B矩 阵块的乘积。
12.2.2 SIMD-MC2上矩阵乘积并行算法—Cannon 算法
6. 示例
Initial alignment of A
Initial alignment of B
A0,0
A0,1
A0,2
A0,3
B0,0
B0,1
B0,2
B0,3
A1,0
A1,1
A1,2
A1,3
B1,0
B1,1
B1,2
B1,3
A2,0
A2,1
A2,2
A2,3
B2,0
B2,1
B2,2
B2,3
A3,0
A3,1
A3,2
A3,3
B3,0
B3,1
B3,2
B3,3
// 令r(m)表示r 的第m位取反;{p, rm=d}表示r (0≤r≤p-1)的集合, // r 的二进制第 m 位为d;
// 输入: An×n, Bn×n; 输出: Cn×n Begin
(1) for m=3q-1 to 2q do //按 k 维复制A, B; q=logn
for all r in {p, rm=0} par-do (1.1) Ar(m) Ar // 1个路由步 (1.2) Br(m) Br // 1个路由步
相关主题