发表于2024-12-13
深入理解并行编程 pdf epub mobi txt 电子书 下载
《深入理解并行编程》首先以霍金提出的两个理论物理限制为引子,解释了多核并行计算兴起的原因,并从硬件的角度阐述并行编程的难题。接着,《深入理解并行编程》以常见的计数器为例,探讨其不同的实现方法及适用场景。在这些实现方法中,除了介绍常见的锁以外,《深入理解并行编程》还重点介绍了RCU的使用及其原理,以及实现RCU的基础:内存屏障。最后,《深入理解并行编程》还介绍了并行软件的验证,以及并行实时计算等内容。
《深入理解并行编程》适合于对并行编程有兴趣的大学生、研究生,以及需要对项目进行深度性能优化的软硬件工程师,特别值得一提的是,《深入理解并行编程》对操作系统内核工程师也很有价值。
在我所看过的各种关于操作系统概念和并行编程的书籍中,我对Paul的书评价至高,它不是对学术方法的简单罗列,而是对现代硬件上运行并行系统的各种现实世界问题和面临挑战的细致分析,这一切都源于Paul在这一领域的丰富经验和巨大的贡献。
——OpersysCEO,《EmbeddedAndroid》作者KarimYaghmour
并行编程很难,但阅读Paul的书是掌握并行编程至简单的(当然也是至有趣的)办法之一!
——Linux内核x86、sched和rt-patches分支的维护者IngoMolnar
编程的至高无上境界是毫不费力地驯服CPU。你正在阅读的是关于各任务在CPU进行战争的伟大著作,一旦你开始翻阅,再多的编程挑战也不用怕!
——Linux内核防火墙ipchains和iptables的作者,网络货币prettycoin的作者RustyRussell
对程序员而言,想要了解并行编程中涉及的问题,以及如何正确解决这些问题,本书是不可或缺的。
——《Linux内核驱动》作者,Linux内核stable分支和其他大量分支的维护者GregKroah-Hartman
这是一本每个并行编程专业人员案头必备的参考书,浓缩了作者在该领域数十年的丰富实践经验。它也是一本学习并行编程的优秀教材,在涵盖主题的广度和深度方面表现优异。极具吸引力的写作风格使得本书的阅读成为非常愉快的体验。
——Facebook资深工程师,危险指针和无锁内存分配器的发明者MagedM.Micheal
Linux内核社区里高手云集,并且里面的人经常个性鲜明,以至于有很多人认为内核社区很不友好。但Paul是一个特别亲切、友善和耐心的人,不管是在内核邮件列表里还是面对面交流时。而这本书也体现了Paul的这些品质,他以至详尽易懂的方式解释并行编程方方面面的知识。这不表示这本书看起来很轻松,因为并行编程本身就很难。但真正有用的知识大概都没能够轻松获得。
——Linux内核cgroups和cpuset分支的维护者,华为Linux内核高级工程师李泽帆
刚看到书名时我在想,并行编程这样一个在计算机领域“古老”且成熟的话题还有什么值得多写的。翻看几页目录后便改变了想法。
该书从并行编程问题的历史背景讲起,一步步引入问题的挑战并带读者游历硬件与软件交互的发展,至后阐述当下并行编程的复杂性。
本书囊括所有系统编程的要素,不仅仅是概念层面的解释,更重要的是深入分析了每个要素存在的必要性及底层原理。对于喜欢钻研的同学或是在业界工作的工程师甚至架构师都是非常好的学习资源。
尽管我在业界有多年的开发设计经验,依然从书中学到很多实用的知识。作者PaulE.McKenney用深入浅出地方式将自己在并行编程领域数十年的经验归纳在这五百多页中。译者谢宝友和鲁阳在系统编程上有着扎实的功底,用流畅的语言将本书翻译给广大国内读者。这是一本难得的技术好书!
——VoltDB研发部总监石宁
并行编程并没有那么难,如果你花点时间在这本书和它里面的小问题上的话。
——Linux内核RCU代码贡献者冯博群
Paul是Linux了不起的黑客,也是Linux社区RCU模块的领导者和维护者。他的著作《IsParallelProgrammingHardAndIfSoWhatCanYouDoAboutIt?》首版在9年前就发布了。本书主要陈述了在适应多核硬件下提升并行软件的扩展性,避免由于锁竞争所引起的产品性能急剧下降,以及开展多核系统的设计、优化工作。
Paul所维护的RCU模块在Linuxkernel各个子系统中被大量应用,是保障kernel扩展性的基础技术,没有RCU就没有Linux现在优秀的多核性能和扩展性;在并行计算方面,Paul对于锁、RCU、SMP、NUMA、内存屏障等并行技术有深刻的了解,兼具近20年解决问题的实践经验。中兴同仁翻译此书,对于提升我国开源系统软件的设计水平和开发高端产品,均有重大意义。
——中国开源软件推进联盟主席陆首群
宝友的“自学成才”路径一直很让我印象深刻,贡献及收获在中兴这样一个正规军遍布的大型通讯上市企业,并通过一年的努力帮助中兴在开源社区提升代码贡献率和质量,又再次让我竖起大拇指!不忘初心的工程师梦想、学术上的坚持,以及职业生涯中的成就,宝友身上的这些闪光的品质都是怀揣梦想的年轻一代工程师们学习的榜样。
——Linaro全球执行副总裁大中华区总经理郭晶
在多核处理器已经成为主流计算架构的今天,理解和掌握并行编程技术,对于相关软件开发人员来说至关重要。《深入理解并行编程》一书系统讲述了并行计算的要点和难点,堪称经典,是入门和学习并行编程的不二推荐。
——LinuxIMX平台维护者ShawnGuo
这本书举重若轻地将并行编程涉及的软、硬件各个方面的基本原理透彻地呈现在读者面前,相信读者研读和实践后可以对并行编程有疱丁解牛之感。
——Linaro资深内核工程师聂军
《深入理解并行编程》全方面讲述了高速缓存、内存屏障、锁、RCU、并发性、实时性等知识,如同少林寺的“洗髓经”,是迈向“武林高手”的必修内功,值得对并行编程感兴趣的计算机从业者、尤其是操作系统底层软件从业者细读。
——RedHat资深Linux内核工程师庞训磊
并行编程一直是程序设计的难题,这个难题来源于硬件系统,也来源于人类本身的思维模式。人类的思考模式是线性的,很难做到一心二用,很难在程序设计的过程中自如处理并行化的算法和结构。
此外,并行编程的作用越来越大,AI的涌现和大数据对计算量的要求导致GPU、FPGA及ASIC之类异构计算的兴起。这些异构计算都以并行计算为根基,并行计算很可能成为计算领域的下一个风口。
本书探讨了并行计算的根源。从硬件、锁机制、数据分割和RCU等多个方面,对并行计算的本质和如何应用做了很多分析工作,对读者理解并行计算和提高对并行计算的掌控力有很大的帮助。
——腾讯高级技术专家高剑林
第1章 如何使用本书1
1.1 路线图1
1.2 小问题2
1.3除本书之外的选择3
1.4 示例源代码4
1.5 这本书属于谁4
第2章 简介6
2.1 导致并行编程困难的历史原因6
2.2 并行编程的目标7
2.2.1 性能8
2.2.2 生产率9
2.2.3 通用性9
2.3 并行编程的替代方案11
2.3.1 串行应用的多个实例11
2.3.2 使用现有的并行软件11
2.3.3 性能优化12
2.4 是什么使并行编程变得复杂12
2.4.1 分割任务13
2.4.2 并行访问控制13
2.4.3 资源分割和复制14
2.4.4 与硬件的交互14
2.4.5 组合使用14
2.4.6 语言和环境如何支持这些任务14
2.5 本章的讨论15
第3章 硬件和它的习惯16
3.1 概述16
3.1.1 流水线CPU16
3.1.2 内存引用17
3.1.3 原子操作18
3.1.4 内存屏障19
3.1.5 高速缓存未命中19
3.1.6 I/O操作19
3.2 开销20
3.2.1 硬件体系结构20
3.2.2 操作的开销21
3.3 硬件的免费午餐23
3.3.1 3D集成23
3.3.2 新材料和新工艺24
3.3.3 是光,不是电子24
3.3.4 专用加速器24
3.3.5 现有的并行软件25
3.4 对软件设计的启示25
第4章 办事的家伙27
4.1 脚本语言27
4.2 POSIX多进程28
4.2.1 POSIX进程创建和销毁28
4.2.2 POSIX线程创建和销毁30
4.2.3 POSIX锁31
4.2.4 POSIX读/写锁34
4.3 原子操作37
4.4 Linux内核中类似POSIX的操作38
4.5 如何选择趁手的工具39
第5章 计数40
5.1 为什么并发计数不可小看41
5.2 统计计数器42
5.2.1 设计43
5.2.2 基于数组的实现43
5.2.3 最终结果一致的实现44
5.2.4 基于每线程变量的实现46
5.2.5 本节讨论48
5.3 近似上限计数器48
5.3.1 设计48
5.3.2 简单的上限计数实现50
5.3.3 关于简单上限计数的讨论55
5.3.4 近似上限计数器的实现55
5.3.5 关于近似上限计数器的讨论55
5.4 精确上限计数56
5.4.1 原子上限计数的实现56
5.4.2 关于原子上限计数的讨论62
5.4.3 Signal-Theft上限计数的设计62
5.4.4 Signal-Theft上限计数的实现63
5.4.5 关于Signal-Theft上限计数的讨论68
5.5 特殊场合的并行计数68
5.6 关于并行计数的讨论69
5.6.1 并行计数的性能70
5.6.2 并行计数的专门化71
5.6.3 从并行计数中学到什么71
第6章 对分割和同步的设计73
6.1 分割练习73
6.1.1 哲学家就餐问题73
6.1.2 双端队列75
6.1.3 关于分割问题示例的讨论81
6.2 设计准则82
6.3 同步粒度83
6.3.1 串行程序84
6.3.2 代码锁85
6.3.3 数据锁86
6.3.4 数据所有权88
6.3.5 锁粒度与性能88
6.4 并行快速路径90
6.4.1 读/写锁91
6.4.2 层次锁91
6.4.3 资源分配器缓存92
6.5 分割之外97
6.5.1 使用工作队列的迷宫问题并行解法97
6.5.2 另一种迷宫问题的并行解法100
6.5.3 性能比较I102
6.5.4 另一种迷宫问题的串行解法104
6.5.5 性能比较II104
6.5.6 未来展望与本节总结105
6.6 分割、并行化与优化106
第7章 锁107
7.1 努力活着108
7.1.1 死锁108
7.1.2 活锁与饥饿114
7.1.3 不公平的锁116
7.1.4 低效率的锁117
7.2 锁的类型117
7.2.1 互斥锁117
7.2.2 读/写锁118
7.2.3 读/写锁之外118
7.2.4 范围锁119
7.3 锁在实现中的问题121
7.3.1 基于原子交换的互斥锁实现示例121
7.3.2 互斥锁的其他实现122
7.4 基于锁的存在保证124
7.5 锁:是英雄还是恶棍125
7.5.1 应用程序中的锁:英雄125
7.5.2 并行库中的锁:只是一个工具126
7.5.3 并行化串行库时的锁:恶棍128
7.6 总结130
第8章 数据所有权131
8.1 多进程131
8.2 部分数据所有权和pthread线程库132
8.3 函数输送132
8.4 指派线程132
8.5 私有化133
8.6 数据所有权的其他用途133
第9章 延后处理134
9.1 引用计数134
9.1.1 各种引用计数的实现135
9.1.2 危险指针140
9.1.3 支持引用计数的Linux原语141
9.1.4 计数优化142
9.2 顺序锁142
9.3 读-复制-修改(RCU)145
9.3.1 RCU介绍145
9.3.2 RCU基础147
9.3.3 RCU用法155
9.3.4 Linux内核中的RCU API166
9.3.5 “玩具式”的RCU实现171
9.3.6 RCU练习188
9.4 如何选择?188
9.5 更新端怎么办190
第10章 数据结构191
10.1 从例子入手191
10.2 可分割的数据结构192
10.2.1 哈希表的设计192
10.2.2 哈希表的实现192
10.2.3 哈希表的性能195
10.3 读侧重的数据结构197
10.3.1 受RCU保护的哈希表的实现197
10.3.2 受RCU保护的哈希表的性能199
10.3.3 对受RCU保护的哈希表的讨论201
10.4 不可分割的数据结构201
10.4.1 可扩展哈希表的设计202
10.4.2 可扩展哈希表的实现203
10.4.3 可扩展哈希表的讨论210
10.4.4 其他可扩展的哈希表211
10.5 其他数据结构214
10.6 微优化214
10.6.1 实例化215
10.6.2 比特与字节215
10.6.3 硬件层面的考虑216
10.7 总结217
第11章 验证218
11.1 简介218
11.1.1 BUG来自于何处218
11.1.2 所需的心态220
11.1.3 应该何时开始验证221
11.1.4 开源之路221
11.2 跟踪222
11.3 断言223
11.4 静态分析224
11.5 代码走查224
11.5.1 审查224
11.5.2 走查225
11.5.3 自查225
11.6 几率及海森堡BUG227
11.6.1 离散测试统计228
11.6.2 滥用离散测试统计229
11.6.3 持续测试统计229
11.6.4 定位海森堡BUG232
11.7 性能评估235
11.7.1 性能基准236
11.7.2 剖析236
11.7.3 差分分析237
11.7.4 微基准237
11.7.5 隔离237
11.7.6 检测干扰238
11.8 总结242
第12章 形式验证244
12.1 通用目的的状态空间搜索244
12.1.1 Promela和Spin244
12.1.2 如何使用 Promela249
12.1.3 Promela 示例: 锁251
12.1.4 Promela 示例: QRCU254
12.1.5 Promela初试牛刀:dynticks和可抢占RCU260
12.1.6 验证可抢占RCU和dynticks264
12.2 特定目的的状态空间搜索288
12.2.1 解析Litmus测试289
12.2.2 Litmus测试意味着什么290
12.2.3 运行Litmus测试291
12.2.4 PPCMEM讨论292
12.3 公理方法293
12.4 SAT求解器294
12.5 总结295
第13章 综合应用296
13.1 计数难题296
13.1.1 对更新进行计数296
13.1.2 对查找进行计数296
13.2 使用RCU拯救并行软件性能297
13.2.1 RCU和基于每CPU变量的统计计数297
13.2.2 RCU及可插拔I/O设备的计数器300
13.2.3 数组及长度300
13.2.4 相关联的字段301
13.3 散列难题302
13.3.1 相关联的数据元素302
13.3.2 更新友好的哈希表遍历303
第14章 高级同步304
14.1 避免锁304
14.2 内存屏障304
14.2.1 内存序及内存屏障305
14.2.2 如果B在A后面,并且C在B后面,为什么C不在A后面306
14.2.3 变量可以拥有多个值307
14.2.4 能信任什么东西308
14.2.5 锁实现回顾312
14.2.6 一些简单的规则313
14.2.7 抽象内存访问模型314
14.2.8 设备操作315
14.2.9 保证315
14.2.10 什么是内存屏障316
14.2.11 锁约束325
14.2.12 内存屏障示例326
14.2.13 CPU缓存的影响328
14.2.14 哪里需要内存屏障329
14.3 非阻塞同步329
14.3.1 简单NBS330
14.3.2 NBS讨论331
第15章 并行实时计算332
15.1 什么是实时计算332
15.1.1 软实时332
15.1.2 硬实时333
15.1.3 现实世 深入理解并行编程 电子书 下载 mobi epub pdf txt
后面的知识需要懂linux脚本。知识是很经典的
评分京东活动给力,满减叠加150-50券,买了3本书花了100多,很实惠,物流更是没话说,第二天就送到了。
评分挺好的,给公司同事买的,有很大的帮助。
评分很好,值得购买,以后,想买收还是找京东希望多多做活动。
评分还不错
评分深入理解并行编程 不粗哦
评分部门购书。。。。。。。。。。。
评分发货速度真是快...
评分分分合合号发多少v好
深入理解并行编程 pdf epub mobi txt 电子书 下载