ImageVerifierCode 换一换
格式:DOCX , 页数:13 ,大小:19.68KB ,
资源ID:6849475      下载积分:12 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/6849475.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(《深入理解并行编程》中文版并发编程网.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

《深入理解并行编程》中文版并发编程网.docx

1、深入理解并行编程中文版 并发编程网深入理解并行编程中文版 并发编程网 原文的下载地址:http:/kernel.org/pub/linux/kernel/people/paulmck/perfbook/perfbook.html中文版下载地址:深入理解并行编程V1.0 (4.1M)本书是linux内核大牛paul的力作,和鲁阳同学一起,花了两个月时间进行翻译。目前没有翻译问答部分,主要是时间不够,也担心不能将这部分翻译准确。对内核深度发烧的同学可以看看。本书目录1. 简介 141.1. 导致并行编程困难的历史原因 141.2. 并行编程的目标 151.2.1. 性能. 161.2.2. 生产率

2、 171.2.3. 通用性 181.3. 并行编程的替代方案. 201.3.1. 顺序应用多实例化. 201.3.2.使用现有的并行软件 211.3.3. 性能优化. 211.4. 是什么使并行编程变得复杂? 221.4.1. 工作分割. 221.4.2. 并行访问控制 231.4.3. 资源分割和复制. 241.4.4. 与硬件交互. 241.4.5. 组合使用. 241.4.6. 语言和环境如何对这样的任务进行支持? 251.5. 本书导读 251.5.1. 小问题 251.5.2. 随书源码. 262. 硬件的习性 282.1. 概述. 282.1.1. CPU流水线 292.1.2.

3、内存引用. 302.1.3. 原子操作. 312.1.4. 内存屏障. 322.1.5. Cache Miss . 332.1.6. I/O操作 342.2. 开销. 352.2.1. 硬件体系结构 362.2.2. 操作的开销. 372.3. 硬件的免费午餐? . 382.3.1. 3D集成 . 392.3.2. 新材料和新工艺. 392.3.3. 专用加速器. 392.3.4. 现有的并行软件. 402.4. 软件设计Implication . 403. 工具 433.1. 脚本语言 433.2. POSIX多进程 443.2.1. POSIX进程创建和撤销 . 443.2.2. POSI

4、X线程的创建和撤销 463.2.3. POSIX锁 . 483.2.4. POSIX读写锁 . 523.3. 原子操作 553.4. Linux内核中类似POSIX的操作 . 563.5. 趁手的工具该如何选择? 584. 计数 594.1. 为什么并发计数不可小看?. 604.2. 统计计数器. 624.2.1. 设计. 624.2.2. 基于数组的实现. 624.2.3. 结果一致的实现. 644.2.4. 基于每线程变量的实现. 664.2.5. 讨论. 694.3. 近似上限计数器 694.3.1. 设计. 694.3.2. 简单的上限计数器实现. 704.3.3. 关于简单上限计数器

5、的讨论 764.3.4. 近似上限计数器的实现. 764.3.5. 关于近似上限计数器的讨论 774.4. 精确上限计数器 774.4.1. 原子上限计数器的实现. 774.4.2. 关于原子上限计数器的讨论 864.4.3. Signal-Theft上限计数器的设计 864.4.4. Signal-Theft上限计数器的实现 874.4.5. Signal-Theft上限计数器讨论 . 944.5. 特殊的并行计数器. 954.6. 并行计数的讨论 965. 分割和同步设计. 1005.1. 分割练习. 1005.1.1. 哲学家就餐问题 1005.1.2. 双端队列 1025.1.3. 关

6、于分割问题示例的讨论. 1115.2. 设计准则. 1115.3. 同步粒度. 1135.3.1. 串行程序 1145.3.2. 代码锁. 1165.3.3. 数据锁. 1175.3.4. 数据所有权. 1205.3.5. 锁粒度与性能. 1215.4. 并行快速路径. 1215.4.1. 读写锁. 1225.4.2. 层级锁. 1235.4.3. 资源分配器缓存 1255.5. 性能总结. 1316. 锁. 1326.1. 生存(staying alive) . 1336.1.1. 死锁. 1336.1.2. 活锁. 1366.1.3. 不公平. 1376.1.4. 低效率. 1376.2.

7、 锁的类型. 1376.2.1. 互斥锁. 1386.2.2. 读写锁. 1386.2.3. Beyond Reader-Writer Locks . 1386.3. 基于锁的存在担保(existence guarantee) . 1387. 数据所有者. 1408. 延迟处理. 1428.1. 屏障 1428.2. 引用计数. 1428.2.1. 引用计数类型的实现. 1438.2.2. 支持引用计数的Linux原语 . 1508.2.3. 计数器优化. 1518.3. Read-Copy Update(RCU) 1518.3.1. RCU基础 . 1518.3.2. RCU用法 . 163

8、8.3.3. Linux内核中的RCU API 1768.3.4. “玩具式”的RCU实现 1838.3.5. RCU练习 . 2069. 使用RCU 2079.1. RCU和基于每线程变量的统计计数器 . 2079.1.1. 设计. 2079.1.2. 实现. 2079.1.3. 讨论. 2119.2. RCU和可移除I/O设备的计数器 . 21110. 验证:调试及分析. 21411. 数据结构. 21612. 高级同步. 21812.1. 避免锁. 21812.2. 内存屏障. 21812.2.1. 内存序及内存屏障. 21812.2.2. 如果B在A后面, 并且C在B后面, 为什么C不

9、在A后面? 22012.2.3. 变量可以拥有多个值 22112.2.4. 能信任什么东西? 22212.2.5. 锁实现回顾. 22912.2.6. 一些简单的规则. 23012.2.7. 抽象内存访问模型. 23012.2.8. 设备操作. 23312.2.9. 保证. 23312.2.10. 什么是内存屏障? 23412.2.11. 锁约束 24712.2.12. 内存屏障示例 24812.2.13. CPU . 25112.2.14. 哪里需要内存屏障? . 25312.3. 非阻塞同步 25312.3.1. 简单 NBS 25312.3.2. 冒险指针. 25312.3.3. 原子数

10、据结构 25312.3.4. “Macho” NBS 25313. 易于使用. 25413.1. Rusty Scale for API Design . 25413.2. Shaving the Mandelbrot Set . 25514. 时间管理. 25815. 未来的冲突. 25915.1. 可交易内存 25915.1.1. I/O 操作 . 26015.1.2. RPC 操作 26015.1.3. 内存映射操作 26115.1.4. 多线程事务. 26215.1.5. 外部的事务访问. 26315.1.6. 延时. 26415.1.7. 锁. 26415.1.8. 读者-写者锁 .

11、 26515.1.9. 持续性 266TM如何提供类似的持续性功能?. 26615.1.10. 动态链接装载 26615.1.11. 调试. 26715.1.12. exec() 系统调用. 26815.1.13. RCU 26815.1.14. 讨论. 27015.2. 共享内存并行编程 27015.3. 基于任务的并行编程. 270A. 重要问题. 271A.1 “after“的含义是什么? . 271B. 同步原语. 277B.1 初始化. 277B.1.1 smp_init() . 277B.2 线程创建、销毁及控制. 278B.2.1 create_thread() 278B.2.2

12、 smp_thread_id() . 278B.2.3 for_each_thread() . 278B.2.4 for_each_running_thread() . 279B.2.5 wait_thread() 279 深入理解并行编程B.2.6 wait_all_threads() . 279B.2.7 用法示例. 279B.3 锁. 280B.3.1 spin_lock_init() . 280B.3.2 spin_lock() 280B.3.3 spin_trylock() . 281B.3.4 spin_unlock() . 281B.3.5 用法示例. 281B.4 每线程变量

13、281B.4.1 DEFINE_PER_THREAD() . 282B.4.2 DECLARE_PER_THREAD() 282B.4.3 per_thread() . 282B.4.4 _get_thread_var() 282B.4.5 init_per_thread() 282B.4.6 用法示例. 282B.5 性能 283C. 为什么使用内存屏障 284C.1 Cache 结构 284C.2 缓存一致性协议. 286C.2.1 MESI 状态 . 286C.2.2 MESI 协议消息 287C.2.3 MESI状态图 . 288C.2.4 MESI 协议示例 289C.3 不必要的存

14、储延迟 291C.3.1 Store Buffers 291C.3.2 Store Forwarding . 292C.3.3 存储缓冲区及内存屏障. 293C.4 不必要的存储延迟 296C.4.1 无效队列. 296C.4.2 使无效队列及使无效应答. 296C.4.3 无效队列及内存屏障 297C.5 读和写内存屏障. 300C.6 内存屏障示例. 300C.6.1 乱序体系结构 300C.6.2 示例 1 301 深入理解并行编程C.6.3 示例 2 302C.6.4 示例 3 303C.7 特定CPUs的内存屏障指令 . 304C.7.1 Alpha 306C.7.2 AMD64 . 308C.7.3 ARMv7-A/R

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1