第9章并行算法
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
12
冒泡排序的步骤
13
可以通过一些手段来提高其性能,比如当没有发现交 换时便结束循环等,不过这并不改变算法运行的时间 复杂度O(n2)。 冒泡排序顺次比较相邻的元素,这在本质上是一个串 行的过程,很难并行化。将顺次的比较过程并行化将 导致算法错误,得不到预想的结果。 考虑到内循环的下一次迭代的“冒泡”动作可以在前 一次迭代完成之前开始,只要下一次“冒泡”动作不 影响前一次迭代,所以可以开发流水线并行算法。
比较操作和位臵交换操作是排序算法中的基本操作, 它们在串行程序中都很容易实现,因为要比较大小或 交换位臵的两个元素都在存储空间中。而在并行算法 中,这些操作并不是想象的那么容易,因为两个元素 分别位于不同的结点上。 考虑一种极端的情况,待排序的元素与处理器的个数 一样多,这样每个处理器上存储一个待排序元素。假 定在算法执行过程中,两个处理器Pi和Pj要比较它们的 元素ai和aj,比较结束后,Pi上要存储两个元素中较小 的一个,而Pj则存储较大的一个。 如何完成比较呢?
7
Alternative Message Passing Method
Version 2
For P1 to send A to P2 and P2 to send B to P1. Then both processes perform compare operations. P1 keeps the larger of A and B and P2 keeps the smaller of A and B:
9
Merging Two Sublists — Version 1
第一步
第二步 p processors and n numbers. n/p numbers assigned to each processor:
10
Merging Two Sublists — Version 2
11
冒泡排序串行算法
很多情况下要求源数据和处理结果数据都分布在不同的结点上, 这就要考虑数据的分布问题。
(2)、一个直观的办法是把所有参与排序的处理器和数据编号, 源数据按照其编号取模分布到相应的处理器上。
排序结果在各个处理器上均匀分布,满足小编号处理器上的每个 元素均小于大编号处理器上的每个元素。
5
问题2:不同处理器上的元素如何进行大小比较
6百度文库
Message-Passing Compare and Exchange
Version 1
P1 sends A to P2, which compares A and B and sends back B to P1 if A is larger than B (otherwise it sends back A to P1):
串行冒泡排序算法包括两个循环,每次操作比较两个 相邻的元素,然后通过交换使之符合指定的排序。 以下是串行冒泡排序算法: procedure BUBBLE_SORT(n) Begin for i:=n-1 downto 1 do for j:=1 to i do compare-exchange (aj,aj+1); End BUBBLE_SORT
19
(归并排序)Mergesort
A classical sequential sorting algorithm using divideand-conquer approach. Unsorted list first divided into half. Each half is again divided into two. Continued until individual numbers are obtained. Then pairs of numbers combined (merged) into sorted list of two numbers. Pairs of these lists of four numbers are merged into sorted lists of eight numbers. This is continued until the one fully sorted list is obtained.
25
超立方体上的并行化
基本思路: 一个d维的超立方体可以看作是由两个d-1维的超立方体互联而 成,利用这一点,可以把一个d维的超立方体存储的一个序列划分 成两个子序列而分别存放到两个d-1维的超立方体上,使得每个d-1 维立方体的每个处理器都跟另外一个立方体的某处理器直接相连。 这样,一个大于界的子序列与小于界的子序列可以分别放在不同的 超立方体上。
分布式系统开发
计算机学院计算机科学与技术系 主讲:陈 蕾 E-mail: chenleijx@sohu.com
1
第九章 并行算法
9.1 并行排序 9.2 矩阵运算 9.3 组合优化
2
8.1 并行排序
并行排序研究的必要性: 排序是计算机所需要经常完成的操作。由于排序后的数据常常比无 序的数据更容易处理(比如查找的效率更高),所以很多算法要求 数据是排序的。大数据量的排序在单个处理器上串行执行需要消耗 大量的时间,这就提出了并行排序的需求。 排序的分类:内部排序和外部排序 常用的排序算法大多是基于比较(Comparison-based)的排序, (n log n) 已经证明,这类排序算法的最低时间复杂度是 ,其中n是待 排序的元素数目。 因此如果使用n个处理器基于顺序排序算法的最好并行时间复杂性 为:
3
并行排序的几个关键问题
串行排序算法的并行化需要把待排序的元素分布到各 个处理器上,在这过程中有几个问题需要解决。
1. 数据如何分配到不同的处理器上 2. 不同处理器上的元素如何进行大小比较
4
问题1: 数据如何分配到不同的处理器
(1)、可以把所有数据放在一个结点上,其它结点从此结点取数 据并把处理结果再回送给此结点。
(a)3-立方
(b)4-立方
26
1. 整个序列在一个处理器上
Suppose a list of n numbers placed on one node of a ddimensional hypercube.
List can be divided into two parts according to the quicksort algorithm by using a pivot determined by the processor, with one part sent to the adjacent node in the highest dimension.
20
Mergesort的并行化
使用树状进程分配的归并排序 Tcomp=2p-2-logp Tcomm=2(logp)tstartup+2ntdata
21
奇偶归并排序
奇偶归并排序将两个有序序列归并为一个有序序列, 对于给定的两个序列a[n]和b[n],该算法描述如下: 1、每个序列的奇数下标索引的元素,即a1,a3,…,an-1 和b1,b3,…,bn-1被归并为一个有序序列c1,c2,…,cn; 2、每个序列的偶数下标索引的元素,即a2,a4,…,an和 b2,b4,…,bn被归并为一个有序序列d1,d2,…,dn。 3、最后的有序序列e1,e2,…,e2n通过以下方法得到: e2i=min{ci+1,di} e2i+1=max{ci+1,di}
14
流水线并行
15
一维线性网络中的奇偶置换冒泡排序
设待排序的元素数目为n,以n为偶数来说明奇偶臵换排 序。奇偶臵换排序用n个阶段完成对n个元素的排序,每 一个阶段需要n/2个比较+交换操作。这n个阶段分成两 类,分别称为奇操作阶段和偶操作阶段。 设 a1, a2 ,...,K,...,an 是待排序的序列,在每个奇操作阶段, 奇数索引的元素与自己的右邻居进行比较并在必要时交换, 同样,在每个偶操作阶段,偶数索引的元素与自己的右邻 居进行比较和交换。 经过n个阶段进行这样的操作后,整个序列便处于有序状 态。
Then the two nodes can repeat the process.
27
Example
3-dimensional hypercube with the numbers originally in node 000:
28
数据最初放在节点000时的超立方体快速排序算法
Finally, the parts sorted using a sequential algorithm, all in parallel. If required, sorted parts can be returned to one processor in a sequence that allows processor to concatenate sorted lists to create final sorted list.
22
Odd-Even Merging of Two Sorted Lists
每个序列的奇、偶数下 标索引的元素分别被归 并为一个有序序列
e2i=min{ci+1,di} e2i+1=max{ci+1,di}
23
快速排序的并行化
Tcomp=n+n/2+n/4+….=2n Tcomm=(logp)tstartup+ntdata
注意避免死锁 NOTE: Different processors operating at different precision could Conceivably produce different answers if real numbers are being compared.
8
再来看每个处理器上存储多个待排序元素的情况。设 处理器个数为p,待排序元素数目为n,则每个处理器 上平均有n/p个元素。 定义每个处理器上的所有元素为一个超元素,定义超 元素之间的大小关系。当一个超元素E1中的所有元素 都不大于另一个超元素E2中的任何元素时,定义为 E1≤E2。同理定义等于(=)、小于等于(≥)等关 系。与普通元素不同的是,两个超元素之间可能不是 ≥、=、≤中的任何一个。容易验证,超元素之间的≤ 关系满足传递性。 来看两个编号相邻的处理器之间如何进行元素比较。 与每个处理器上一个元素的情形类似,每个处理器把 超元素发给对应的处理器,每个处理器在接受到对方 的超元素后,合并两个超元素并排序(归并排序), 然后Pi取值较小的一半,而Pj则取值较大的一半。整 个过程分四步:通信-比较-合并-拆分
24
在专用网络Hypercube超立方体上的 排序
Quicksort
Hypercube network has structural characteristics that offer scope for implementing efficient divide-and-conquer sorting algorithms, such as quicksort.
16
对8个数进行奇偶互换排序
17
串行奇偶置换冒泡排序程序
1. procedure ODD-EVEN(n) 2. begin 3. for i:=1 to n do 4. begin 5. if i is odd then 6. for j:=0 to n/2-1 do 7. compare-exchange(a2j+1,a2j+2; 8. if i is even then 9. for j:=1 to n/2-1 do 10. compare-exchange(a2j,a2j+1); 11. end for 12. end ODD-EVEN
18
串行奇偶置换冒泡排序的并行化
1. procedure ODD-EVEN_PAR(n) 2. begin 3. id:=processor’s label 4. for i:=1 to n do 5. begin 6. if i is odd then 7. if id is odd then 8. compare-exchange_min(id+1); 9. else 10. compare-exchange_max(id-1); 11. if i is even then 12. if id is even then 13. compare-exchange_min(id+1); 14. else 15. compare-exchange_max(id-1); 16. end for 17. end ODD-EVEN