《软件优化技术 IA-32平台的高性能手册 high-performance recipes for IA-32 platforms》PDF下载

  • 购买积分:12 如何计算积分?
  • 作  者:(美)Richard Gerber等著;王涛,单久龙,孙广中等译
  • 出 版 社:北京:电子工业出版社
  • 出版年份:2007
  • ISBN:7121040050
  • 页数:346 页
图书介绍:本书填补了软件优化的初级课本与解决专门Intel架构的高级手册之间的空白。随着Intel扩展内存64位技术(Intel EM64T)、多核处理技术、超线程技术、OpenMP和多媒体扩展等新技术的流行,Intel 出版社邀请另外三位Intel专家与原作者一起扩展、更新形成了本书的第二版。《软件优化速成》第二版提供了如何优化软件,使软件在Intel平台上获得巨大性能提高的最新技术。通过简单的讲解和示例,四位Intel专家向我们展示了如何从以下一些方面改进软件性能,包括算法、内存访问、分支预测、自动矢量化、SIMD指令、多线程和浮点计算。想了解最新技术以提高应用性能和那些想提高编码技巧的开发者,均可以从本书中受益。

第一部分 性能分析工具和基本概念(开胃品) 3

第1章 引言 3

软件优化 4

软件优化陷阱 4

软件优化过程 6

要点 7

第2章 测试基准 9

Benchmark的属性 10

可重复性(必须) 10

代表性(必须) 11

易用性(必须) 11

可验性(必须) 11

时间可测性(可选) 11

完全覆盖性(条件依赖) 12

精确性(条件依赖) 12

Benchmark示例 12

要点 16

第3章 性能分析工具 18

计时机制 18

优化编译器 20

使用Intel?C++和Fortran编译器 20

特定处理器优化 21

针对特定处理器的函数实现 22

其他编译器优化 23

软件分析的类型 24

性能监测 25

VTuneTM性能分析器 25

采样 26

调用图分析 27

Intel编译器Codecov分析器 28

Microsoft Visual C++分析器 29

采样与插桩型分析器的比较 30

尝试、错误、判断力与耐心 31

要点 32

第4章 热点 34

什么因素导致热点和冷点? 36

不仅仅是时间 36

均匀执行与没有热点 37

要点 39

第5章 处理器体系结构 41

功能模块 42

要两个汉堡! 43

取指与译码 45

指令执行 47

退出 50

寄存器和内存 50

要点 52

第二部分 性能相关问题(主菜) 55

第6章 算法 55

计算复杂度 55

指令选择 56

数据相关与指令并行 61

内存需求 63

并行算法 64

算法的通用性 65

检测算法问题 65

要点 69

第7章 分支 72

找到关键的预测错误的分支 74

第一步:找到预测错误的分支 74

第二步:找到耗时的热点 75

第三步:确定预测错误的分支的比率 76

最后的全面检查 77

分支的不同类型 78

使分支更容易被预测 80

使用CMOV移除分支 81

使用标志移除分支 83

使用min/max指令移除分支 84

通过额外工作去除分支 85

要点 86

第8章 内存 88

内存概览 89

主存和虚拟内存 89

处理器缓存 90

缓存细节 92

硬件预取 93

软件预取 94

不通过缓存写数据:非临时性写 95

影响内存性能的问题 96

强制缓存载入 96

容量缓存载入 97

冲突缓存载入 97

缓存效率 98

存储转发 99

数据对齐 100

编译器和数据对齐 101

软件预取 102

检测内存问题 103

找到页缺失 104

找到存储转发问题 106

找到L1缓存缺失 106

理解潜在的改进 108

修复内存问题 109

要点 115

第9章 循环 117

数据相关 118

循环分配和融合 120

循环剥离 122

循环展开与合并 123

循环交换 126

循环不变计算 128

循环不变分支 128

循环不变结果 129

要点 130

第10章 慢操作 132

慢指令 132

查找表 134

系统调用 137

系统空闲进程 140

要点 143

第11章 浮点 145

数值异常 145

清零和非格式化到零 148

精度 149

打包和标量模式 152

浮点到整数的转换,取整 153

下界和上界函数 154

浮点操作技巧 154

浮点类型到整型的转换 155

平方根 155

倒数平方根 155

要点 156

第12章 SIMD技术 158

SIMD技术介绍 159

MMXTM技术 159

SIMD流扩展 160

使用SIMD技术 161

自动矢量化 162

C++类库 163

Intrinsics 164

嵌入汇编语言 165

四种方法的优缺点 166

SIMD技术的考虑事项 167

决定何处使用SIMD技术 167

内存对齐 167

数据布局 169

选择合适的打包数据类型 171

SIMD和x87 FPU计算的兼容性 173

要点 173

第13章 自动矢量化 176

矢量化相关的编译开关 176

常用的编译开关 176

编译开关使用示例 179

矢量化相关的编译提示 180

常用的编译提示 180

编译提示使用示例 185

矢量化指南 186

设计与实现的考虑 187

矢量化诊断的使用 189

别名与负面影响的最小化 192

编程风格 196

目标体系结构 197

要点 200

第14章 面向处理器的特殊优化 202

32位Intel?体系结构 202

Pentium?M处理器 204

一级指令缓存 205

指令译码 206

指令延迟 207

指令集 208

浮点控制寄存器 208

MXCSR状态寄存器 209

一级数据缓存 209

内存预取 209

处理器事件 210

部分寄存器延迟 210

部分标志延迟 212

暂停指令 212

要点 213

第15章 多处理技术介绍 214

并行程序设计 215

线程管理 217

使用OpenMP+高层线程化 217

低层线程 220

线程化的目标 220

线程化的相关问题 222

Intel编译器与线程工具 225

要点 226

第16章 OpenMP+多线程 228

OpenMP+的关键要素 228

多线程执行模型 232

OpenMP+的存储模型 234

OpenMP+的限制 238

编译OpenMP+程序 239

自动并行化 241

线程化指南 244

要点 246

第17章 任务队列和OpenMP+的高等应用专题 249

任务队列—Intel对OpenMP+的扩展 249

任务队列执行模型 249

任务队列和任务结构 252

线程化N皇后问题:一个实例研究 255

线程级流水线并行 260

开发嵌套式并行性 263

多级并行 267

线程绑定研究 269

理解循环调度 271

要点 274

第三部分 设计和应用优化(甜点) 279

第18章 实例研究:线程化视频编码器 279

H.264视频编码器的初始性能 279

H.264视频编码器的并行化 280

任务和数据划分 281

切片级并行性 282

帧级并行 283

基于两个切片队列的实现 284

基于任务队列模型的实现 285

性能 288

速度提高与压缩效率间的折衷 288

在支持HT技术的多处理器上的性能 290

性能的理解 291

多线程的额外开销 294

进一步的性能调试 295

线程化总结 296

要点 297

第19章 针对性能的设计 298

数据移动 299

内存与并行性 299

设计过程中的性能实验 300

算法 301

要点 303

第20章 综合:基本的优化 306

采摘低处的果实 306

应用 307

相关资料 309

Benchmark 309

Benchmark结果的理解 310

浮点到长整型转换的改进 310

算法的并行化 312

采用自动矢量化 313

基于Intrinsics的指令级并行 314

优化总结 315

要点 316

第21章 综合:最后的百分之十 318

最快的速度 318

更高的SIMD效率 320

最终的优化 323

优化总结 324

要点 325

参考文献 326

索引 332