内容简介
《英特尔软件学院系列课程培训教材:多核多线程技术》就多核体系结构、芯片发展与系统软件,多性能并行程序,多线程程序的性能调优方法,多线程编程方法以及编程中的常见问题等作了综合讲述,处处体现了多线程编程理念与综合应用能力的培养。全书深入浅出,适合广大程序员和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都将处于繁忙状态,这就提高了程序运行的效率。
前言/序言
在多核体系结构出现以前的近20年里,程序员们已经习惯了由硬件的发展来自然而然地获得程序性能的提高。即,每当出现一代新的体系结构平台,原有的程序无需修改,或者只需很少的修改,就可以轻而易举地获得由摩尔定律所带来的性能提升。但是,三个主要因素的日益凸显,使得这一免费午餐即将走到尽头:第一,系统建造者遇到了难以克服的物理阻碍——太多的发热量、太多的能量消耗以及过多的能量泄露,阻止了通过进一步提高时钟频率来提升性能的方法;第二,单个芯片上可以集成的引脚(pin)数目以及带宽限制,都意味着处理器与内存性能之间的差异只会越来越大;第三,为了解决以上两个问题,所在处理器体系结构上做的妥协将不足以使得单个处理器核心承担更高性能的计算需求。因此,要想在现在的多核体系结构上获得性能的提升,必须在原有的软件基础上作出大幅度的革新。这其中最主要的是利用多线程技术,充分利用好单个芯片上的多个计算核心,提高程序整体的计算吞吐量。
虽然在多核处理器出现之前,它一直属于一种比较深奥的理论,但多线程技术的出现已经有了几十年的历史。迄今为止,很多程序员都曾经在一些常见的多线程程序设计问题上经历过挫折。如何解决好这些问题?将是我们在本书中要与读者们共同探讨的重要问题。
英特尔软件学院系列课程培训教材:多核多线程技术 epub pdf mobi txt 电子书 下载 2024
英特尔软件学院系列课程培训教材:多核多线程技术 下载 epub mobi pdf txt 电子书 2024