680 likes | 909 Views
并行计算. 基本设计技术. 7.1 Partitioning Principle 7.2 Divide-and-Conquer Strategy 7.3 Balanced Trees Method 7.4 Doubling Techniques 7.5 Pipelining Techniques 7.6* Accelerated Cascading Strategy 7.7* Symmetry Breaking Techniques 7.8* Random Method. 7.1 划分设计技术. 设计思想
E N D
基本设计技术 • 7.1 Partitioning Principle • 7.2 Divide-and-Conquer Strategy • 7.3 Balanced Trees Method • 7.4 Doubling Techniques • 7.5 Pipelining Techniques • 7.6* Accelerated Cascading Strategy • 7.7* Symmetry Breaking Techniques • 7.8* Random Method
7.1 划分设计技术 • 设计思想 • 将原问题划分成若干个独立的几乎相等的子问题; • 多台处理器并行地求解各子问题。 Remark: • 划分重点在于:子问题易解,组合成原问题的解方便; • 有别于分治法 • 常见划分方法 • 均匀划分 •方根划分 • 对数划分 •功能划分
7.1.1 均匀划分 • 方法: n个元素A[1..n]分成p组,每组A[(i-1)n/p+1..in/p],i=1~p • 示例: MIMD-SM模型上的PSRS排序 begin (1)均匀划分:将n个元素A[1..n]均匀划分成p段,每个pi处理 A[(i-1)n/p+1..in/p] (2)局部排序:pi调用串行排序算法对A[(i-1)n/p+1..in/p]排序 (3)选取样本:pi从其有序子序列A[(i-1)n/p+1..in/p]中选取p个样本元素 (4)样本排序:用一台处理器对p2个样本元素进行串行排序 (5)选择主元:用一台处理器从排好序的样本序列中选取p-1个主元,并 播送给其他pi (6)主元划分:pi按主元将有序段A[(i-1)n/p+1..in/p]划分成p段 (7)全局交换:各处理器将其有序段按段号交换到对应的处理器中 (8)归并排序:各处理器对接收到的元素进行归并排序 end.
7.1.1 均匀划分 • 例7.1 PSRS排序过程。N=27,p=3,PSRS排序如下:
7.1.2 对数划分 • 方法: n个元素A[1..n]分成A[(i-1)logn+1..ilogn],i=1~n/logn • 示例: PRAM-CREW上的对数划分并行归并排序 (1)归并过程: 设有序组A[1..n]和B[1..m] j[i]=rank(bilogm:A)为bilogm在A中的位序,即A中小于等于bilogm的元素个数 (2)例:A=(4,6,7,10,12,15,18,20), B=(3,9,16,21) n=8, m=4 =>logm=log4=2 => j[1]=rank(blogm:A)=rank(b2:A)=rank(9:A)=3, j[2]=…=8 B0: 3, 9 B1: 16, 21 A0: 4, 6, 7 A1: 10, 12, 15, 18, 20 A和B归并化为(A0, B0)和(A1, B1)的归并
7.1.4 功能划分 • 方法: n个元素A[1..n]分成等长的p组,每组满足 某种特性。 • 示例: (m, n)选择问题(求出n个元素中前m个最小者) - 功能划分:要求每组元素个数必须大于m; - 算法是基于Batcher排序网络,下面先介绍一些预备知识: 1.Batcher比较器 2.奇偶归并及排序网络: 网络构造、奇偶归并网络、奇偶排序网络 3.双调归并及排序网络: 定义与定理、网络构造、双调归并网络、双调排序网络
1. Batcher比较器 比较和条件交换操作: CCI 比较器网络:用Batcher比较器连成完成某一功能的网络 假定:每次每个元素只能与另一个元素比较 比较器网络的参数:比较器数目、延迟级数 7.1.4 功能划分
7.1.4 功能划分 2.1奇偶归并网络构造 • 有序序列A:a1,a2,…,an B: b1,b2,…,bm • 归并思想: • A, B中奇数号元素进入奇归并器; • A, B中偶数号元素进入偶归并器; • 再将奇归并器与偶归并器的输出交叉比较 注: (m,n)规模划分为:
0 2 0 0 2 1 4 0 2 2 2 6 3 6 3 6 3 6 3 8 1 0 1 4 4 1 5 4 4 1 8 3 5 6 5 5 8 8 8 5 7.1.4 功能划分 2.2 奇偶归并示例:m=n=4 A=(2,4,6,8) B=(0,1,3,5) (4, 4)2×(2, 2)4×(1, 1) (2,2)奇归并 (2,2)偶归并 交叉比较
1 3 1 3 8 8 3 2 5 1 3 5 8 5 1 4 2 2 5 7 7 4 2 6 6 7 4 4 7 6 8 6 7.1.4 功能划分 2.3 奇偶排序网络 • 基于奇偶归并网络 • 示例: B(8)
7.1.4 功能划分 3.1 定义及定理 • 定义:一个序列a1,a2,…,an是双调序列(Bitonic Sequence),如果: (1)存在一个ak(1≤k≤n), 使得a1≥…≥ak≤…≤an成立;或者 (2)序列能够循环移位满足条件(1) • 示例: 序列(1,3,5,7,8,6,4,2,0), (7,8,6,4,2,0,1,3,5)和(1,2,3,4,5,6,7,8) 都是双调序列。ak • 定理(Batcher定理): • 设序列a1,…,an,an+1,…, a2n是一个双调序列, 记 • bi=min{ai, ai+n} ==> MIN={b1,…,bn}, • ci=max{ai, ai+n} ==> MAX={c1,…,cn}, 则 • (1) bi≤cj (1≤i, j≤n) (2) MIN和MAX序列仍是双调的
MIN MAX MIN MAX MIN MAX MIN MAX 7.1.4 功能划分 3.2 双调归并网络构造(依据Batcher定理) • 2n个输入的双调序列两两比较形成2个大小为n的MIN和MAX序列 • MIN和MAX序列是双调的,可以递归重复进行下去 MIN双调序列 MAX双调序列
0 0 8 8 1 0 8 6 2 6 1 4 1 3 6 2 3 4 4 0 3 4 5 1 6 2 2 3 5 8 5 5 7.1.4 功能划分 3.3 双调归并示例:双调序列(8,6,4,2,0,1,3,5)的(4,4)双调归并网络 MIN归并 MAX归并 两两比较 2个(2,2)双调归并网络
3 1 1 8 8 3 2 3 5 5 3 1 1 8 4 5 7 7 5 7 6 6 2 2 4 4 7 4 6 2 8 6 7.1.4 功能划分 3.4 双调排序网络 • 基于双调归并网络 • 示例:B(8)
7.1.4 功能划分 • 基于划分原理的(m,n)-选择过程 ①将n个输入数据划分成若干个大小相等的子序列(≥m); ②使用Batcher排序网络对各子序列排序; ③将有序子序列形成双调序列,进行 两两对接; 使用Batcher定理形成MAX,MIN序 列,弃去MAX序列; 再使用Batcher排序网络将MIN序列 排成有序序列; ④重复③直至MIN序列恰好包含所需 的m个最小元素为止。
1 1 5 2 6 13 4 7 12 15 7 10 7 11 3 16 1 1 13 8 14 10 9 2 4 4 2 1 4 7 2 8 2 11 3 3 4 5 5 9 3 3 15 5 6 9 6 12 9 6 14 16 7.1.4 功能划分 • (m,n)-选择示例: B(4) 奇偶排序 双调对接比较 取MIN 分组Batcher奇偶排序 分组 分组Batcher奇偶排序 双调对接比较 取MIN
7.2 分治设计技术 • 设计思想 • 将原问题划分成若干个相同的子问题分而治之,若子问题仍然较大,则可以反复递归应用分治策略处理这些子问题,直至子问题易求解。 • 求解步骤 • 将输入划分成若干个规模相等的子问题; • 同时(并行地)递归求解这些子问题; • 并行地归并子问题的解成为原问题的解。 • 示例 • SIMD-SM模型上的FFT递归算法
7.2 分治设计技术 FFT递归算法 • DFT离散富里叶变换的定义 给定向量 ,DFT将A变换为 ,即 写成矩阵形式为 注:串行直接计算DFT需要O(n2)
7.2 分治设计技术 FFT递归算法 • FFT递归算法原理 • j为偶数时 • j为奇数时 因此将原问题的DFT划分为两个规模相等的子问题的DFT
7.2 分治设计技术 FFT递归算法 • SIMD-SM模型上的算法
7.3 平衡树设计技术 • 设计思想 • 树叶结点为输入,中间结点为处理结点,由叶向根或由根向叶逐层并行处理。 • 示例 • 求最大值 • 计算前缀和
A1 K=0 K=m-2 An/4 An/2-1 P1 Pn/2-1 An-1 K=m-1 An/2 An/2+1 An-2 P1 P2 Pn/2-1 Pn/2 An An+1 An+2 An+3 A2n-4 A2n-3 A2n-2 A2n-1 7.3 平衡树设计技术 • 算法: SIMD-TC(SM)上求最大值算法 Begin for k=m-1 to 0 do for j=2kto 2k+1-1 par-do A[j]=max{A[2j], A[2j+1]} end for end for end • 图示 时间分析 t(n)=m×O(1)=O(logn) p(n)=n/2 W(n)=O(n)---WT最优(总比较次数) 成本最优吗? P1
9 7 9 7 5 8 9 4 7 2 5 8 6 9 1 7.3 平衡树设计技术 • 求最大值示例
7.3 平衡树设计技术 前缀和 • 问题定义 n个元素{x1,x2,…,xn},前缀和是n个部分和: Si=x1*x2*…*xi, 1≤i≤n这里*可以是+或× • 串行算法: Si=Si-1*xi计算时间为 O(n) • 并行算法:SIMD-TC上非递归算法 令A[i]=xi, i=1~n, B[h,j]和C[h,j]为辅助数组(h=0~logn, j=1~n/2h) 数组B记录由叶到根正向遍历树中各结点的信息(求和) 数组C记录由根到叶反向遍历树中各结点的信息(播送前缀和)
总和 B31 前半部分和 B31 C31 h=3 j=1 P1 P1 后半部分和 B21 * B22 C22 j=1~2 h=2 B21 C21 *B13 P1 P1 P3 P3 * * B11 C13 B13 C14 B14 j=1~4 h=1 C11 B11 B12 C12 P1 P1 P2 P2 P3 P3 P4 P4 * * * * B01 *B07 *B03 *B05 B06 C06 B07 C07 B01 C01 B02 C02 B03 C03 B04 C04 C08 B08 h=0 j=1~8 C05 B05 P2 P4 P6 P1 P3 P5 P7 P8 A2 A4 A6 A8 A1 A3 A5 A7 计算:B[h,j]=B[h-1,2j-1]*B[h-1,2j] 正向遍历(求和) 7.3 平衡树设计技术 前缀和 • 例:n=8, p=8, C01~C08为前缀和 计算:C[h,1]=B[h,1] j=1 C[h,j]=C[h+1, j/2] j=even C[h,j]=C[h+1,(j-1)/2]*B[h, j] j=odd>1 反向遍历(播送前缀和)
7.3 平衡树设计技术 (3)for h=logn to 0 do //反向遍历 for j=1 to n/2h par-do (i) if j=even then //该结点为其父结点的右儿子 C[h,j]=C[h+1,j/2] end if (ii) if j=1 then //该结点为最左结点 C[h,1]=B[h,1] end if (iii) if j=odd>1 then //该结点为其父结点的左儿子 C[h,j]=C[h+1,(j-1)/2]*B[h,j] end if end for end for end SIMD-SM上非递归算法 begin (1)for j=1 to n par-do //初始化 B[0,j]=A[j] end if (2)for h=1 to logn do //正向遍历 for j=1 to n/2h par-do B[h,j]=B[h-1,2j-1]*B[h-1,2j] end for end for 时间分析: (1) O(1) (2) O(logn) (3) O(logn) ===> t(n)=O(logn) , p(n)=n , c(n)=O(nlogn)
1 2 3 4 1 2 3 4 7.3 平衡树设计技术 Prefix Sums on a Tree: More
1,3 3,7 1 2 3 4 7.3 平衡树设计技术 Prefix Sums on a Tree: More
3 7 1,3 3,7 3 1 1 2 3 4 7.3 平衡树设计技术 Prefix Sums on a Tree: More
3 1 3 3 7 7.3 平衡树设计技术 Prefix Sums on a Tree: More
3 3 1 3 3 7 7.3 平衡树设计技术 Prefix Sums on a Tree: More
3 3 3 1 3 3 7 7.3 平衡树设计技术 Prefix Sums on a Tree: More
1 3 6 10 7.3 平衡树设计技术 Prefix Sums on a Tree: More
7.3 平衡树设计技术 Prefix Sums on a Tree: More • Properties: • time: 2 log n • processors: 2n– 1 • cost O(n log n) • Comparison with PRAM algorithm • asymptotically equivalent • in practice, less efficient • weaker model
1 1 1 1 depth (time) = 3 complexity (cost) = 3 8 = 24 2 3 3 3 3 5 6 6 4 7 10 10 5 9 14 15 6 11 18 21 7 13 22 28 8 15 26 36 Specialized Circuit 7.3 平衡树设计技术
1 2 3 4 10 + 15 10 + 21 10 + 28 10 + 36 Recursive Circuit 7.3 平衡树设计技术 1 1 Circuit for 4 inputs 3 2 6 3 10 4 5 5 Circuit for 4 inputs 11 6 18 7 26 8
7.4 倍增设计技术 • 设计思想 • 又称指针跳跃(pointer jumping)技术,特别适合于处理链表或有向树之类的数据结构; • 当递归调用时,所要处理数据之间的距离逐步加倍,经过k步后即可完成距离为2k的所有数据的计算。 • 示例 • 表序问题 • 求森林的根
a b c d e f g (1) (2) (3) (4) 7.4 倍增设计技术 表序问题: • 问题描述 n个元素的列表L,求出每个元素在L 中的次第号(秩或位序或rank(k)), rank(k)可视为元素k至表尾的距离; • 示例:n=7 (1)p[a]=b, p[b]=c, p[c]=d, p[d]=e, p[e]=f, p[f]=g, p[g]=g r[a]=r[b]=r[c]=r[d]=r[e]=r[f]=1, r[g]=0 (2)p[a]=c, p[b]=d, p[c]=e, p[d]=f, p[e]=p[f]=p[g]=g r[a]=r[b]=r[c]=r[d]=r[e]=2, r[f]=1, r[g]=0 (3)p[a]=e, p[b]=f, p[c]=p[d]=p[e]=p[f]=p[g]=g r[a]=4, r[b]=4, r[c]=4, r[d]=3, r[e]=2, r[f]=1, r[g]=0 (4)p[a]=p[b]=p[c]=p[d]=p[e]=p[f]=p[g]=g r[a]=6, r[b]=5, r[c]=4, r[d]=3, r[e]=2, r[f]=1, r[g]=0
7.4 倍增设计技术 表序问题: • 算法:P155算法6.10 (1)并行做:初始化p[k]和distance[k] //O(1) (2)执行 次 //O(logn) (2.1)对k并行地做 //O(1) 如果k的后继不等于k的后继之后继,则 (i) distance[k]= distance[k]+ distance[p[k]] (ii) p[k]=p[p[k]] (2.2)对k并行地做 rank[k]=distance[k] //O(1) 运行时间:t(n)=O(logn) p(n)=n
7.4 倍增设计技术 求森林的根 • 问题描述 一组有向树F中, 如果<i, j>是F中的一条弧,则p[i]=j(即j是i的双亲);若i为根,则p[i]=i。求每个结点j(j=1~n)的树根s[j]. • 示例 初始时 P[1]=p[2]=5 p[3]=p[4]=p[5]=6 P[6]=p[7]=8 p[8]=8 P[9]=10 p[10]=11 p[11]=12 p[12]=13 p[13]=13 s[i]=p[i]
7.4 倍增设计技术 求森林的根 • 示例 第一次迭代后 第二次迭代后 • 算法:P157算法6.11 • 运行时间:t(n)=O(logn) W(n)=O(nlogn)
7.5 流水线设计技术 流水线技术: • 设计思想 • 将算法流程划分成p个前后衔接的任务片断,每个任务片断的输出作为下一个任务片断的输入; • 所有任务片断按同样的速率产生出结果。 • Remark • 流水线技术是一种广泛应用在并行处理中的技术; • 脉动算法(Systolic algorithm)是其中一种流水线技术; • 示例:5-point DFT的计算。应用秦九韶(Horner)法则,
7.5 流水线设计技术 • 示例:5-point DFT的计算,p(n)=n-1, t(n)=2n-2=O(n)
7.5 流水线设计技术 Systolic排序算法示例: Sorting 3, 4, 5, 1, 7, 2, 6 Step 1 6 3,4,5,1,7,2
7.5 流水线设计技术 Systolic排序算法示例: Sorting 3, 4, 5, 1, 7, 2, 6 Step 2 2 3,4,5,1,7 6
7.5 流水线设计技术 Systolic排序算法示例: Sorting 3, 4, 5, 1, 7, 2, 6 Step 3 7 3,4,5,1 2 6