并行算法设计与分析(2)

合集下载

高性能的并行计算算法设计与分析

高性能的并行计算算法设计与分析

高性能的并行计算算法设计与分析随着计算机技术的不断发展,越来越多的应用需要处理大量的数据和复杂的计算任务。

并行计算算法可以有效地将计算任务分解为多个子任务,并利用多个处理器同时进行计算,提高计算效率。

本文将探讨高性能的并行计算算法的设计与分析,介绍一些常用的并行计算算法和评估方法。

在设计高性能的并行计算算法时,首先需要考虑的是任务的划分与调度。

任务划分是将一个大的计算任务分解为多个子任务的过程,而任务调度是将这些子任务分配给不同的处理器进行计算的过程。

合理的任务划分和调度可以最大程度地提高并行计算的性能。

常用的任务划分策略包括数据划分和任务划分。

数据划分是将数据划分为多个小块,并将每个小块分配给不同的处理器进行计算。

而任务划分则是将计算任务分为多个子任务,并将每个子任务分配给不同的处理器进行处理。

这两种划分策略可以根据问题的特点和计算资源的分布选择合适的方式。

与任务划分相对应的是任务调度。

任务调度决定了每个处理器计算哪些子任务,并控制处理器之间的通信和同步。

常用的任务调度策略包括静态调度和动态调度。

静态调度在计算开始前就确定每个处理器的计算任务,而动态调度则是在计算过程中根据处理器的负载情况动态地调整任务分配。

除了任务划分与调度,算法设计中还需要考虑数据通信和同步的问题。

并行计算中,不同处理器之间需要进行数据交换和同步操作,以保证计算的正确性和一致性。

数据通信和同步的效率对并行计算的性能影响很大,因此需要精心设计和优化。

在进行高性能并行计算算法的分析时,可以采用多种评估指标。

常用的指标包括加速比、效率和可扩展性。

加速比定义为串行算法的执行时间与并行算法的执行时间的比值,反映了并行计算的效率。

效率表示并行计算的实际效果与理论效果之间的比例。

可扩展性表示并行算法在不同规模问题上的可扩展性能力。

为了更好地评估并行算法的性能,可以采用实际测试或者理论分析的方法。

实际测试包括在真实的并行计算环境中进行测试,收集运行时间等信息进行评估。

算法设计与分析(第2版)

算法设计与分析(第2版)
该教材在编写过程中参考了很多同行的教材和络博客,特别是“牛客”中企业面试、笔试题和资源,河南工 程学院张天伍老师和使用该教材第1版的多位老师指正多处问题和错误。
出版工作
2018年8月1日,该教材由清华大学出版社出版。
内容简介
内容简介
全书由12章构成,各章的内容如下。
第1章概论:介绍算法的概念、算法分析方法和STL在算法设计中的应用。
教材目录
教材目录
(注:目录排版顺序为从左列至右列 )
教学资源
教学资源
该教材配有配套教材——《算法设计与分析(第2版)学习与实验指导》,该配套教材涵盖所有练习题、上 机实验题和在线编程题的参考答案。
该教材每个知识点都配套了视频讲解,提供PPT课件、源码、答案、教学大纲、题库、书中全部源程序代码 (在VC++6.0中调试通过)等教学资源。
算法设计与分析(第2版)
20xx年清华大学出版社出版的图书
01 成书过程
03 教材目录源 06 作者简介
基本信息
《算法设计与分析(第2版)》是由李春葆主编,2018年清华大学出版社出版的高等学校数据结构课程系列 教材。该教材适合作为高等院校“算法设计与分析”课程的教材,也可供ACM和各类程序设计竞赛者参考。
第5章回溯法:介绍解空间概念和回溯法算法框架,讨论采用回溯法求解0/1背包问题、装载问题、子集和问 题、n皇后问题、图的m着色问题、任务分配问题、活动安排问题和流水作业调度问题的典型算法。
第6章分枝限界法:介绍分枝限界法的特点和算法框架、队列式分枝限界法和优先队列式分枝限界法,讨论 采用分枝限界法求解0/1背包问题、图的单源最短路径、任务分配问题和流水作业调度问题的典型算法。
该教材介绍了各种常用的算法设计策略,包括递归、分治法、蛮力法、回溯法、分枝限界法、贪心法、动态 规划、概率算法和近似算法等,并讨论了各种图算法和计算几何设计算法。书中配有图表、练习题、上机实验题 和在线编程题。

02_6并行算法设计

02_6并行算法设计

串行算法的直接并行化

方法描述

发掘和利用现有串行算法中的并行性,直接将串行 算法改造为并行算法。 由串行算法直接并行化的方法是并行算法设计的最 常用方法之一; 不是所有的串行算法都可以直接并行化的; 一个好的串行算法并不能并行化为一个好的并行算 法; 许多数值串行算法可以并行化为有效的数值并行算 法。
PCAM设计过程
问题 划分
通信
组合
映射
划分
方法描述 域分解 功能分解 划分判据

划分方法描述



充分开拓算法的并发性和可扩放性; 先进行数据分解(称域分解),再进行计算功 能的分解(称功能分解); 使数据集和计算集互不相交; 划分阶段忽略处理器数目和目标机器的体系 结构; 能分为两类划分:
w w w w 员工 w p p p ppp 经理 w

非集中模式
w
映射判据
采用集中式负载平衡方案,是否存 在通讯瓶颈? 采用动态负载平衡方案,调度策略 的成本如何?

并行语言实现方式与难度
实现难度
提供并行库
扩充语法成分
新语言
CPU 2
h()
q()
r()
s()
2013-8-4
27
任务分解
CPU 1 g()
CPU 0 f()
CPU 2
h()
q()
r()
s()
2013-8-4
28
任务分解
CPU 1 g()
CPU 0 f()
CPU 2
h()
q()
r()
s()
2013-8-4
29
划分判据
划分是否具有灵活性? 划分是否避免了冗余计算和存储? 划分任务尺寸是否大致相当? 任务数与问题尺寸是否成比例? 功能分解是一种更深层次的分解, 是否合理?

并行计算算法设计与分析

并行计算算法设计与分析

并行计算算法设计与分析一、引言在现代计算机系统中,并行计算已经成为一种重要的技术手段。

并行计算算法的设计与分析是研究并行计算的核心内容之一。

本文将详细介绍并行计算算法的设计与分析方法,并讨论其在实际应用中的意义与挑战。

二、并行计算算法的分类1. 数据并行算法数据并行算法采用将计算任务分割为多个子任务,每个子任务在不同的处理单元上并行执行的方式。

典型的数据并行算法包括矩阵乘法算法、并行排序算法等。

2. 任务并行算法任务并行算法是将计算任务分解为多个相互独立的子任务,并行执行的方式。

各个子任务之间没有数据依赖关系,可以同时进行计算。

典型的任务并行算法包括并行搜索算法、并行图算法等。

3. 流水线并行算法流水线并行算法是将计算任务分解为多个阶段,不同处理单元在不同阶段上并行执行,通过流水线的方式提高计算效率。

典型的流水线并行算法包括多级缓存机制的并行计算算法、指令级并行计算算法等。

三、并行计算算法的设计方法1. 并行分解并行分解是指将原始的计算任务分解为多个子任务的过程。

在并行分解过程中,需要考虑任务的划分方式、任务之间的依赖关系以及负载均衡等问题。

2. 并行通信并行通信是指多个处理单元之间的信息传递与同步。

在并行计算算法的设计中,合理的并行通信方式能够提高计算效率。

常用的并行通信方式包括消息传递接口MPI、共享内存等。

3. 并行合并并行合并是指将多个子任务的计算结果合并为最终的结果的过程。

在并行合并过程中,需要考虑合并方式以及结果的正确性验证等问题。

四、并行计算算法的分析方法1. 速度up与加速比速度up表示并行计算与串行计算相比的计算速度提升程度。

加速比表示并行计算中处理单元数量增加时,计算速度相对于串行计算的提升比例。

通过对速度up与加速比的分析,可以评估并行算法的性能优劣。

2. 并行性的度量与评估并行性是指并行计算中各个子任务可以同时进行的程度。

通过对并行性的度量与评估,可以确定并行计算算法的最佳并行度。

黄宇《算法设计与分析》课后习题解析(二)精选全文

黄宇《算法设计与分析》课后习题解析(二)精选全文

黄宇《算法设计与分析》课后习题解析(⼆)第2章:从算法的视⾓重新审视数学的概念2.1:(向下取整)题⽬:请计算满⾜下⾯两个条件的实数的区间解析:根据向下取整的含义,令,讨论a的取值范围即可解答:令,则可得:即:故的取值区间为:2.2: (取整函数)题⽬:证明:对于任意整数,(提⽰:将n划分为)。

解析:根据提⽰将n进⾏划分,根据取整函数的定义⽤k表⽰取整函数,即可证明;证明如下:因为对于任意整数,可划分为,则:① ;② ;综上:对于任意整数,, 得证;2.3: (斐波拉契数列)对于斐波拉契数列,请证明:1)题⽬:是偶数当且仅当n能被3整除解析:由斐波拉契数列的递归定义式,容易联想到数学归纳法;证明如下:(采⽤数学归纳法)i)当n = 1,2,3时,依次为1,1,2,符合命题;ii)假设当(k>=1)时命题均成⽴,则:① 当n = 3k+1时,是奇数,成⽴;② 当n = 3k+2时,是奇数,成⽴;③ 当 n = 3(k+1)时,是偶数,成⽴;综上:归纳可得为偶数当且仅当,得证;2)题⽬:x x =1+a (0<a <1)x =1+a (0<a <1)⌊x ⌋=1⇒⌊x ⌋=21⌊x ⌋=2⌊1+a +22a ⌋=1a +22a <1⇒0<a <−21⇒1<a +1<⇒21<x <2x (1,)2n ≥1⌈log (n +1)⌉=⌊logn ⌋+12≤k n ≤2−k +11n ≥12≤k n ≤2−k +11k +1=⌈log (2+k 1)⌉≤⌈log (n +1)⌉≤⌈log (2)⌉=k +1k +1=>⌈log (n +1)⌉=k +1k =⌊log (2)⌋≤k ⌊logn ⌋≤⌊log (2−k +11)⌋=k =>⌊logn ⌋=k n ≥1⌈log (n +1)⌉=k +1=⌊logn ⌋+1F n F n n ≤3k F =n F +n −1F =n −2F +3k F =3k −1>F 3k +1F =n F +3k +1F =3k >F 3k +2F =n F +3k +2F =3k +1>F 3k +3F n 3∣n F −n 2F F =n +1n −1(−1)n +1解析:同1)理,容易联想到数学归纳法证明如下:(采⽤数学归纳法)i)当n = 2时,, 易知成⽴;ii)假设当 n = k 时命题成⽴,① 若k = 2m, 则,当n = k+1 = 2m+1时,要证命题成⽴,即证: => ,代⼊递推式, 得:, 易知是恒等式,故命题成⽴;②当 k=2m+1时,同①理可证命题成⽴;综上:归纳可得,得证;2.4:(完美⼆叉树)给定⼀棵完美⼆叉树,记其节点数为,⾼度为,叶节点数为,内部节点数为1)题⽬:给定上述4个量中的任意⼀个,请推导出其他3个量解析:根据完美⼆叉树的结构特点易得解答:(仅以已知⾼度h推导其他三个量为例,其余同理)已知⾼度为h,可得:节点数:叶节点数:内部节点数:2)题⽬:请计算完美⼆叉树任意⼀层的节点个数:① 如果任意指定深度为的⼀层节点,请计算该层节点个数;② 如果任意指定⾼度为的⼀层节点,请计算该层节点个数;解析:根据完美⼆叉树的结构特点易得(注意节点深度和节点⾼度是互补的,相加为树⾼)解答:① ; ② ;2.5: (⼆叉树的性质)对于⼀棵⾮空的⼆叉树T,记其中叶节点的个数为,有1个⼦节点的节点个数为,有两个⼦节点的节点个数为1)题⽬:如果T是⼀棵2-tree,请证明。

算法设计与分析(第2版)

算法设计与分析(第2版)

作者简介
王晓东,男,1957年3月出生,福州大学计算机系教授,福建省计算机学会理事长。研究领域是算法设计与 算法评价,基于计算机络和信息安全的大规模问题求解算法与数据结构,信息可视化技术。几何计算,并行和分 布式算法设计,计算复杂性理论。先后主持了与算法设计与分析有关的国家自一然科学基金项目、国家优秀留学 回国人一员基金项目、福建省杰出人才基金项目和省自然科学基金项目等7个研究课题;获得国家科技进步二等奖 1项,省科技进步二等奖3项。主持国家精品课程“算法与数据结构”,和福建省优质硕士学位课程“算法设计与 分析”的课程建设,获2005年福建省教学成果一等奖。在国内外重要学术刊物上发表有创见性的论文50余篇;正 式出版《算法设计与分析》等学术著作7部,在算法复杂性研究方面取得了一系列理论研究成果和应用成果。例如, 在对著名的凸壳问题的计算复杂性研究成果中推广了关于判定树模型下问题的计算复杂性下界的著名的Ben-Or, 并应用于分析凸壳问题的计算复杂性,在较_般的情况下改进和完善了国际算法界知名学者Aggarwal、Steele和 Yao等提出的关于凸壳问题计算复杂性下界的结果。研究成果得到同行专家的好评并被国内权威刊物所引用。
内容提要
为了适应培养我国21世纪计算机各类人才的需要,结合我国高等学校教育工作的现状,立足培养学生能跟上 国际计算机科学技术的发展水平,更新教学内容和教学方法,提高教学质量,本书以算法设计策略为知识单元, 系统地介绍计算机算法的设计方法与分析技巧,以期为计算机科学与技术学科的Байду номын сангаас生提供广泛而坚实的计算机算 法基础知识。
目录
第1章算法引论 1.1算法与程序 1.2表达算法的抽象机制 1.3描述算法 1.4算法复杂性分析 小结 习题 第2章递归与分治策略 2.1递归的概念 2.2分治法的基本思想 2.3二分搜索技术

并行算法


定义
并行算法是并行计算中非常重要的问题。并法研究应该确立一个“理论-设计-实现-应用”的系统方法, 形成一个完善的 “架构—算法—编程”方法论,这样才能保证并行算法不断发展并变得更加实用。
简介
简单的说,算法就是求解问题的方法和步骤。并行算法,就是在并行机上用很多个处理器联合求解问题的方 法和步骤。实际上,在自然界中并行是客观存在的普遍现象,关键问题在于能不能很好的利用。由于人们的思维 能力以及思考问题的方法对并行不太习惯,且并行算法理论不成熟,所以总是出现了需求再来研究算法,不具有 导向性,同时实现并行算法的并行程序性能较差,往往满足不了人们的需求。并行算法的研究历史可简单归纳为: 上世纪70到80年代,并行算法研究处于高潮;到上世纪90年代跌入低谷;目前,又处于研究的热点阶段。现在, 人们已经可以自己搭建PC cluster,利用学习到的理论知识来解决实际问题,不再是纸上谈兵,这也为我们提供 了新的机遇和挑战 。
以上是并行算法的常规研究内容 。
未来应用
随着时代的进步,我们需要不断调整研究方向。目前并行算法研究的新走向是:并行算法研究内容不断拓宽, 并行计算被纳入研究范畴;与广大用户领域结合,注重应用,强调走到用户中去,为用户解决问题;重视新的、 非常规计算模式,如神经计算、量子计算等,这些模式能够解决某类特定问题,有其自身的优越性。
访存模型
并行计算机有以下五种访存模型:均匀访存模型(UMA)、非均匀访存模型(NUMA)、全高速缓存访存模型 (COMA)、一致性高速缓存非均匀存储访问模型(CC-NUMA)和非远程存储访问模型(NORMA)。
计算模型
不像串行计算机那样,全世界基本上都在使用冯·诺伊曼的计算模型;并行计算机没有一个统一的计算模型。 不过,人们已经提出了几种有价值的参考模型:PRAM模型,BSP模型,LogP模型,C^3模型等 。

并行算法的设计与分析》ppt课件


1
m n1
1mD a O M (x E m /2,n/2)D ,O M (E m /2,n/2) 其他
普通地有 D O M ( m E ,n ) 1 D O M ( m E /2 , n /2 )
当m=n=2t时,不D 难O M推(E n,得n)long1
Parallel Algorithms 9 / Ch3
假设一个n输入的网络能排序一切2n种0,1序列, 那么它也能排序n个数的恣意序列。
Parallel Algorithms 5 / Ch3
3.1.2 奇偶归并网络
1. 网络构造 有序序列A:a1,a2,…,an
B: b1,b2,…,bm 归并思想: A, B中奇数号元素进入奇
归并器; A, B中偶数号元素进入偶
MIN MAX
Parallel Algorithms 11 / Ch3
3.1.3 双调归并网络
3. 例:双调序列(8,6,4,2,0,1,3,5)的(4,4)双调归并网络
8
80
6
08
MIN归并
0
1
4
61
2
16
0
43
1
34
2 3
MAX归并
4
5
3 5
22 55
6 8
两两比较 2个(2,2)双调归并网络
Knuth ==>
CO M(E n,n)O (nlon)g
当mCO M =En(n=,2n)t时2,CO 不ME(难n/推2,n得/2)n122CO ME(n/2,n/2)(n1)12
2CO ME(n/2,n/2)(n1)2(2CO ME(n/4,n/4)n/21)(n1)
22CO ME(n/22,n/22)(n2)(n1)...

高性能计算中并行算法设计与优化技巧分析

高性能计算中并行算法设计与优化技巧分析在当今大数据时代,高性能计算已成为各行各业所追求的技术目标之一。

并行算法设计与优化技巧对于高性能计算的实现起着重要的作用。

本文将探讨高性能计算中并行算法设计与优化技巧,以期为读者提供深入了解并行计算的方法和技术。

一、并行算法的设计原则在高性能计算中,设计一个高效的并行算法非常重要。

以下是一些并行算法设计的原则:1. 分解:将问题分解为多个可以并行计算的子问题,以提高计算效率。

2. 负载平衡:确保各个并行计算单元上的负载均衡,避免出现某个计算单元计算量过大,影响整体性能。

3. 通信开销:尽量减少计算节点之间的通信量,提高计算效率。

4. 数据局部性:利用数据局部性原理,在并行计算中尽可能使用局部数据,以减少通信开销。

5. 同步:保证并行算法的正确性,合理地使用同步机制,避免数据竞争和死锁。

二、并行算法的优化技巧为了更好地发挥并行计算的优势,我们还需要关注一些并行算法优化技巧,以提高并行计算的效率。

以下是一些常见的并行算法优化技巧:1. 数据分布优化:合理安排数据在不同计算节点之间的分布,以减少数据传输和通信开销。

可以根据算法的特点和数据的访问模式进行数据分布的优化。

2. 局部性优化:为了利用数据局部性,可以将计算节点上的数据分割为更小的块,以减少数据响应时间。

3. 异步计算:采用异步计算模式,将计算与通信相分离,同时进行,提高并行计算的效率。

4. 线程池技术:合理地利用线程池技术,动态地创建和管理线程,提高计算资源的利用率。

5. 缓存优化:充分利用缓存的特性,减少缓存失效,提高数据访问效率。

6. 数据并行与任务并行结合:合理选择和结合数据并行和任务并行的方式,以充分发挥并行计算的优势。

三、案例分析:矩阵乘法的并行算法设计与优化技巧矩阵乘法是高性能计算中常见的应用之一。

下面将以矩阵乘法为例,分析其中的并行算法设计与优化技巧。

1. 并行算法设计:矩阵乘法可以通过划分矩阵为多个子矩阵,使用并行计算来加速。

并行计算模型设计与分析

并行计算模型设计与分析1. 引言并行计算模型是指在计算机系统中,多个处理器或计算单元同时执行不同的指令,以提高计算速度和系统性能。

随着科学技术的不断发展和计算需求的增加,设计高效的并行计算模型变得尤为重要。

本文将探讨并行计算模型的设计与分析,并分析其在科学研究和工程领域中的应用。

2. 并行计算模型2.1 任务并行模型任务并行模型是将一个大任务划分为多个小任务,并由多个处理器或计算单元同时执行这些小任务。

每个处理器独立地执行自己负责的小任务,并通过通信机制共享数据和结果。

这种模型适用于那些可以被划分为独立子问题的应用,如图像处理、数据挖掘等。

2.2 数据并行模型数据并行模型是将大量数据划分为多个子集,并由多个处理器或计算单元同时对这些子集进行操作。

每个处理器负责对自己负责的数据子集进行运算,并通过通信机制共享中间结果。

这种模型适用于那些可以被划分为相互依赖但相互独立的数据集的应用,如矩阵计算、图像处理等。

2.3 流水线模型流水线模型是将一个大任务划分为多个子任务,并由多个处理器或计算单元按照固定的顺序依次处理这些子任务。

每个处理器负责执行自己负责的子任务,并将结果传递给下一个处理器。

这种模型适用于那些具有明确执行顺序和依赖关系的应用,如编译器、图像渲染等。

3. 并行计算模型设计3.1 任务划分在设计并行计算模型时,首先需要对原始任务进行合理划分。

对于任务并行模型和数据并行模型,可以根据应用特点和需求将大任务划分为小任务或数据子集。

对于流水线模型,则需要明确每个子任务之间的依赖关系和执行顺序。

3.2 通信机制在并行计算中,不同处理器或计算单元之间需要进行通信以实现数据共享和结果传递。

设计合理的通信机制可以提高系统性能和效率。

常见的通信机制包括消息传递、共享内存等。

3.3 调度策略调度策略是指如何合理地安排不同处理器或计算单元之间的任务执行顺序。

合理的调度策略可以平衡负载,减少通信开销,提高系统的并行度。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

c(n)=O(nlogn) ,代价非最优(原因:活跃处理器数目逐层减半)
2.1.2 前缀和的并行计算
前缀和问题定义:n个元素S={x1,x2,…,xn}, S的第i 个前缀和 Si=x1*x2*…*xi, 1≤i≤n, 这里*可以是+或×。 (递归)前缀和串行算法: Si=Si-1*xi ,i=2~n, S1=x1, 计算时间 为 O(n) 。 前缀和并行算法的设计思想 令A[i]=xi, i=1~n, 引入辅助数组B[h,j]和C[h,j],h=0~logn, j=1~n/2h B[0,j]保存第j 个前缀和的初始值, j=1~ n。 数组B记录由叶到根逐层正向并行遍历树中各结点的信息(并行 求“前缀子和”)。 数组C记录由根到叶逐层反向并行遍历树中各结点的信息(并行 播送“前缀子和”) 。 C[0,j]保存最终的第j个前缀和, j=1~ n。
End
复杂度分析: 步(1)时间:O(1),步(2):logn O(1)= O(logn),步(3):logn O(1)= O(logn), t(n)= O(1)+ O(logn) +O(logn)= O(logn) , p(n)=n/2 , c(n) = n/2 O(logn) =O(nlogn) 代价非最优(原因:活跃处理器数目逐层减半) W(n)=n+(n/21 + n/22 +… + n/2logn)+(n/2logn + … n/21 + n/20)=n+(n-1)+(2n-1)=3n-2=O(n)
• 求森林根并行算法:算法2.5, p69-70, 时间t(n)=O(logn)
8 6 5 3 4 1 2 9 (a) 10 7 13
示例
初始时 P[1]=p[2]=5;p[3]=p[4]=p[5]=6;P[6]=p[7]=8;[8]=8 P[9]=10;p[10]=11;p[11]=12; p[12]=13;p[13]=13 s[i]=p[i]
a (1) (2)
2 4 4 2 4 4 3 6 5 2 1 3 1 0 0 2 1
b
2
1
c
1
d
2
1
e
1
f
2
1 1
g
0 0
(3)
(4)
2.2.2 求森林的根

问题描述
一组有向树F中, 如果<i, j>是F中的一条弧,则p[i]=j(即j是i的双亲);若i为根, 则p[i]=i。求每个结点j(j=1~n)的树根s[j].
2.1.1 并行求n个元素的最大值
算法2.1 SIMD-SM上求最大值算法 Begin // m=logn——逻辑二叉树的高度
for k=m-1 to 0 do // k为树的层号 for j=2k to 2k+1-1 par-do // k层上2k结点(处理器)并行求最大值 A[j]=max{A[2j], A[2j+1]} end for end for End 复杂度分析:t(n)=m×O(1) =O(m) =O(logn),p(n)=n/2
n-1
2
-
算法2.7
SIMD-EREW上FFT并行算法
Procedure Para-FFT(x,y) // t(n), W(n) Begin (1) if n=2 then {y0=x0+x1; y1=x0-x1; return} // O(1), W1(n)=1 (2) for l=0 to n/2-1 do in parallel // O(1), W2(n)=2(n/2)=n (2.1) ul=xl + xn/2+l ; (2.2) vl=wl(xl - xn/2+l ); (3) Do in step (3.1), (3.2) in parallel // 并行分治、递归 (3.1) Para-FFT((u0,u1,..un/2-1 ), z(1)=(z0(1), z1(1),…, zn/2-1(1))); // t(n/2), W(n/2) (3.2) Para-FFT((v0,v1,..vn/2-1 ), z(2)=(z0(2), z1(2),…, zn/2-1(2))); // t(n/2), W(n/2) (4) For j=0 to n-1 do in parallel //并行归并;O(1), W3(n)=2n (4.1 ) if j=even then yj= zj/2(1) (4.2 ) if j=odd then yj= z(j-1)/2(2)
这里 e 2i / n ,
i 1
b0 0 0 0 b 0 1 2 1 0 n 1 2 ( n 1) b n 1
a0 a1 ( n 1)( n 1) a n 1
算法2.4
SIMD-EREW上求元素表序并行算法
引入指针数组next(k),定义next(k)为k 的下一个元素,若为最后一个元素, 则next(k)=k
Begin
(1) for all k in L do in parallel // O(1)
(1.1) (1.2) P(k)=next(k); // P(k)表示k的后继
2.2 倍增技术(指针跳跃技术,pointer jumping)
设计思想 对于规模为n的问题,每当递归(迭代)调用时,将所 要处理数据之间的距离(下标,规模)逐步加倍,经过 k=logn步后,即可完成距离(规模)为2k =n的所有数据的 计算(处理)。 倍增技术特别适合于处理链表或有向树之类的数据结构。 2.2.1 表序问题 设L为n个元素的线性表,求出L中每个元素k在L中的次第 号rank(k) (位序,秩), rank(k) =L中“小于”k的元素数 目。
0 n 1
串行直接计算DFT的算法需要O(nlogn) 时间
2、FFT递归并行算法思想:将20个规模为n的原问题的DFT划分为21个规模 为n/2的子问题的DFT;将21个规模为n/2的子问题DFT划分为22个规模为 n/22的子问题的DFT;依次类推;直到将2logn-1个规模为n/2logn-1=2的子问题 为止直接求解 。
并行算法设计与分析
第2章 并行算法的设计技术
本章主要内容
• • • • • • • 2.1 平衡树方法 2.2 倍增技术 2.3 分治策略 2.4 划分原理 2.5 流水线技术 2.6 加速级联策略 2.7 破对称技术
2.1 平衡树方法
设计思想
将树叶结点作为输入,中间结点作为处理结点,由叶向根 或 由根向叶逐 层并行处理。 并行处理过程相当于由底向上(自顶向下)动态生成一个逻辑平衡二叉树。
a a
+
0
a 0+a n
2
+
1
a 1+a n
2
+1
. . .
. . . + 1 ω
n a2
DFT(n/2)
. . .
a a
n
2
-1
-1 +a n-1
n
2
a 0-a n
2
an
2
+1
ω (a 1-a n
2+1 )来自. . .-. . . ω
n
2
DFT(n/2)
-1 -an-1 )
-1
a
ω2
n
-1(a n
. . .
2.3.2 SIMD-SM上FFT并行算法
1、串行FFT递归算法
DFT离散傅里叶变换的定义
给定向量 A (a0 , a1,...,an1 )T ,DFT将A变换为 B (b0 , b1,...,bn1 )T,即
n 1
b j ak kj
写成矩阵形式为
k 0
0 j n 1
算法2.2 SIMD-SM上非递归并行求前缀和高层描述算法
Begin //高层描述并行算法——不考虑可用处理器的数目 // 自顶向下反向遍历二叉树播送前缀子和 (1)for j=1 to n par-do //初始化 (3) for h=logn to 0 do // h为树层号 B[0,j]=A[j] for j=1 to n/2h par-do //n/2h 为h层结点数 (i) if j=even then // 该结点为其父结点右儿子 end for C[h,j]=C[h+1,j/2] //由叶到根生成高为logn的逻辑二叉树 end if // 正向遍历二叉树求前缀子和 (ii) if j=1 then //该结点为最左结点 C[h,1]=B[h,1] (2)for h=1 to logn do // h为树层号 end if for j=1 to n/2h par-do //n/2h 为h层结点数 (iii) if j=odd>1 then //该结点为其父结点左儿子 B[h,j]=B[h-1,2j-1]*B[h-1,2j] C[h,j]=C[h+1,(j-1)/2]*B[h,j] end if end for end for end for end for
if P(k) != k then distance(k) =1 else distance(k) =0 // distance(k)为k的距离 // O(logn)
(2) repeat logn 次
(2.1) for all k in L do in parallel
if P(k)!=P(P(k)) then
End.,
算法复杂度:t(n)=O(1)+O(1)+t(n/2)+O(1)=t(n/2)+O(1)=O(logn), p(n)=n/2. C(n)=n/2O(logn)=O(nlogn),代价最优, Sp(n)=O(nlogn)/O(logn)=O(n),线性加速 W(n)= W1(n)+ W2(n)+ 2W(n/2) + W3(n) =1+ n+ 2W(n/2) +2n= 2W(n/2) +O(n) = 22W(n/22) +2O(n) = 23W(n/23) +3O(n) =O(nlogn)
相关文档
最新文档