简介
前言
声明
前言
第一部分:引言
第 1 章 引言
1.1 为什么软件运行缓慢?
1.2 为什么要关注性能?
1.3 什么是性能分析?
1.4 什么是性能调优?
1.5 本书涵盖哪些内容?
1.6 本书未涵盖哪些内容?
练习
本章小结
第一部分:现代 CPU 上的性能分析
第 2 章 性能测量
2.1 现代系统中的噪声
2.2 在生产环境中测量性能
2.3 持续基准测试
2.4 手动性能测试
2.5 软件和硬件计时器
2.6 微基准测试
2.7 主动基准测试
问题与练习
本章小结
第 3 章 CPU 微架构
3.1 指令集架构
3.2 流水线
3.3 开发指令级并行性
3.4 SIMD 多处理器
3.5 开发线程级并行性
3.6 内存层次结构
3.7 虚拟内存
3.8 现代 CPU 设计
3.9 性能监控单元
问题与练习
本章小结
第 4 章 性能分析中的术语与指标
4.1 已退休指令与已执行指令
4.2 CPU 利用率
4.3 CPI 与 IPC
4.4 微操作(UOPs)
4.5 流水线槽
4.6 核心周期与参考周期
4.7 缓存未命中
4.8 分支预测错误
4.9 性能指标
4.10 内存延迟与带宽
4.11 案例研究:四个基准测试
问题与练习
本章小结
第 5 章 性能分析方法
5.1 代码插桩
5.2 跟踪
5.3 收集性能监控事件
5.4 使用标记 API
5.5 采样
5.6 屋顶线性能模型
5.7 静态性能分析
5.8 编译器优化报告
问题与练习
本章小结
第 6 章 用于性能分析的 CPU 特性
6.1 自顶向下微架构分析
6.2 Intel 平台上的 TMA
6.3 AMD 平台上的 TMA
6.4 Arm 平台上的 TMA
6.5 TMA 总结
6.6 分支记录机制
6.7 基于硬件的采样特性
问题与练习
本章总结
第 7 章 性能分析工具概述
7.1 Intel VTune Profiler
7.2 AMD uProf
7.3 Apple Xcode Instruments
7.4 Linux Perf
7.5 火焰图
7.6 Windows 事件追踪
7.7 专用与混合分析器
7.8 内存性能分析
7.9 持续性能分析
问题与练习
本章小结
第二部分:源代码调优
第 8 章 优化内存访问
8.1 缓存友好的数据结构
8.2 动态内存分配
8.3 应对内存带宽限制
8.4 减少 DTLB 缺失
8.5 显式内存预取
问题与练习
本章小结
第 9 章 优化计算
9.1 数据依赖
9.2 函数内联
9.3 循环优化
9.4 向量化
9.5 编译器内建函数
问题与练习
本章小结
第 10 章 优化分支预测
10.1 用查找表替换分支
10.2 用算术运算替换分支
10.3 用条件选择替换分支
10.4 多测试单分支
问题与练习
本章总结
第 11 章 机器码布局优化
11.1 基本块
11.2 基本块放置
11.3 基本块对齐
11.4 函数拆分
11.5 函数重排
11.6 配置文件引导优化(PGO)
11.7 减少 ITLB 缺失
11.8 案例研究:测量代码占用
问题与练习
本章小结
第 12 章 其他调优领域
12.1 特定 CPU 的优化
12.2 微架构特定问题
12.3 低延迟调优技术
12.4 系统调优
12.5 案例研究:LLC 敏感性
问题与练习
本章小结
第 13 章 优化多线程应用程序
13.1 并行效率指标
13.2 性能扩展与开销
13.3 核心数扩展案例研究
13.4 任务调度
13.5 缓存一致性问题
13.6 其他方法
问题与练习
本章小结
后记与参考
后记
致谢
支持本书
附录
词汇表
微架构与 ISA 列表
附录 A:减少测量噪声
附录 B:启用大页
附录 C:Intel 处理器追踪
附录 D:Windows 事件追踪分析
本書使用 HonKit 釋出
问题与练习
问题与练习
描述流水线、乱序执行和推测执行。
寄存器重命名如何帮助加速执行?
描述空间局部性和时间局部性。
大多数现代处理器中缓存行的大小是多少?
列出构成 CPU 前端和后端的组件。
4 级页表的组织方式是什么?什么是页面错误?
x86 和 ARM 架构中的默认页面大小是多少?
TLB(转换后备缓冲区)起什么作用?
results matching "
"
No results matching "
"