《多核应用编程实战》
基本信息
原书名:Multicore application programming:for windows,linux,and Oracle Solaris
作者: (美)戈夫(Darryl Gove)
译者: 郭晴霞
丛书名: 图灵程序设计丛书
出版社:人民邮电出版社
ISBN:9787115317506
上架时间:2013-5-22
出版日期:2013 年5月
开本:16开
页码:1
版次:1-1
所属分类:计算机
更多关于 》》》《多核应用编程实战》
内容简介
计算机书籍
《多核应用编程实战》是一本全面实用的多核应用编程指南,旨在介绍如何编写功能正确、性能优越且适合扩展为在多个cpu核心的系统运行的应用程序。本书面向多种操作系统和处理器类型引用程序示例,内容涵盖类unix 操作系统(linux、oracle solaris、os x)和windows 系统上多核应用的编写方法、多核的硬件实现对应用程序的性能影响、编写并行应用程序时要避免的潜在问题,以及如何编写可扩展至大量并行线程的应用程序。
《多核应用编程实战》适合所有c程序员学习参考。
面向主流平台打造多核应用程序,真正实现高性能与高可扩展性并举。
《多核应用编程实战》是一本全面、实用的高性能多核应用编程指南,不仅介绍了在windows、linux和oracle solaris上实现并行化的前沿方法,而且通过示例阐述了面向多核处理器编程时所涉及的各种挑战,指导读者开发功能正确、性能优越,且可扩展为在8个、16个甚至更多cpu核心的系统运行的应用程序。通读本书,你将了解具体硬件实现对应用程序性能的影响,了解如何避免常见问题,一步步学会编写可处理大量并行线程的应用程序,并掌握高级并行化技术。
《多核应用编程实战》并不局限于一种方式或平台。有了它,每一位使用现代多核处理器的c程序员都能在任意前沿操作系统环境中游刃有余!
《多核应用编程实战》内容
在最佳时机采用并行化技术
在多线程间安全共享数据
用posix或windows线程编写应用程序
用自定义代码实现同步和共享
充分利用自动并行化和openmp
克服限制扩展性的常见障碍
用新的方法编写正确、快速、可扩展的并行代码
目录
《多核应用编程实战》
第1章 硬件、进程和线程 1
1.1 计算机的内部结构 1
1.2 多核处理器的缘起 3
1.2.1 在单芯片上支持多线程 4
1.2.2 通过处理器核心流水线作业提高指令发出率 8
1.2.3 使用缓存保存最近使用的数据 10
1.2.4 用虚拟内存存储数据 12
1.2.5 从虚拟地址转换到物理地址 13
1.3 多处理器系统的特征 14
1.4 源代码到汇编语言的转换 16
1.4.1 32位与64位代码的性能 18
1.4.2 确保内存操作的正确顺序 19
1.4.3 进程和线程的差异 21
1.5 小结 23
第2章 高性能编码 24
2.1 定义性能 24
2.2 了解算法复杂度 25
2.2.1 算法复杂度的示例 26
2.2.2 算法复杂度的重要性 28
.2.2.3 谨慎运用算法复杂度 30
2.3 结构如何影响性能 30
2.3.1 在源代码和生成结构上权衡性能和便利性 30
2.3.2 利用库结构化应用程序 33
2.3.3 数据结构对性能的影响 42
2.4 编译器的作用 47
2.4.1 两种编译器优化 48
2.4.2 选择合适的编译器选项 50
2.4.3 如何用跨文件优化提高性能 51
2.4.4 使用配置文件反馈 53
2.4.5 潜在的指针别名会如何抑制编译器优化 55
2.5 通过分析确定占用时间的地方 58
2.6 怎样避免手动优化 64
2.7 从设计角度看性能 64
2.8 小结 65
第3章 识别并行机会 66
3.1 使用多进程提高系统工作效率 66
3.2 多用户使用一个系统 67
3.3 通过整合提高机器工作效率 68
3.3.1 用容器隔离共享一个系统的应用程序 69
3.3.2 使用虚拟机监控程序托管多个操作系统 69
3.4 采用并行机制提高单个任务的性能 71
3.4.1 理解并行应用程序 72
3.4.2 并行如何影响算法的选择 72
3.4.3 amdahl定律 73
3.4.4 确定最大实际线程数 75
3.4.5 同步成本怎样降低扩展性 76
3.5 并行模式 78
3.5.1 使用simd指令的数据并行 78
3.5.2 通过进程或线程实现并行化 79
3.5.3 多个独立任务 79
3.5.4 多个松散耦合的任务 80
3.5.5 相同任务的多个副本 81
3.5.6 单个任务拆分到多个线程 82
3.5.7 使用流水线任务完成某个事项 82
3.5.8 将工作分配给客户端和服务器 83
3.5.9 将责任划分给生产者和消费者 84
3.5.10 结合多种并行化策略 85
3.6 依赖关系对并行运行代码能力的影响 85
3.6.1 反依赖和输出依赖 86
3.6.2 通过推测打破依赖 88
3.6.3 关键路径 91
3.7 发现并行机会 92
3.8 小结 93
第4章 同步和数据共享 94
4.1 数据争用 94
4.1.1 使用工具检测数据争用 95
4.1.2 避免数据争用 98
4.2 同步原语 98
4.2.1 互斥量和临界区 98
4.2.2 自旋锁 99
4.2.3 信号量 100
4.2.4 读写锁 100
4.2.5 屏障 101
4.2.6 原子操作和无锁代码 102
4.3 死锁和活锁 103
4.4 线程和进程间的通信 104
4.4.1 内存、共享内存和内存映射文件 104
4.4.2 条件变量 105
4.4.3 信号和事件 107
4.4.4 消息队列 108
4.4.5 命名管道 108
4.4.6 通过网络栈进行通信 109
4.4.7 线程之间共享数据的其他方法 110
4.5 存储线程私有数据 110
4.6 小结 112
第5章 使用posix线程 113
5.1 创建线程 113
5.1.1 线程终止 114
5.1.2 用子线程接收和传递数据 115
5.1.3 分离线程 116
5.1.4 设置pthread的属性 117
5.2 编译多线程代码 119
5.3 进程终止 121
5.4 线程之间共享数据 122
5.4.1 使用互斥锁保护访问 122
5.4.2 互斥锁属性 124
5.4.3 使用自旋锁 125
5.4.4 读写锁 127
5.4.5 屏障 129
5.4.6 信号量 130
5.4.7 条件变量 136
5.5 变量和内存 140
5.6 多进程编程 143
5.6.1 在进程之间共享内存 144
5.6.2 在进程之间共享信号量 147
5.6.3 消息队列 147
5.6.4 管道和命名管道 150
5.6.5 使用信号与进程通信 151
5.7 套接字 156
5.8 可重入代码和编译器标志 158
5.9 小结 160
第6章 windows线程 161
6.1 创建windows本机线程 161
6.1.1 终止线程 165
6.1.2 创建和重新启动挂起的线程 167
6.1.3 使用内核资源的句柄 168
6.2 同步和资源共享的方式 168
6.2.1 线程间需要同步的一个例子 169
6.2.2 保护对临界区代码的访问 170
6.2.3 用互斥量保护代码段 172
6.2.4 轻量级读写锁 173
6.2.5 信号量 175
6.2.6 条件变量 177
6.2.7 向其他线程或进程发出事件完成的信号 178
6.3 windows中的宽字符串处理 179
6.4 创建进程 180
6.4.1 在进程之间共享内存 182
6.4.2 在子进程中继承句柄 185
6.4.3 互斥量命名及其在进程间的共享 186
6.4.4 用管道通信 187
6.4.5 用套接字进行通信 190
6.5 变量的原子更新 193
6.6 分配线程本地存储 195
6.7 设置线程的优先级 197
6.8 小结 198
第7章 自动并行化和openmp 199
7.1 使用自动并行化产生并行代码 199
7.1.1 识别和并行约简 203
7.1.2 对包含调用的代码进行自动并行化 204
7.1.3 协助编译器实现代码的自动并行化 206
7.2 使用openmp生成并行应用程序 208
7.2.1 使用openmp并行化循环 209
7.2.2 openmp应用程序的运行时行为 210
7.2.3 openmp并行区域中的变量作用域 210
7.2.4 使用openmp并行化约简 212
7.2.5 在并行区域外访问私有数据 212
7.2.6 使用调度改进工作分配 214
7.2.7 用并行段完成独立工作 217
7.2.8 嵌套并行 218
7.2.9 使用openmp动态定义并行任务 219
7.2.10 保持数据对线程私有 223
7.2.11 控制openmp运行时环境 225
7.2.12 等待工作完成 227
7.2.13 限制执行代码区域的线程 229
7.3 确保并行区域的代码按顺序执行 232
7.4 折叠循环改进工作负荷均衡 233
7.5 强制实现内存一致性 234
7.6 并行化示例 235
7.7 小结 239
第8章 手工编码的同步和共享 240
8.1 原子操作 240
8.1.1 用比较和交换指令构成更复杂的原子操作 242
8.1.2 强制实现内存排序以确保正确操作 245
8.1.3 编译器对内存排序指令的支持 247
8.1.4 编译器对操作的重新排序 247
8.1.5 易失变量 251
8.2 操作系统提供的原子操作 251
8.3 无锁算法 254
8.3.1 dekker算法 254
8.3.2 带循环缓存的生产者/消费者 256
8.3.3 扩展到多个消费者或生产者 259
8.3.4 将生产者/消费者扩展到多个线程 260
8.3.5 更改生产者/消费者代码为使用原子操作 266
8.3.6 aba问题 268
8.4 小结 271
第9章 基于多核处理器的扩展 272
9.1 对应用程序扩展的限制 272
9.1.1 串行代码对性能的限制 272
9.1.2 超线性扩展 275
9.1.3 工作负荷不均衡 276
9.1.4 热锁 277
9.1.5 库代码扩展 282
9.1.6 工作量不足 284
9.1.7 算法限制 286
9.2 扩展的硬件限制 288
9.2.1 核心之间的带宽共享 288
9.2.2 伪共享 290
9.2.3 缓存冲突和容量 293
9.2.4 流水线资源匮乏 297
9.3 操作系统对扩展性的限制 301
9.3.1 过度订阅 301
9.3.2 使用处理器绑定改善内存局部性 303
9.3.3 优先级反转 310
9.4 多核处理器和扩展 310
9.5 小结 311
第10章 其他并行技术 312
10.1 基于gpu的运算 312
10.2 语言扩展 314
10.2.1 线程构建模块 314
10.2.2 cilk++ 317
10.2.3 grand central dispatch 320
10.2.4 为未来c和c++标准提议的可能功能 321
10.2.5 微软的c++/cli 324
10.3 其他语言 325
10.4 集群技术 327
10.4.1 mpi 328
10.4.2 以mapreduce作为扩展策略 331
10.4.3 网格 332
10.5 事务性内存 332
10.6 向量化 333
10.7 小结 334
第11章 结束语 335
11.1 编写并行应用程序 335
11.1.1 识别任务 335
11.1.2 估算性能提升 336
11.1.3 确定依赖关系 336
11.1.4 数据争用和互斥锁扩展限制 336
11.1.5 锁的粒度 337
11.2 多核处理器上的并行代码 337
11.3 并行化的未来 339
参考文献 340
索引 342
相关推荐
3. Scala的学习资料:本书《Scala程序设计:Java虚拟机多核编程实战》是由Venkat Subramaniam所著,郑有李剑翻译,是一本为Java程序员所写,讲授Scala编程的书籍。书中包含了对Scala的函数式编程基础的介绍,涵盖了...
《Scala程序设计:Java虚拟机多核编程实战》是一本专为程序员和有经验的Java开发者设计的书籍,旨在引导读者掌握Scala语言,利用其功能强大的特性进行并发编程。Scala是一种融合了函数式和面向对象编程特点的静态...
标题提及了两本书籍资源——"Scala程序设计(第2版).pdf"和"Scala程序设计-JAVA虚拟机多核编程实战.pdf",这表明主题聚焦在Scala编程语言以及其与Java虚拟机(JVM)多核编程的结合应用上。描述简单明了,确认了这两...
通过学习《精通lambda表达式:Java多核编程》,开发者不仅能够掌握lambda表达式的语法和用法,还能了解到如何在现代Java应用中有效地利用多核处理器,实现程序性能的大幅提升。这本书对于想要提升Java并发编程能力的...
《Java并发编程实战》是一本深入探讨Java平台并发编程的权威指南,由Tim ...在多核处理器的时代,掌握并发编程技巧是每个Java开发者的必备能力,而《Java并发编程实战》无疑为此提供了一个全面而深入的学习资源。
### Java并发编程实战知识点概述 #### 一、Java并发特性详解 在《Java并发编程实战》这本书中,作者深入浅出地介绍了Java 5.0和Java 6中新增的并发特性。这些特性旨在帮助开发者更高效、安全地编写多线程程序。书中...
《C++并发编程实战》是一本深入探讨C++并发编程技术的书籍,其源码库名为Cpp-Concurrency-in-Action-master。并发编程是现代多核处理器环境下提高软件性能的关键技术,C++作为一门强大且灵活的编程语言,提供了丰富...
《C#多线程编程实战(原书第二版)源码》是一本深入探讨C#中多线程技术的专业书籍,其源码提供了丰富的实践示例,帮助读者掌握并发编程的核心概念和技术。在C#中,多线程是实现高性能、响应式应用程序的关键组成部分...
"OPENMP"是Open Multi-Processing的缩写,是一种广泛使用的API(应用程序编程接口),用于支持共享内存多核平台的并行编程。在浙江大学的课件中,OPENMP可能被作为主要的并行编程工具来教授。以下是OPENMP的关键特性...
本资源"《C#多线程编程实战》完整源码"提供了丰富的实例,适用于学习和实践C#中的多线程概念。 在C#中,多线程允许应用程序同时执行多个独立的任务,提高系统利用率并优化性能。.NET框架为开发者提供了强大的支持,...
《Java多线程编程实战指南》这本书深入浅出地讲解了Java多线程的核心概念和实战技巧,分为核心篇和设计模式篇,旨在帮助开发者掌握并应用多线程技术。 1. **线程基础** - **线程的创建**:Java提供了两种创建线程...
《C#多线程编程实战》是一本专为C#开发者设计的深度学习多线程技术的书籍。这本书全面覆盖了C#中的并发和多线程编程,旨在帮助读者掌握如何在多核处理器环境下有效利用系统资源,提高程序的执行效率和响应速度。 在...
Java并发编程实战的目标是提高程序的响应速度、可靠性和可扩展性,通过充分利用多核处理器的优势,提高程序的响应速度和可靠性,同时实现更高效的任务调度和资源利用。 Java中的线程是轻量级的,可以创建大量的线程...
书籍是什么,是希望,是神圣的,你们这些译者简直就是在犯罪 ,不过要是英文功底不好,还是建议买本看吧,谁让你英文水平不如他们呢 《JAVA并发编程实践》随着多核处理器的普及,使用并发成为构建高性能应用程序的...
《Java并发编程实战》是Java开发者深入理解和掌握并发编程的一本经典著作...通过阅读《Java并发编程实战》,读者可以深入学习这些知识点,从而更好地应对多线程环境下的编程挑战,编写出更加健壮和高效的Java应用程序。
《Java并发编程实战》是Java开发者必读的经典书籍之一,它深入浅出地探讨了Java平台上的并发编程技术。这本书不仅提供了理论知识,还包含了大量实际应用案例和源码,帮助读者更好地理解和掌握多线程编程的核心概念。...