转自:http://blog.csdn.net/hoping/archive/2010/02/25/5326354.aspx
本书中的主要算法都是顺序算法 ,适合于运行在每次只能执行一条指令的单处理器计算机上。在本章中,我们要把算法模型转向并行算法 ,它们可以运行在能够同时执行多条指令的多处理器计算机中。我们将着重探索优雅的动态多线程算法模型,该模型既有助于算法的设计和分析,同时也易于进行高效的实现。
并行计算机(就是具有多个处理单元的计算机)已经变得越来越常见,其在价格和性能方面差距甚大。相对比较便宜的有片上多处理器桌面电脑和笔记本电脑,其中包含着一个多核集成芯片,容纳着多个处理“核”,每个核都是功能齐全的处理器,可以访问一个公共内存。价格和性能都处于中间的是由多个独立计算机(通常都只是些 PC 级的电脑)组成的集群,通过专用的网络连接在一起。价格最高的是超级计算机,它们常常采用定制的架构和网络以提供最高的性能(每秒执行的指令数)。
多处理器计算机已经以各种形态存在数十年了。计算社团早在计算机科学形成的初期就选定采用随机存取的机器模型来进行串行计算,但是对于并行计算来说,却没有一个公认的模型。这主要是因为供应商无法在并行计算机的架构模型上达成一致。比如,有些并行计算机采用共享内存 ,其中每个处理器都可以直接访问内存的任何位置。而有些并行计算机则使用分布式内存 ,每个处理器的内存都是私有的,要想去访问其他处理器的内存,必须得向其他处理器发送显式的消息。不过,随着多核技术的出现,新的笔记本和桌面电脑目前都成为共享内存的并行计算机,趋势似乎倒向了共享内存多处理这边。虽然一切还是得由时间来证明,不过我们在章中仍将采用共享内存的方法。
对于片上多处理器和其他共享内存并行计算机来说,使用静态线程 是一种常见的编程方法,该方法是一种共享内存“虚拟处理器”或者线程的软件抽象。每个线程维持着自己的程序计数器,可以独立地执行代码。操作系统把线程加载到一个处理器上让其运行,并在其他线程需要运行时将其换下。操作系统允许程序员创建和销毁线程,不过这些操作的开销较大。因此,对于大多数应用来说,在计算期间线程是持久存在的,这也是为何称它们为“静态”的原因。
遗憾的是,在共享内存并行计算机上直接使用静态线程编程非常的困难且易于出错。原因之一是,为了使每个线程所承担的负载大致相当,就需要动态地在线程间分配工作,而这是一项极其复杂的任务。除了那些最简单的应用之外,程序员都得使用复杂的通信协议来实现调度器以对工作进行均衡。这种状况导致了并发平台 的出现,并发平台就是一个用来协调、调度、管理并行计算资源的软件平台。有些并发平台被构建成运行时库,有些则提供了具有编译器和运行时支持的全功能的并行语言。
动态多线程编程
动态多线程 是一种重要的并发平台,也是本章中要采用的模型。使用动态多线程平台,程序员可以无需关心通信协议、负载均衡以及其他静态线程编程中的复杂问题,只要明确应用中的并行性即可。该并发平台中有一个调度器,用来自动均衡计算的负载,因此大大地简化了程序员的工作。动态多线程环境所具有的功能目前还在不断的演化之中,不过基本上都包含有两个功能:嵌套并行以及并行循环。嵌套并行就是可以去“ spawn ”一个子例程,并且使得调用者和子例程能够同时执行。并行循环和普通的 for 循环相似,只是循环中的迭代可以并发地执行。
这两个功能是我们将要在本章中研究的动态多线程模型的基础。该模型的一个关键特征为,程序员只需要指明计算中的逻辑并行性,底层并发平台中的线程会自动调度和均衡计算。我们将研究基于这种模型所编写的多线程算法,以及底层并发平台能够高效进行计算调度的原理。
动态多线程模型具有如下几个重要优点:
l 它是串行编程模型的简单扩展。只需在伪码中增加 3 个“并发”关键字: parallel , spawn 以及 sync ,就可以描述多线程算法。此外,如果从多线程伪码中去掉这些关键字,就可以得到针对相同问题的串行伪代码,我们称之为“串行化”一个多线程算法。
l 它提供了一种理论上清晰的、基于“ work (工作总量)”和“ span (跨度)”这两个概念量化 parallelism (并行度)的方法。
l 许多多线程算法所涉及的嵌套并行可以从分治范型自然得出。此外,正如串行分治算法可以容易地通过递归关系进行分析一样,多线程算法也是如此。
l 该模型符合并行计算实践的演化方向。越来越多的并发平台开始支持动态多线程技术的不同变种,包括 Cilk [51, 118], Cilk++ [72], OpenMP [60], Task Parallel Library [230], and Threading Building Blocks [292] 。
在 27.1 小节中,我们会介绍动态多线程模型,以及有关 work 、 span 以及 parallelism 的度量方法,我们会使用该度量去分析多线程算法。在 27.2 小节中,我们将研究如何使用多线程来进行矩阵相乘,在 27.3 小节中,我们将处理一个更为困难的问题:归并排序的多线程算法
送上图片:
- 大小: 49.9 KB
- 大小: 42.3 KB
- 大小: 29.7 KB
- 大小: 62.6 KB
- 大小: 26.2 KB
- 大小: 25.3 KB
分享到:
相关推荐
本压缩包包含两份文件,分别是“算法导论.pdf”和“算法导论第三版课后答案-2-25章(部分中文).pdf”。前者很显然是《算法导论》第三版的电子版,读者可以通过这份PDF文档深入学习书中涵盖的各种算法,如排序、搜索...
第三版在原有基础上增加了新的章节和更新了原有的内容,比如增加了关于图算法的新章节,使得读者能够掌握更多的实用算法。 该答案集全面覆盖了书中涉及的各种算法,包括排序、搜索、图算法、动态规划、贪心算法、...
《算法导论第四版》是普林斯顿大学计算机科学系教授Robert Sedgewick和Kevin Wayne所编写的一部经典算法教材。该书深入浅出地介绍了计算机算法设计与分析的各个方面,涵盖了从基本的数据结构到复杂算法的理论知识和...
算法导论 第三版 中文pdf
算法导论中文版第二版-Cormen-带目录-扫描版.pdf
总之,《算法导论答案第四版英文版》是深入学习和研究算法的重要辅助资料,通过充分利用这份资源,读者不仅可以掌握基本的算法知识,还能提升解决问题和分析复杂性的能力,为未来在计算机科学领域的进一步学习和工作...
#### 描述:算法导论第三版英文版算法导论第三版英文版算法导论第三版英文版算法导论第三版英文版算法导论第三版英文版 - **重要性**:虽然描述部分重复,但其强调了本书的重要性。《算法导论》(第三版)是一本...
原书的第三版包含了丰富的更新和扩展,尤其适合对算法有深入研究的学生和专业人士。这本书涵盖了从基础到高级的各种算法,不仅涉及数据结构,还涉及到高等数学中的概念,如矩阵和离散数学,这使得学习过程更具挑战性...
"算法导论(第三版)基本完整中文版答案"这个压缩包文件包含了书中的习题答案,涵盖了各个章节。文件名直接反映了其内容,用户可以通过解压并查阅这些文件,找到对应习题的解答。这不仅节省了寻找答案的时间,也避免...
《算法导论》第三版的知识点广泛且深入,包括但不限于以下部分: 1. **基础算法**:如排序和搜索算法,包括冒泡排序、插入排序、选择排序、快速排序、归并排序、二分查找等。 2. **图算法**:如最短路径问题...
算法导论第四章答案算法导论第四章答案算法导论第四章答案算法导论第四章答案
算法导论第二版+习题答案,这是第二部分
《算法导论》之所以成为经典教材,是因为它不仅涵盖了算法的基础知识,还深入地介绍了各种高级算法和技术。这些内容对于理解现代计算机科学和软件开发至关重要。例如,分治策略是一种强大的算法设计方法,可以用于...
《算法导论(第三版)》是一本广受赞誉的计算机科学教材,涵盖了算法设计、分析及实现的核心概念。这本书的中文版为中国的读者提供了深入理解算法的宝贵资源。提供的基本完整中文版答案更是帮助学习者检验自己的理解...
《算法导论第三版》是计算机科学领域内一部权威且深入浅出的教材,由Thomas H. Cormen、Charles E. Leiserson、Ronald L. Rivest和Clifford Stein四位作者共同编著。该书全面介绍了算法设计与分析的基础理论及应用...
第三版相较于之前的版本有所更新,新增了van Emde Boas树和多线程算法,同时将矩阵基础的内容移至附录,以便于读者更聚焦于算法本身。递归式(现称“分治策略”)的章节内容得到修订,使得分治法的讨论更加广泛。...
《算法导论》是一本备受推崇的计算机科学教材,它深入浅出地介绍了算法的设计、分析和实现。这本书由Thomas H. Cormen、Charles E. Leiserson、Ronald L. Rivest和Clifford Stein四位作者共同撰写,是全球范围内...
最近在研习算法导论,发现课后习题的精彩程度甚至不亚于正文,对于算法导论的爱好者而言,这是一份不错的参考资料