《深入理解并行编程》中文版并发编程网Word文件下载.docx
- 文档编号:19870980
- 上传时间:2023-01-11
- 格式:DOCX
- 页数:13
- 大小:19.68KB
《深入理解并行编程》中文版并发编程网Word文件下载.docx
《《深入理解并行编程》中文版并发编程网Word文件下载.docx》由会员分享,可在线阅读,更多相关《《深入理解并行编程》中文版并发编程网Word文件下载.docx(13页珍藏版)》请在冰豆网上搜索。
1.4.2.并行访问控制…………………………………………………………………23
1.4.3.资源分割和复制……………………………………………………………..24
1.4.4.与硬件交互…………………………………………………………………….24
1.4.5.组合使用………………………………………………………………………..24
1.4.6.语言和环境如何对这样的任务进行支持?
………………………25
1.5.本书导读………………………………………………………………………………25
1.5.1.小问题……………………………………………………………………………25
1.5.2.随书源码………………………………………………………………………..26
2.硬件的习性…………………………………………………………………………………28
2.1.概述……………………………………………………………………………………..28
2.1.1.CPU流水线……………………………………………………………………29
2.1.2.内存引用………………………………………………………………………..30
2.1.3.原子操作………………………………………………………………………..31
2.1.4.内存屏障………………………………………………………………………..32
2.1.5.CacheMiss……………………………………………………………………..33
2.1.6.I/O操作…………………………………………………………………………34
2.2.开销……………………………………………………………………………………..35
2.2.1.硬件体系结构…………………………………………………………………36
2.2.2.操作的开销…………………………………………………………………….37
2.3.硬件的免费午餐?
………………………………………………………………….38
2.3.1.3D集成………………………………………………………………………….39
2.3.2.新材料和新工艺……………………………………………………………..39
2.3.3.专用加速器…………………………………………………………………….39
2.3.4.现有的并行软件……………………………………………………………..40
2.4.软件设计Implication…………………………………………………………….40
3.工具……………………………………………………………………………………………43
3.1.脚本语言………………………………………………………………………………43
3.2.POSIX多进程………………………………………………………………………44
3.2.1.POSIX进程创建和撤销………………………………………………….44
3.2.2.POSIX线程的创建和撤销………………………………………………46
3.2.3.POSIX锁……………………………………………………………………….48
3.2.4.POSIX读写锁………………………………………………………………..52
3.3.原子操作………………………………………………………………………………55
3.4.Linux内核中类似POSIX的操作………………………………………….56
3.5.趁手的工具——该如何选择?
………………………………………………58
4.计数……………………………………………………………………………………………59
4.1.为什么并发计数不可小看?
………………………………………………….60
4.2.统计计数器…………………………………………………………………………..62
4.2.1.设计……………………………………………………………………………….62
4.2.2.基于数组的实现……………………………………………………………..62
4.2.3.结果一致的实现……………………………………………………………..64
4.2.4.基于每线程变量的实现…………………………………………………..66
4.2.5.讨论……………………………………………………………………………….69
4.3.近似上限计数器……………………………………………………………………69
4.3.1.设计……………………………………………………………………………….69
4.3.2.简单的上限计数器实现…………………………………………………..70
4.3.3.关于简单上限计数器的讨论……………………………………………76
4.3.4.近似上限计数器的实现…………………………………………………..76
4.3.5.关于近似上限计数器的讨论……………………………………………77
4.4.精确上限计数器……………………………………………………………………77
4.4.1.原子上限计数器的实现…………………………………………………..77
4.4.2.关于原子上限计数器的讨论……………………………………………86
4.4.3.Signal-Theft上限计数器的设计………………………………………86
4.4.4.Signal-Theft上限计数器的实现………………………………………87
4.4.5.Signal-Theft上限计数器讨论………………………………………….94
4.5.特殊的并行计数器………………………………………………………………..95
4.6.并行计数的讨论……………………………………………………………………96
5.分割和同步设计………………………………………………………………………..100
5.1.分割练习…………………………………………………………………………….100
5.1.1.哲学家就餐问题……………………………………………………………100
5.1.2.双端队列………………………………………………………………………102
5.1.3.关于分割问题示例的讨论……………………………………………..111
5.2.设计准则…………………………………………………………………………….111
5.3.同步粒度…………………………………………………………………………….113
5.3.1.串行程序………………………………………………………………………114
5.3.2.代码锁………………………………………………………………………….116
5.3.3.数据锁………………………………………………………………………….117
5.3.4.数据所有权…………………………………………………………………..120
5.3.5.锁粒度与性能……………………………………………………………….121
5.4.并行快速路径……………………………………………………………………..121
5.4.1.读写锁………………………………………………………………………….122
5.4.2.层级锁………………………………………………………………………….123
5.4.3.资源分配器缓存……………………………………………………………125
5.5.性能总结…………………………………………………………………………….131
6.锁……………………………………………………………………………………………..132
6.1.生存(stayingalive)………………………………………………………….133
6.1.1.死锁……………………………………………………………………………..133
6.1.2.活锁……………………………………………………………………………..136
6.1.3.不公平………………………………………………………………………….137
6.1.4.低效率………………………………………………………………………….137
6.2.锁的类型…………………………………………………………………………….137
6.2.1.互斥锁………………………………………………………………………….138
6.2.2.读写锁………………………………………………………………………….138
6.2.3.BeyondReader-WriterLocks………………………………………….138
6.3.基于锁的存在担保(existenceguarantee)…………………………..138
7.数据所有者……………………………………………………………………………….140
8.延迟处理…………………………………………………………………………………..142
8.1.屏障……………………………………………………………………………………142
8.2.引用计数…………………………………………………………………………….142
8.2.1.引用计数类型的实现…………………………………………………….143
8.2.2.支持引用计数的Linux原语………………………………………….150
8.2.3.计数器优化…………………………………………………………………..151
8.3.Read-CopyUpdate(RCU)…………………………………………………151
8.3.1.RCU基础…………………………………………………………………….151
8.3.2.RCU用法…………………………………………………………………….163
8.3.3.Linux内核中的RCUAPI………………………………………………176
8.3.4.“玩具式”的RCU实现………………………………………………183
8.3.5.RCU练习…………………………………………………………………….206
9.使用RCU…………………………………………………………………………………207
9.1.RCU和基于每线程变量的统计计数器………………………………..207
9.1.1.设计……………………………………………………………………………..207
9.1.2.实现……………………………………………………………………………..207
9.1.3.讨论……………………………………………………………………………..211
9.2.RCU和可移除I/O设备的计数器………………………………………..211
10.验证:
调试及分析…………………………………………………………………….214
11.数据结构…………………………………………………………………………………..216
12.高级同步…………………………………………………………………………………..218
12.1.避免锁………………………………………………………………………………..218
12.2.内存屏障…………………………………………………………………………….218
12.2.1.内存序及内存屏障………………………………………………….218
12.2.2.如果B在A后面,并且C在B后面,为什么C不在A后面?
220
12.2.3.变量可以拥有多个值………………………………………………221
12.2.4.能信任什么东西?
……………………………………………………222
12.2.5.锁实现回顾…………………………………………………………….229
12.2.6.一些简单的规则……………………………………………………..230
12.2.7.抽象内存访问模型………………………………………………….230
12.2.8.设备操作………………………………………………………………..233
12.2.9.保证……………………………………………………………………….233
12.2.10.什么是内存屏障?
……………………………………………………234
12.2.11.锁约束……………………………………………………………………247
12.2.12.内存屏障示例…………………………………………………………248
12.2.13.CPU……………………………………………………………………….251
12.2.14.哪里需要内存屏障?
………………………………………………..253
12.3.非阻塞同步…………………………………………………………………………253
12.3.1.简单NBS………………………………………………………………253
12.3.2.冒险指针………………………………………………………………..253
12.3.3.原子数据结构…………………………………………………………253
12.3.4.“Macho”NBS…………………………………………………………253
13.易于使用…………………………………………………………………………………..254
13.1.RustyScaleforAPIDesign…………………………………………………..254
13.2.ShavingtheMandelbrotSet…………………………………………………..255
14.时间管理…………………………………………………………………………………..258
15.未来的冲突……………………………………………………………………………….259
15.1.可交易内存…………………………………………………………………………259
15.1.1.I/O操作………………………………………………………………..260
15.1.2.RPC操作………………………………………………………………260
15.1.3.内存映射操作…………………………………………………………261
15.1.4.多线程事务…………………………………………………………….262
15.1.5.外部的事务访问……………………………………………………..263
15.1.6.延时……………………………………………………………………….264
15.1.7.锁…………………………………………………………………………..264
15.1.8.读者-写者锁…………………………………………………………..265
15.1.9.持续性……………………………………………………………………266
TM如何提供类似的持续性功能?
………………………………………………………..266
15.1.10.动态链接装载…………………………………………………………266
15.1.11.调试……………………………………………………………………….267
15.1.12.exec()系统调用……………………………………………………..268
15.1.13.RCU………………………………………………………………………268
15.1.14.讨论……………………………………………………………………….270
15.2.共享内存并行编程………………………………………………………………270
15.3.基于任务的并行编程…………………………………………………………..270
A.重要问题…………………………………………………………………………………..271
A.1“after“的含义是什么?
………………………………………………………….271
B.同步原语…………………………………………………………………………………..277
B.1初始化………………………………………………………………………………..277
B.1.1smp_init()……………………………………………………………………..277
B.2线程创建、销毁及控制……………………………………………………….278
B.2.1create_thread()………………………………………………………………278
B.2.2smp_thread_id()…………………………………………………………….278
B.2.3for_each_thread()…………………………………………………………..278
B.2.4for_each_running_thread()……………………………………………..279
B.2.5wait_thread()…………………………………………………………………279深入理解并行编程
B.2.6wait_all_threads()………………………………………………………….279
B.2.7用法示例………………………………………………………………..279
B.3锁……………………………………………………………………………………….280
B.3.1spin_lock_init()……………………………………………………………..280
B.3.2spin_lock()……………………………………………………………………280
B.3.3spin_trylock()………………………………………………………………..281
B.3.4spin_unlock()………………………………………………………………..281
B.3.5用法示例………………………………………………………………..281
B.4每线程变量…………………………………………………………………………281
B.4.1DEFINE_PER_THREAD()…………………………………………….282
B.4.2DECLARE_PER_THREAD()…………………………………………282
B.4.3per_thread()…………………………………………………………………..282
B.4.4__get_thread_var()…………………………………………………………282
B.4.5init_per_thread()……………………………………………………………282
B.4.6用法示例………………………………………………………………..282
B.5性能……………………………………………………………………………………283
C.为什么使用内存屏障…………………………………………………………………284
C.1Cache结构…………………………………………………………………………284
C.2缓存一致性协议………………………………………………………………….286
C.2.1MESI状态…………………………………………………………………..286
C.2.2MESI协议消息……………………………………………………………287
C.2.3MESI状态图………………………………………………………………..288
C.2.4MESI协议示例……………………………………………………………289
C.3不必要的存储延迟………………………………………………………………291
C.3.1StoreBuffers…………………………………………………………………291
C.3.2StoreForwarding…………………………………………………………..292
C.3.3存储缓冲区及内存屏障…………………………………………..293
C.4不必要的存储延迟………………………………………………………………296
C.4.1无效队列………………………………………………………………..296
C.4.2使无效队列及使无效应答……………………………………….296
C.4.3无效队列及内存屏障………………………………………………297
C.5读和写内存屏障………………………………………………………………….300
C.6内存屏障示例……………………………………………………………………..300
C.6.1乱序体系结构…………………………………………………………300
C.6.2示例1……………………………………………………………………301深入理解并行编程
C.6.3示例2……………………………………………………………………302
C.6.4示例3……………………………………………………………………303
C.7特定CPUs的内存屏障指令………………………………………………..304
C.7.1Alpha……………………………………………………………………………306
C.7.2AMD64………………………………………………………………………..308
C.7.3ARMv7-A/R…………
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 深入理解并行编程 深入理解并行编程中文版 并发编程网 深入 理解 并行 编程 中文版 并发