出版时间:2011-1 出版社:英特尔亚太研发有限公司、 英特尔软件学院教材编写组 上海交通大学出版社 (2011-01出版) 作者:英特尔亚太研发有限公司,英特尔软件学院教材编写组 编 页数:265
Tag标签:无
前言
在多核体系结构出现以前的近20年里,程序员们已经习惯了由硬件的发展来自然而然地获得程序性能的提高。即,每当出现一代新的体系结构平台,原有的程序无需修改,或者只需很少的修改,就可以轻而易举地获得由摩尔定律所带来的性能提升。但是,三个主要因素的日益凸显,使得这一免费午餐即将走到尽头:第一,系统建造者遇到了难以克服的物理阻碍——太多的发热量、太多的能量消耗以及过多的能量泄露,阻止了通过进一步提高时钟频率来提升性能的方法;第二,单个芯片上可以集成的引脚(pin)数目以及带宽限制,都意味着处理器与内存性能之间的差异只会越来越大;第三,为了解决以上两个问题,所在处理器体系结构上做的妥协将不足以使得单个处理器核心承担更高性能的计算需求。因此,要想在现在的多核体系结构上获得性能的提升,必须在原有的软件基础上作出大幅度的革新。这其中最主要的是利用多线程技术,充分利用好单个芯片上的多个计算核心,提高程序整体的计算吞吐量。虽然在多核处理器出现之前,它一直属于一种比较深奥的理论,但多线程技术的出现已经有了几十年的历史。迄今为止,很多程序员都曾经在一些常见的多线程程序设计问题上经历过挫折。如何解决好这些问题?将是我们在本书中要与读者们共同探讨的重要问题。
内容概要
《英特尔软件学院系列课程培训教材:多核多线程技术》就多核体系结构、芯片发展与系统软件,多性能并行程序,多线程程序的性能调优方法,多线程编程方法以及编程中的常见问题等作了综合讲述,处处体现了多线程编程理念与综合应用能力的培养。全书深入浅出,适合广大程序员和IT从事人员使用。
书籍目录
1 多核技术导论1.1 微处理器发展史1.1.1 计算机与微处理器1.1.2 4位、8位与16位微处理器1.1.3 32位微处理器1.2 并行计算机1.2.1 并行处理思想与弗林(Flynn)分类1.2.2 超级计算机1.3 片上多核处理器架构1.3.1 多核芯片1.3.2 片上多核处理器体系结构1.3.3 典型多核芯片架构1.4 操作系统对多核处理器的支持方法1.4.1 调度与中断1.4.2 输入输出系统1.4.3 存储管理与文件系统1.4.4 典型支持多核的操作系统2 多线程并行程序性能分析方法综述2.1 性能调优周期2.1.1 搜集性能数据2.1.2 分析数据并定位性能瓶颈2.1.3 加速比性能定律2.1.4 解决性能瓶颈2.1.5 实现优化措施2.1.6 测试2.2 使用Intel Tune进行性能分析2.2.1 性能分析器功能与使用方法2.2.2 性能分析器实验2.3 MKL数学核心函数库2.3.1 MKI。数学核心函数库功能与特性2.3.2 MKL数学核心函数库性能2.3.3 MKL数学核心函数库实验2.4 Thread Checker线程检查器2.4.1 线程检查器功能与使用2.4.2 线程检查器实验2.5 Thread Profiler线程档案器2.5.1 线程档案器功能与使用2.5.2 线程档案器实验3 Intel多核处理器上的性能调优方法3.1 体系结构无关的性能调优方法3.1.1 消除循环不变量3.1.2 减少过程调用3.1.3 消除不必要的内存存取3.2 阻碍优化的因素3.2.1 编译优化选项3.2.2 变量别名3.2.3 函数调用的边际效应3.3 体系结构无关优化的小结3.4 深入理解Intel多核处理器体系结构3.4.1 Intel多核处理器微体系结构的显著特性3.5 Intel多核处理器体系结构相关的优化3.5.1 Intel多核处理器微体系结构中对代码优化的支持4 多线程编程方法综述4.1 线程的基本概念4.1.1 线程与进程的区别4.1.2 用户级线程、核心级线程和硬件线程4.1.3 线程的生命周期4.2 线程的同步4.2.1 竞争条件4.2.2 临界区4.2.3 信号量4.2.4 锁4.2.5 条件变量4.2.6 线程的本地存储4.2.7 介绍TLS的特性和使用方法4.3 多线程编程模型4.3.1 流水线4.3.2 工作组4.3.3 客户/服务器方式4.4 多线程编程的原则及要点4.4.1 静态负载平衡4.4.2 动态负载平衡4.4.3 负载平衡的难题4.4.4 串行化方面的难题5 多线程程序设计中的常见问题及解决途径5.1 线程过多5.2 数据竞争、死锁和活锁5.2.1 数据竞争5.2.2 死锁和活锁5.3 竞争激烈的锁5.3.1 优先级倒置5.3.2 锁竞争激烈的解决方法5.4 非阻塞算法5.4.1 比较并交换5.4.2 原子变量类5.4.3 非阻塞算法的介绍5.4.4 ABA问题5.4.5 cache线乒乓现象5.4.6 存储空间回收问题5.4.7 一些建议5.5 线程安全函数和库5.5.1 理解可重入与线程安全5.5.2 函数可重入化5.5.3 函数线程安全化5.6 存储问题5.6.1 带宽5.6.2 cache的利用5.6.3 存储竞争5.7 Cache相关问题5.7.1 伪共享5.7.2 存储一致性5.7.3 当前IA-32体系结构5.7.4 Itanium体系结构5.7.5 高级语言5.8 避免IA-32上的流水线停顿5.9 面向高性能的数据组织6 Unix/Linux多线程编程6.1 POSIX的一些基本知识6.2 POSIX线程库6.2.1 创建线程6.2.2 分离和接合线程6.2.3 退出和取消线程6.2.4 用户级线程和内核级线程6.2.5 线程的属性6.2.6 线程安全函数6.2.7 线程特定数据……
章节摘录
插图:7.2.2Windows操作系统中对线程概念的定义下面开始介绍线程的一些基本概念。与进程相似,线程也是由两个部分构成的:(1)线程的内核对象。操作系统用它来对线程实施管理。(2)线程堆栈。它用于维护线程在执行代码时需要的所有函数参数和局部变量。线程总是在某个进程环境中创建的,而且它的整个寿命期都在该进程中。这意味着线程在它的进程地址空间中执行代码,并且在进程的地址空间中对数据进行操作。因此,如果在单进程环境中,有两个或多个线程正在运行,那么这些线程将共享单个的地址空间。这些线程能够执行相同的代码,对相同的数据进行操作。这些线程还能共享内核对象句柄,因为句柄表依赖于每个进程而不是每个线程存在。可以预见,进程使用的系统资源会比线程多得多,因为进程需要更多的地址空间。为进程创建一个虚拟地址空间需要许多系统资源,系统中要保留大量的记录,这要占用大量的内存。另外,由于.exe和.dll文件要加载到一个地址空间,因此也需要文件资源。而线程使用的系统资源要少得多,实际上,线程只有一个内核对象和一个堆栈,保留的记录很少,因此只需要很少的内存。线程用于描述进程中的运行路径,每当进程被初始化时,系统就要创建一个主线程。对于许多应用程序来说,这个主线程是应用程序需要的唯一线程,不过,进程能够创建更多的线程来帮助执行他们的操作。设计一个拥有多线程的应用程序,就会更充分地利用系统资源,扩大该应用程序的功能,比如,当你的计算机拥有两个CPU时,你的应用程序中有两个线程,那么两个CPU都将处于繁忙状态,这就提高了程序运行的效率。
编辑推荐
《多核多线程技术》:英特尔软件学院系列课程培训教材
图书封面
图书标签Tags
无
评论、评分、阅读与下载