多核怎么编程_多核应用编程实战 前言
本文关键词:多核应用编程实战,由笔耕文化传播整理发布。
前言
多年以来,家用电脑总是给人以同时处理多任务的错觉。这是因为处理器每秒钟能在不同的运行任务之间切换很多次,于是给人多个任务同时运行的表象,但也仅仅是表象。实际上,当计算机处理某个任务时,其他任务不会有任何进展。对于一次只能执行一个任务的电脑,我们可以说它只有一个处理器、CPU("核心")。核心是处理器中承担实际工作的部分。
近来,即使是家用电脑也配备了多核处理器。现在已经很难买到非多核计算机了。在多核机上,每个核心执行一个任务,从而真正做到了同时处理多任务。
要理解多核的意义,最好假设要通过一台电脑把摄像机里的电影转换为适合DVD刻录的格式。这个过程需要大量计算(密集地读写磁盘),而解压输入视频和将之转换为要刻录成盘的压缩输出视频会占用处理器的绝大部分时间。
如果忽略磁盘和内存的问题,那么也许可以在单核系统上同时转换两部电影。这两个任务可同时开始,但处理器会先用一段时间转换一个视频,然后再用一段时间转换另一个。因为处理器同一时刻只能执行一个任务,所以实际只有一个视频被压缩。如果用进度条显示转换过程的话,那么可以看到两个进度条都朝着100%完成的方向前进,但实际上转换两个视频所用的时间约为转换一个视频的两倍。
多核系统则不同,进行视频转换的核心是两个或更多,而每个核心都可处理一项任务。因此,让系统在同一时间处理两部电影将使用两个核心,且转换时间与转换一部电影时相同,即同样时间内可以完成两倍的工作量。
多核系统能在单位时间内完成更多工作,比如用单核系统转换一部电影的时间转换两部电影。此外,多核系统也能用不同的方式来分解工作。例如,多个核心可以共同转换同一部电影。在这种情况下,双核系统转换一部电影比单核系统快一倍。
本书讲解如何利用多核系统进行开发。人们常说这个话题复杂或难以理解,某种意义上这么说没有错。与任何一种编程技术一样,多核编程很难同时做到正确和高性能。但另一方面,利用多核系统显著提升应用程序性能或提高单位时间内所完成工作量的方式也有很多,只是实现的难易程度不同。
也许说"多核编程很容易"过于乐观,比较切合实际的说法是:多核编程不见得比从结构化编程转向面向对象编程更难。本书将帮助你了解编写多核系统的应用程序涉及的难点,使你能写出功能正确、性能优越,且适合扩展为在多个CPU核心运行的应用程序。
读者对象
既然已经读到这里,那么你很可能就是本书的目标读者。本书是一本实用指南,指导你编写能充分利用多核系统优势的应用程序。本书并不专门描述并行处理的某个具体方法,而是涵盖了各种方法。本书也并未拘泥于某个特定的平台,而是给出了多种操作系统和处理器的程序示例。本书还涵盖了某些高级主题,但都给出了足够的背景知识,保证读者能够理解。
本书是为熟悉C语言并有相当编程能力的读者而作。本书的目的并非教授编程语言,而是从更高层次考量如何编写功能正确、性能优良、可扩展为在多个CPU核心运行的代码。
本书的示例使用了SPARC或x86汇编语言。示例简单、有清晰的注释,重点突出,读者无需熟悉汇编语言就能看明白。
本书目标
阅读本书之后,读者将了解为类UNIX操作系统(Linux、Oracle Solaris、OS X)和Windows系统编写多核程序的方法,理解多核的硬件实现对应用程序的影响(好坏都有),知晓编写并行应用程序时的注意事项,并弄清如何编写可扩展为大量并行线程的应用程序。
本书内容
以下是本书各章的简介。
第1章介绍将涉及的硬件和软件概念,概述了处理器的内部结构。对于读者来说,要编写利用多核系统的程序不一定非得了解硬件的工作原理,但理解了处理器架构的基础知识更容易理解后面有关应用程序正确性、性能和扩展的概念。这一章还讨论了线程和进程的概念。
第2章讨论应用程序分析和优化。在把精力花在将应用程序修改为利用多核的程序之前,了解应用程序目前将时间用在哪里至关重要。这一章介绍了应用程序开发周期中的主要性能因素,并探讨如何才能提升性能。
第3章介绍如何利用多核系统在单位时间内执行更多工作,或者说如何减少完成一个任务所需的时间。首先介绍虚拟化,因为虚拟化可以在一个系统中模拟多个系统,且无需修改软件。重点在于多核系统代表了一个机会,让我们无需修改软件即可改变其工作方式。然后,这一章描述可用于编写并行应用程序的各种模式,并讨论这些模式适用的情况。
第4章阐述如何在多个线程之间安全地共享数据。这一章以讨论数据争用开篇,它在多线程代码中最容易导致问题。这一章特别在抽象层面上详述了安全共享数据和同步线程的方法,后续几章针对具体操作系统再详述细节。
第5章介绍如何使用POSIX线程编写并行应用程序。POSIX线程是在类UNIX操作系统(如Linux、Mac OS X和Solaris)上实现的标准。POSIX线程库提供了许多对于编写并行应用程序很实用的构建模块,,为开发提供了极大的灵活性和便利。
第6章介绍如何使用Windows本地线程为Windows编写并行应用程序。Windows提供了与POSIX类似的同步和数据共享原语,但Windows和POSIX对这些功能的接口和要求不同。
第7章描述编译器提供的自动并行化机会和限制。这一章还介绍了OpenMP规范,这一规范使编写利用多核处理器的应用程序变得相对简单。
第8章探讨如何抛开操作系统或编译器提供的库功能来编写并行应用程序。我们有充分的理由为同步或共享数据编写自定义代码,比如想要获得更好的控制或更出色的性能。但要编写正常运行的代码,也有不少需要避免的陷阱。
第9章讨论如何对应用程序加以改进以提高其扩展性,从而使多核系统完成的工作尽可能多。这一章介绍了限制扩展性的常见领域,阐述了确定扩展性限制范围的方式。面向多核系统进行开发和面向多处理器系统进行开发的不同之处恰恰在于扩展,而这一章还讨论了硬件实现带来的这一重要差别。
第10章涵盖编写并行应用程序的多种方式。随着多核处理器成为主流,人们也在尝试其他方法,以便克服障碍编写出正确、快速、可扩展的并行代码。
第11章是最后一章,对全书内容进行了总结。
【责任编辑:book TEL:(010)68476606】
回书目 下一节
原文:多核应用编程实战 前言 返回读书频道首页
本文关键词:多核应用编程实战,由笔耕文化传播整理发布。
本文编号:208295
本文链接:https://www.wllwen.com/wenshubaike/mishujinen/208295.html