《多核多线程技术》PDF下载

  • 购买积分:11 如何计算积分?
  • 作  者:英特尔软件学院教材编写组编
  • 出 版 社:上海:上海交通大学出版社
  • 出版年份:2011
  • ISBN:9787313068705
  • 页数:265 页
图书介绍:本书介绍多核技术,UNIX、LINUX、WINDOWS、OPENMP等多线程编程方法,以及多线程程序设计中的常见问题及方法,主要应用于intel公司和国内300多所高校的合作培训。

1 多核技术导论 1

1.1 微处理器发展史 1

1.1.1 计算机与微处理器 1

1.1.2 4位、8位与16位微处理器 2

1.1.3 32位微处理器 4

1.2 并行计算机 7

1.2.1 并行处理思想与弗林(Flynn)分类 7

1.2.2 超级计算机 8

1.3 片上多核处理器架构 10

1.3.1 多核芯片 10

1.3.2 片上多核处理器体系结构 11

1.3.3 典型多核芯片架构 12

1.4 操作系统对多核处理器的支持方法 14

1.4.1 调度与中断 14

1.4.2 输入输出系统 17

1.4.3 存储管理与文件系统 18

1.4.4 典型支持多核的操作系统 18

2 多线程并行程序性能分析方法综述 21

2.1 性能调优周期 21

2.1.1 搜集性能数据 23

2.1.2 分析数据并定位性能瓶颈 23

2.1.3 加速比性能定律 24

2.1.4 解决性能瓶颈 27

2.1.5 实现优化措施 29

2.1.6 测试 29

2.2 使用Intel? VTune进行性能分析 29

2.2.1 性能分析器功能与使用方法 30

2.2.2 性能分析器实验 36

2.3 MKL数学核心函数库 39

2.3.1 MKL数学核心函数库功能与特性 39

2.3.2 MKL数学核心函数库性能 41

2.3.3 MKL数学核心函数库实验 42

2.4 Thread Checker线程检查器 43

2.4.1 线程检查器功能与使用 44

2.4.2 线程检查器实验 46

2.5 Thread Profiler线程档案器 52

2.5.1 线程档案器功能与使用 53

2.5.2 线程档案器实验 54

3 Intel多核处理器上的性能调优方法 61

3.1 体系结构无关的性能调优方法 61

3.1.1 消除循环不变量 64

3.1.2 减少过程调用 64

3.1.3 消除不必要的内存存取 65

3.2 阻碍优化的因素 66

3.2.1 编译优化选项 66

3.2.2 变量别名 67

3.2.3 函数调用的边际效应 67

3.3 体系结构无关优化的小结 69

3.4 深入理解Intel多核处理器体系结构 70

3.4.1 Intel多核处理器微体系结构的显著特性 71

3.5 Intel多核处理器体系结构相关的优化 73

3.5.1 Intel多核处理器微体系结构中对代码优化的支持 73

4 多线程编程方法综述 76

4.1 线程的基本概念 76

4.1.1 线程与进程的区别 77

4.1.2 用户级线程、核心级线程和硬件线程 78

4.1.3 线程的生命周期 79

4.2 线程的同步 79

4.2.1 竞争条件 80

4.2.2 临界区 80

4.2.3 信号量 81

4.2.4 锁 81

4.2.5 条件变量 83

4.2.6 线程的本地存储 84

4.2.7 介绍TLS的特性和使用方法 85

4.3 多线程编程模型 88

4.3.1 流水线 88

4.3.2 工作组 89

4.3.3 客户/服务器方式 90

4.4 多线程编程的原则及要点 90

4.4.1 静态负载平衡 91

4.4.2 动态负载平衡 91

4.4.3 负载平衡的难题 91

4.4.4 串行化方面的难题 92

5 多线程程序设计中的常见问题及解决途径 97

5.1 线程过多 97

5.2 数据竞争、死锁和活锁 100

5.2.1 数据竞争 100

5.2.2 死锁和活锁 103

5.3 竞争激烈的锁 105

5.3.1 优先级倒置 105

5.3.2 锁竞争激烈的解决方法 109

5.4 非阻塞算法 111

5.4.1 比较并交换 112

5.4.2 原子变量类 112

5.4.3 非阻塞算法的介绍 113

5.4.4 ABA问题 119

5.4.5 cache线乒乓现象 120

5.4.6 存储空间回收问题 120

5.4.7 一些建议 121

5.5 线程安全函数和库 121

5.5.1 理解可重入与线程安全 121

5.5.2 函数可重入化 122

5.5.3 函数线程安全化 125

5.6 存储问题 127

5.6.1 带宽 127

5.6.2 cache的利用 128

5.6.3 存储竞争 130

5.7 Cache相关问题 133

5.7.1 伪共享 133

5.7.2 存储一致性 134

5.7.3 当前IA-32体系结构 135

5.7.4 Itanium体系结构 137

5.7.5 高级语言 140

5.8 避免IA-32上的流水线停顿 140

5.9 面向高性能的数据组织 140

6 Unix/Linux多线程编程 142

6.1 POSIX的一些基本知识 142

6.2 POSIX线程库 144

6.2.1 创建线程 144

6.2.2 分离和接合线程 145

6.2.3 退出和取消线程 146

6.2.4 用户级线程和内核级线程 147

6.2.5 线程的属性 149

6.2.6 线程安全函数 153

6.2.7 线程特定数据 155

6.2.8 一个POSIX多线程实例 158

6.3 线程通信 159

6.3.1 互斥量 159

6.3.2 条件变量 161

6.3.3 信号处理 165

6.3.4 读写锁 171

6.3.5 信号量 174

7 Windows多线程编程 180

7.1 Windows操作系统的一些基本知识 180

7.2 Win32 API的线程库 181

7.2.1 Windows操作系统中对进程概念的定义 181

7.2.2 Windows操作系统中对线程概念的定义 182

7.2.3 使用Win32线程API 182

7.3 线程间通信 192

7.3.1 互锁函数 193

7.3.2 临界段 196

7.3.3 使用内核对象的线程间通信 200

7.3.4 事件 202

7.3.5 互斥量 206

7.3.6 信号量 209

7.4 调度优先级 211

7.5 线程池 214

8 OpenMP多线程编程及性能优化 217

8.1 OpenMP编程简介 217

8.1.1 OpenMP多线程编程发展概况 217

8.1.2 OpenMP多线程编程基础 218

8.1.3 编写OpenMP程序的准备工作 221

8.2 OpenMP多线程应用程序编程技术 224

8.2.1 循环并行化 224

8.2.2 并行区域编程 236

8.2.3 线程同步 242

8.3 OpenMP多线程应用程序性能分析 255

8.3.1 影响性能的主要因素 256

8.3.2 OpenMP程序性能分析实例 258