《并行算法的设计与分析》
进 程2 进 程4进 程5
17 30 45
USTC
2019/1/11
Y.Xu Copyright
5.1.4 异步枚举排序算法的时间分析
1.假定:第(1)步之前无任何进程启动; 可在常数时间内解决读冲突; 不考虑进程间的调度时间 2.MIMD-异步枚举排序算法时间 n个进程:每个进程时间O(n)
n n2 t ( n) O ( n) O ( ) p p p ( n) p c ( n) O ( n 2 )
Parallel Algorithms
Chapter 5 Sorting and Selecting in Asynchronous
2019/1/11
Y.Xu Copyright
USTC
Parallel Algorithms 1 / Ch5
主要内容
5.1 MIMD-CREW模型上的异步枚举排序算法
5.2.2 SIMD-CRCW上的快排序算法
2.SIMD-CRCW上的快排序二叉树构造算法
输入:A[1..n]到SM,n个处理器,并且A[i]保存在Pi的LM中
输出:二叉排序树root, Lc[1..n], Rc[1..n]在SM中 begin (1)for each Pi par-do (1.1)root=i (1.2)fi=root (1.3)Lci=Rci=n+1 end for (2)repeat for each Pi, i<>fi par-do if (Ai< Afi) or (Ai= Afi and i<fi) then //Ai是LM变量, Afi是SM变量; (Ai= Afi and i<fi)为了排序稳定 (2.1)Lcfi=i //Pi将i并发写入SM变量LCfi, 竞争为fi的左孩子 (2.2)if i=Lcfi then exit else fi= Lcfi end if else //Pi将i并发写入SM变量RCfi, 竞争为fi的右孩子 (2.4)if i=Rcfi then exit else fi= Rcfi end if //Pi将处理器号i并发写入SM变量root,root的值是不确定的 //Pi并发读入root到LM变量fi中 //Lci和Rci初始化,使得不指向任何处理器
注:算法生成n个进程,第i个进程计算X中比xi小的元素数k,将xi置于SM 数组T[k+1],各进程间无通讯要求,可互相独立完成。
2019/1/11
Y.Xu Copyright
USTC
Parallel Algorithms 5 / Ch5
5.1.3 异步枚举排序算法示例
输入X={8,6,6,7,9},p(n)=2,P1生成5个进程,设进程调度按 FIFO,P1与P2首先执行进程1和进程2 (1)进程内的运算(假定各操作时间相同,X数组已在本地) k=0, X(i)>X[j], X(i)=X[j], i>j, k=k+1, T[k+1]=X[i] (2)进程1: 1
(iv)R[2i]=(q2i, s2i), (v) R[2i+1]=(q2i+1, s2i+1) (vi)生成进程2i和进程2i+1 end if
2019/1/11
end
Y.Xu Copyright
USTC
Parallel Algorithms 15 / Ch5
5.2.3 MIMD-TC模型上的异步快排序算法
(3)生成进程1
(4)进程i: (4.1)(qi, si)=R[i] else (i)求Qi的中值m //调用串行k-选择算法 (ii)将m定位在X的最终排序位置上 //对Qi进行快排序 //取出Qi的首地址和子序列的大小
(4.2)if si≤2 then 直接排序Qi
(iii)将Qi划分成小于和大于m的Q2i和Q2i+1两子序列
元素的首地址,|Qi|=si, R是存放(qi,si)的SM数组
算法输入数组X[1..n],输出为排好序的数组X[1..n]
2019/1/11
Y.Xu Copyright
USTC
Parallel Algorithms 14 / Ch5
5.2.3 MIMD-TC模型上的异步快排序算法
3. MIMD-TC上的异步快排序算法 begin (1)Q1=X (2)R[1]=(q1, n)
(6)QUICKSORT(A, s+1, r)
2019/1/11
end
Y.Xu Copyright
USTC
Parallel Algorithms 10 / Ch5
5.2.2 SIMD-CRCW上的快排序算法
1.算法说明
(1)SIMD-CRCW上的快排序算法的核心是构造二叉排序树。
(2)排序树的树根为root,左孩子为Lc[root],右孩子为Rc[root] (3)SM变量root, Lc[1..n], Rc[1..n], 及待排序数组A[1..n]
P2 8 12 Q3 ={10,15,11,12,13,9,16,14}
Pr4 Pr8 1 1 P1
Pr5 P1 3 3 Q 4 ={3,2,1} 2 6 Pr9 1 3 Pr10 1 5 P3
P3 Q5 ={7,6,5} Pr12 1 7 P3
Pr7 P2 3 4 10 Q5 ={10,11,9} 14 Pr13 Pr14 1 1 13 11 P P4 2
2019/1/11
Y.Xu Copyright
USTC
Parallel Algorithms 13 / Ch5
5.2.3 MIMD-TC模型上的异步快排序算法
1.异步快排序算法的思想 ①并行做:找中值; ②并行做:依据中值,将序列划分为<,=,>子序列; ③对子序列并行递归地执行①和②,直至子序列长度 小于某个临界值时,进行直接排序; 2.算法说明 SM的待排数组X[1..n], Qi为X的子数组,qi为Qi中第1个
2.1步
+
3
+
2
+
2
2.2步
+
3
+
2
(8与 7)
+
1 = 14
2.3步
(8与 8) (8与 6) (8与 6) (8与 9)
(3)进程2: 1+3+3+3+3+3+1=17 类似地,进程3(18),进程4(13),进程5(15)
P1: P2: 进 程1 进 程3
14 32
时 间 时 间
Parallel Algorithms 6 / Ch5
2019/1/11
Y.Xu Copyright
USTC
Parallel Algorithms 7 / Ch5
主要内容
5.1 MIMD-CREW模型上的异步枚举排序算法
5.2 MIMD-TC模型上的异步快排序算法 5.3 分布式k-选择算法
2019/1/11
Y.Xu Copyright
USTC
当p≤logn时,算法是成本最优的
Y.Xu Copyright
USTC
Parallel Algorithms 17 / Ch5
主要内容
5.1 MIMD-CREW模型上的异步枚举排序算法
5.2 MIMD-TC模型上的异步快排序算法 5.3 分布式k-选择算法
综上,算法的时间
log n 1 n n t ( n) O( i ) 2i log p O( i ) 2 2 i 0 i log p 1 log p
n n O( ( 2 p 1 log( ))) p 2p c( n) O( pn n log n)
2019/1/11
5.2.1 SISD上的快排序算法
Procedure QUICKSORT(A, q, r) //输入无序序列(Aq,…,Ar);输出有序序列(Aq,…,Ar) begin if q<r then (1)x= Aq (2)s=q
(3)for i=q+1 to r do
if Ai≤x then (i)s=s+1 (ii)swap(As, Ai) end if (4)swap(Aq, As) (5)QUICKSORT(A, q, s)
(4)n个处理器Pi存有A[i]
(5)得到二叉排序树后,只要中序遍历即可得到排序序列 (6)二叉排序树如下:
A[Lc[root]] A[root] A[Rc[root]]
A[Lc[Lc[root]]] A[Rc[Lc[root]]]
2019/1/11
Y.Xu Copyright
C
Parallel Algorithms 11 / Ch5
4.示例:X={10, 3, 7, 15, 2, 4, 11, 1, 12, 6, 8, 13, 9, 16, 14, 5}, n=16,
p(n)=4的执行过程
Pr1 P1 16 Q1 =X 8 Pr3 结 点说 明: 进 程 Pri Si m Pi 处 理 器 Qi 子 序 列
Pr2
7 4
P1 Q2 ={3,7,2,4,1,6,5} Pr6
begin
(1)for i=1 to n do create process i end for (2)process i: (2.1)k=0
(2.2)for j=1 to n do
if X[i]>X[j] then k=k+1 else if (X[i]=X[j] and i>j) then k=k+1 end if (2.3)T[K+1]=X[i] end
5.2 MIMD-TC模型上的异步快排序算法 5.3 分布式k-选择算法