多核应用编程实战

多核应用编程实战
分享
扫描下方二维码分享到微信
打开微信,点击右上角”+“,
使用”扫一扫“即可将网页分享到朋友圈。
作者: [美] ,
2013-06
版次: 1
ISBN: 9787115317506
定价: 79.00
装帧: 平装
开本: 16开
纸张: 胶版纸
页数: 345页
字数: 526千字
正文语种: 简体中文
原版书名: Multicore application programming:for windows,linux,and Oracle Solaris
51人买过
  •   《图灵程序设计丛书:多核应用编程实战》是一本全面实用的多核应用编程指南,旨在介绍如何编写功能正确、性能优越且适合扩展为在多个CPU核心的系统运行的应用程序。《图灵程序设计丛书:多核应用编程实战》面向多种操作系统和处理器类型引用程序示例,内容涵盖类UNIX操作系统(Linux、OracleSolaris、OSX)和Windows系统上多核应用的编写方法、多核的硬件实现对应用程序的性能影响、编写并行应用程序时要避免的潜在问题,以及如何编写可扩展至大量并行线程的应用程序。
      Darryl Gove,Oracle Solaris Studio编译团队的高级首席软件工程师,主要负责应用程序和基准方面的分析、并行和优化。他具有英国南安普顿大学运筹学硕士和博士学位,另著有Solaris Application Programming、The Developer’s Edge。此外,他经常在个人博客上发表关于性能、优化、多线程和编码的文章。
    第1章硬件、进程和线程
    1.1计算机的内部结构
    1.2多核处理器的缘起
    1.2.1在单芯片上支持多线程
    1.2.2通过处理器核心流水线作业提高指令发出率
    1.2.3使用缓存保存最近使用的数据
    1.2.4用虚拟内存存储数据
    1.2.5从虚拟地址转换到物理地址
    1.3多处理器系统的特征
    1.4源代码到汇编语言的转换
    1.4.132位与64位代码的性能
    1.4.2确保内存操作的正确顺序
    1.4.3进程和线程的差异
    1.5小结

    第2章高性能编码
    2.1定义性能
    2.2了解算法复杂度
    2.2.1算法复杂度的示例
    2.2.2算法复杂度的重要性
    2.2.3谨慎运用算法复杂度
    2.3结构如何影响性能
    2.3.1在源代码和生成结构上权衡性能和便利性
    2.3.2利用库结构化应用程序
    2.3.3数据结构对性能的影响
    2.4编译器的作用
    2.4.1两种编译器优化
    2.4.2选择合适的编译器选项
    2.4.3如何用跨文件优化提高性能
    2.4.4使用配置文件反馈
    2.4.5潜在的指针别名会如何抑制编译器优化
    2.5通过分析确定占用时间的地方
    2.6怎样避免手动优化
    2.7从设计角度看性能
    2.8小结

    第3章识别并行机会
    3.1使用多进程提高系统工作效率
    3.2多用户使用一个系统
    3.3通过整合提高机器工作效率
    3.3.1用容器隔离共享一个系统的应用程序
    3.3.2使用虚拟机监控程序托管多个操作系统
    3.4采用并行机制提高单个任务的性能
    3.4.1理解并行应用程序
    3.4.2并行如何影响算法的选择
    3.4.3Amdahl定律
    3.4.4确定最大实际线程数
    3.4.5同步成本怎样降低扩展性
    3.5并行模式
    3.5.1使用SIMD指令的数据并行
    3.5.2通过进程或线程实现并行化
    3.5.3多个独立任务
    3.5.4多个松散耦合的任务
    3.5.5相同任务的多个副本
    3.5.6单个任务拆分到多个线程
    3.5.7使用流水线任务完成某个事项
    3.5.8将工作分配给客户端和服务器
    3.5.9将责任划分给生产者和消费者
    3.5.10结合多种并行化策略
    3.6依赖关系对并行运行代码能力的影响
    3.6.1反依赖和输出依赖
    3.6.2通过推测打破依赖
    3.6.3关键路径
    3.7发现并行机会
    3.8小结

    第4章同步和数据共享
    4.1数据争用
    4.1.1使用工具检测数据争用
    4.1.2避免数据争用
    4.2同步原语
    4.2.1互斥量和临界区
    4.2.2自旋锁
    4.2.3信号量
    4.2.4读写锁
    4.2.5屏障
    4.2.6原子操作和无锁代码
    4.3死锁和活锁
    4.4线程和进程间的通信
    4.4.1内存、共享内存和内存映射文件
    4.4.2条件变量
    4.4.3信号和事件
    4.4.4消息队列
    4.4.5命名管道
    4.4.6通过网络栈进行通信
    4.4.7线程之间共享数据的其他方法
    4.5存储线程私有数据
    4.6小结

    第5章使用POSIX线程
    5.1创建线程
    5.1.1线程终止
    5.1.2用子线程接收和传递数据
    5.1.3分离线程
    5.1.4设置pthread的属性
    5.2编译多线程代码
    5.3进程终止
    5.4线程之间共享数据
    5.4.1使用互斥锁保护访问
    5.4.2互斥锁属性
    5.4.3使用自旋锁
    5.4.4读写锁
    5.4.5屏障
    5.4.6信号量
    5.4.7条件变量
    5.5变量和内存
    5.6多进程编程
    5.6.1在进程之间共享内存
    5.6.2在进程之间共享信号量
    5.6.3消息队列
    5.6.4管道和命名管道
    5.6.5使用信号与进程通信
    5.7套接字
    5.8可重入代码和编译器标志
    5.9小结

    第6章Windows线程
    6.1创建Windows本机线程
    6.1.1终止线程
    6.1.2创建和重新启动挂起的线程
    6.1.3使用内核资源的句柄
    6.2同步和资源共享的方式
    6.2.1线程间需要同步的一个例子
    6.2.2保护对临界区代码的访问
    6.2.3用互斥量保护代码段
    6.2.4轻量级读写锁
    6.2.5信号量
    6.2.6条件变量
    6.2.7向其他线程或进程发出事件完成的信号
    6.3Windows中的宽字符串处理
    6.4创建进程
    6.4.1在进程之间共享内存
    6.4.2在子进程中继承句柄
    6.4.3互斥量命名及其在进程间的共享
    6.4.4用管道通信
    6.4.5用套接字进行通信
    6.5变量的原子更新
    6.6分配线程本地存储
    6.7设置线程的优先级
    6.8小结

    第7章自动并行化和OpenMP
    7.1使用自动并行化产生并行代码
    7.1.1识别和并行约简
    7.1.2对包含调用的代码进行自动并行化
    7.1.3协助编译器实现代码的自动并行化
    7.2使用OpenMP生成并行应用程序
    7.2.1使用OpenMP并行化循环
    7.2.2OpenMP应用程序的运行时行为
    7.2.3OpenMP并行区域中的变量作用域
    7.2.4使用OpenMP并行化约简
    7.2.5在并行区域外访问私有数据
    7.2.6使用调度改进工作分配
    7.2.7用并行段完成独立工作
    7.2.8嵌套并行
    7.2.9使用OpenMP动态定义并行任务
    7.2.10保持数据对线程私有
    7.2.11控制OpenMP运行时环境
    7.2.12等待工作完成
    7.2.13限制执行代码区域的线程
    7.3确保并行区域的代码按顺序执行
    7.4折叠循环改进工作负荷均衡
    7.5强制实现内存一致性
    7.6并行化示例
    7.7小结

    第8章手工编码的同步和共享
    8.1原子操作
    8.1.1用比较和交换指令构成更复杂的原子操作
    8.1.2强制实现内存排序以确保正确操作
    8.1.3编译器对内存排序指令的支持
    8.1.4编译器对操作的重新排序
    8.1.5易失变量
    8.2操作系统提供的原子操作
    8.3无锁算法
    8.3.1Dekker算法
    8.3.2带循环缓存的生产者/消费者
    8.3.3扩展到多个消费者或生产者
    8.3.4将生产者/消费者扩展到多个线程
    8.3.5更改生产者/消费者代码为使用原子操作
    8.3.6ABA问题
    8.4小结

    第9章基于多核处理器的扩展
    9.1对应用程序扩展的限制
    9.1.1串行代码对性能的限制
    9.1.2超线性扩展
    9.1.3工作负荷不均衡
    9.1.4热锁
    9.1.5库代码扩展
    9.1.6工作量不足
    9.1.7算法限制
    9.2扩展的硬件限制
    9.2.1核心之间的带宽共享
    9.2.2伪共享
    9.2.3缓存冲突和容量
    9.2.4流水线资源匮乏
    9.3操作系统对扩展性的限制
    9.3.1过度订阅
    9.3.2使用处理器绑定改善内存局部性
    9.3.3优先级反转
    9.4多核处理器和扩展
    9.5小结

    第10章其他并行技术
    10.1基于GPU的运算
    10.2语言扩展
    10.2.1线程构建模块
    10.2.2Cilk++
    10.2.3GrandCentralDispatch
    10.2.4为未来C和C++标准提议的可能功能
    10.2.5微软的C++/CLI
    10.3其他语言
    10.4集群技术
    10.4.1MPI
    10.4.2以MapReduce作为扩展策略
    10.4.3网格
    10.5事务性内存
    10.6向量化
    10.7小结

    第11章结束语
    11.1编写并行应用程序
    11.1.1识别任务
    11.1.2估算性能提升
    11.1.3确定依赖关系
    11.1.4数据争用和互斥锁扩展限制
    11.1.5锁的粒度
    11.2多核处理器上的并行代码
    11.3并行化的未来

    参考文献
    索引
  • 内容简介:
      《图灵程序设计丛书:多核应用编程实战》是一本全面实用的多核应用编程指南,旨在介绍如何编写功能正确、性能优越且适合扩展为在多个CPU核心的系统运行的应用程序。《图灵程序设计丛书:多核应用编程实战》面向多种操作系统和处理器类型引用程序示例,内容涵盖类UNIX操作系统(Linux、OracleSolaris、OSX)和Windows系统上多核应用的编写方法、多核的硬件实现对应用程序的性能影响、编写并行应用程序时要避免的潜在问题,以及如何编写可扩展至大量并行线程的应用程序。
  • 作者简介:
      Darryl Gove,Oracle Solaris Studio编译团队的高级首席软件工程师,主要负责应用程序和基准方面的分析、并行和优化。他具有英国南安普顿大学运筹学硕士和博士学位,另著有Solaris Application Programming、The Developer’s Edge。此外,他经常在个人博客上发表关于性能、优化、多线程和编码的文章。
  • 目录:
    第1章硬件、进程和线程
    1.1计算机的内部结构
    1.2多核处理器的缘起
    1.2.1在单芯片上支持多线程
    1.2.2通过处理器核心流水线作业提高指令发出率
    1.2.3使用缓存保存最近使用的数据
    1.2.4用虚拟内存存储数据
    1.2.5从虚拟地址转换到物理地址
    1.3多处理器系统的特征
    1.4源代码到汇编语言的转换
    1.4.132位与64位代码的性能
    1.4.2确保内存操作的正确顺序
    1.4.3进程和线程的差异
    1.5小结

    第2章高性能编码
    2.1定义性能
    2.2了解算法复杂度
    2.2.1算法复杂度的示例
    2.2.2算法复杂度的重要性
    2.2.3谨慎运用算法复杂度
    2.3结构如何影响性能
    2.3.1在源代码和生成结构上权衡性能和便利性
    2.3.2利用库结构化应用程序
    2.3.3数据结构对性能的影响
    2.4编译器的作用
    2.4.1两种编译器优化
    2.4.2选择合适的编译器选项
    2.4.3如何用跨文件优化提高性能
    2.4.4使用配置文件反馈
    2.4.5潜在的指针别名会如何抑制编译器优化
    2.5通过分析确定占用时间的地方
    2.6怎样避免手动优化
    2.7从设计角度看性能
    2.8小结

    第3章识别并行机会
    3.1使用多进程提高系统工作效率
    3.2多用户使用一个系统
    3.3通过整合提高机器工作效率
    3.3.1用容器隔离共享一个系统的应用程序
    3.3.2使用虚拟机监控程序托管多个操作系统
    3.4采用并行机制提高单个任务的性能
    3.4.1理解并行应用程序
    3.4.2并行如何影响算法的选择
    3.4.3Amdahl定律
    3.4.4确定最大实际线程数
    3.4.5同步成本怎样降低扩展性
    3.5并行模式
    3.5.1使用SIMD指令的数据并行
    3.5.2通过进程或线程实现并行化
    3.5.3多个独立任务
    3.5.4多个松散耦合的任务
    3.5.5相同任务的多个副本
    3.5.6单个任务拆分到多个线程
    3.5.7使用流水线任务完成某个事项
    3.5.8将工作分配给客户端和服务器
    3.5.9将责任划分给生产者和消费者
    3.5.10结合多种并行化策略
    3.6依赖关系对并行运行代码能力的影响
    3.6.1反依赖和输出依赖
    3.6.2通过推测打破依赖
    3.6.3关键路径
    3.7发现并行机会
    3.8小结

    第4章同步和数据共享
    4.1数据争用
    4.1.1使用工具检测数据争用
    4.1.2避免数据争用
    4.2同步原语
    4.2.1互斥量和临界区
    4.2.2自旋锁
    4.2.3信号量
    4.2.4读写锁
    4.2.5屏障
    4.2.6原子操作和无锁代码
    4.3死锁和活锁
    4.4线程和进程间的通信
    4.4.1内存、共享内存和内存映射文件
    4.4.2条件变量
    4.4.3信号和事件
    4.4.4消息队列
    4.4.5命名管道
    4.4.6通过网络栈进行通信
    4.4.7线程之间共享数据的其他方法
    4.5存储线程私有数据
    4.6小结

    第5章使用POSIX线程
    5.1创建线程
    5.1.1线程终止
    5.1.2用子线程接收和传递数据
    5.1.3分离线程
    5.1.4设置pthread的属性
    5.2编译多线程代码
    5.3进程终止
    5.4线程之间共享数据
    5.4.1使用互斥锁保护访问
    5.4.2互斥锁属性
    5.4.3使用自旋锁
    5.4.4读写锁
    5.4.5屏障
    5.4.6信号量
    5.4.7条件变量
    5.5变量和内存
    5.6多进程编程
    5.6.1在进程之间共享内存
    5.6.2在进程之间共享信号量
    5.6.3消息队列
    5.6.4管道和命名管道
    5.6.5使用信号与进程通信
    5.7套接字
    5.8可重入代码和编译器标志
    5.9小结

    第6章Windows线程
    6.1创建Windows本机线程
    6.1.1终止线程
    6.1.2创建和重新启动挂起的线程
    6.1.3使用内核资源的句柄
    6.2同步和资源共享的方式
    6.2.1线程间需要同步的一个例子
    6.2.2保护对临界区代码的访问
    6.2.3用互斥量保护代码段
    6.2.4轻量级读写锁
    6.2.5信号量
    6.2.6条件变量
    6.2.7向其他线程或进程发出事件完成的信号
    6.3Windows中的宽字符串处理
    6.4创建进程
    6.4.1在进程之间共享内存
    6.4.2在子进程中继承句柄
    6.4.3互斥量命名及其在进程间的共享
    6.4.4用管道通信
    6.4.5用套接字进行通信
    6.5变量的原子更新
    6.6分配线程本地存储
    6.7设置线程的优先级
    6.8小结

    第7章自动并行化和OpenMP
    7.1使用自动并行化产生并行代码
    7.1.1识别和并行约简
    7.1.2对包含调用的代码进行自动并行化
    7.1.3协助编译器实现代码的自动并行化
    7.2使用OpenMP生成并行应用程序
    7.2.1使用OpenMP并行化循环
    7.2.2OpenMP应用程序的运行时行为
    7.2.3OpenMP并行区域中的变量作用域
    7.2.4使用OpenMP并行化约简
    7.2.5在并行区域外访问私有数据
    7.2.6使用调度改进工作分配
    7.2.7用并行段完成独立工作
    7.2.8嵌套并行
    7.2.9使用OpenMP动态定义并行任务
    7.2.10保持数据对线程私有
    7.2.11控制OpenMP运行时环境
    7.2.12等待工作完成
    7.2.13限制执行代码区域的线程
    7.3确保并行区域的代码按顺序执行
    7.4折叠循环改进工作负荷均衡
    7.5强制实现内存一致性
    7.6并行化示例
    7.7小结

    第8章手工编码的同步和共享
    8.1原子操作
    8.1.1用比较和交换指令构成更复杂的原子操作
    8.1.2强制实现内存排序以确保正确操作
    8.1.3编译器对内存排序指令的支持
    8.1.4编译器对操作的重新排序
    8.1.5易失变量
    8.2操作系统提供的原子操作
    8.3无锁算法
    8.3.1Dekker算法
    8.3.2带循环缓存的生产者/消费者
    8.3.3扩展到多个消费者或生产者
    8.3.4将生产者/消费者扩展到多个线程
    8.3.5更改生产者/消费者代码为使用原子操作
    8.3.6ABA问题
    8.4小结

    第9章基于多核处理器的扩展
    9.1对应用程序扩展的限制
    9.1.1串行代码对性能的限制
    9.1.2超线性扩展
    9.1.3工作负荷不均衡
    9.1.4热锁
    9.1.5库代码扩展
    9.1.6工作量不足
    9.1.7算法限制
    9.2扩展的硬件限制
    9.2.1核心之间的带宽共享
    9.2.2伪共享
    9.2.3缓存冲突和容量
    9.2.4流水线资源匮乏
    9.3操作系统对扩展性的限制
    9.3.1过度订阅
    9.3.2使用处理器绑定改善内存局部性
    9.3.3优先级反转
    9.4多核处理器和扩展
    9.5小结

    第10章其他并行技术
    10.1基于GPU的运算
    10.2语言扩展
    10.2.1线程构建模块
    10.2.2Cilk++
    10.2.3GrandCentralDispatch
    10.2.4为未来C和C++标准提议的可能功能
    10.2.5微软的C++/CLI
    10.3其他语言
    10.4集群技术
    10.4.1MPI
    10.4.2以MapReduce作为扩展策略
    10.4.3网格
    10.5事务性内存
    10.6向量化
    10.7小结

    第11章结束语
    11.1编写并行应用程序
    11.1.1识别任务
    11.1.2估算性能提升
    11.1.3确定依赖关系
    11.1.4数据争用和互斥锁扩展限制
    11.1.5锁的粒度
    11.2多核处理器上的并行代码
    11.3并行化的未来

    参考文献
    索引
查看详情
系列丛书 / 更多
多核应用编程实战
机器学习实战
[美]Peter Harrington 著;李锐、李鹏、曲亚东 译
多核应用编程实战
图灵程序设计丛书:Python基础教程
[挪威]Magnus Lie Hetland 著;司维、曾军崴、谭颖华 译
多核应用编程实战
JavaScript高级程序设计(第3版)
[美]Nicholas C.Zakas 著;李松峰、曹力 译
多核应用编程实战
Python编程:从入门到实践
[美]埃里克·马瑟斯(Eric Matthes) 著;袁国忠 译
多核应用编程实战
R语言实战(第2版)
[美]卡巴科弗(Robert I. Kabacoff) 著;王小宁、刘撷芯、黄俊文 译
多核应用编程实战
算法(第4版)
[美]Robert、[美]Kevin Wayne 著;谢路云 译
多核应用编程实战
大数据:互联网大规模数据挖掘与分布式处理
[美]Anand、[美]Jeffrey David Ullman 著;王斌 译
多核应用编程实战
Spark快速大数据分析
[美]卡劳(Holden Karau)、[美]肯维尼斯科(Andy Konwinski)、[美]温德尔(Patrick Wendell)、[加拿大]扎哈里亚(Matei Zaharia) 著;王道远 译
多核应用编程实战
MySQL必知必会
[英]福塔(Ben Forta) 著;刘晓霞、钟鸣 译
多核应用编程实战
Objective-C基础教程 第2版
[美]Scott、[美]Waqar、[美]Mark Dalrymple 著;周庆成 译
多核应用编程实战
图解HTTP
[日]上野·宣 著;于均良 译
多核应用编程实战
算法图解
袁国忠 译
您可能感兴趣 / 更多
多核应用编程实战
无辜者的谎言(相信我!看到结局你一定会头皮发麻;全美读者推荐的悬疑神作,GOODREADS高分作品)
[美]A.R.托雷 著;梁颂宇 译;星文文化 出品
多核应用编程实战
孩子,把你的手给我1:怎么说孩子才爱听,怎么教孩子才肯学?帮助每一位3-12岁孩子的父母结束与孩子的所有冲突!
[美]海姆·G.吉诺特
多核应用编程实战
哲学、历史与僭政——重审施特劳斯与科耶夫之争
[美]弗罗斯特(Bryan-Paul Frost) 编;[美]伯恩斯(Timothy W. Burns)
多核应用编程实战
怎样做成大事
[美]丹·加德纳(Dan Gardner) 著;贾拥民 译;湛庐文化 出品;[丹麦]傅以斌(Bent Flyvbjerg)
多核应用编程实战
1200年希腊罗马神话
[美]伊迪丝·汉密尔顿
多核应用编程实战
爱情心理学(新编本)
[美]罗伯特·J. 斯腾伯格 (美)凯琳·斯腾伯格 倪爱萍 译
多核应用编程实战
黄金圈法则
[美]西蒙·斯涅克 著;磨铁文化 出品
多核应用编程实战
最后一章
[美]厄尼·派尔
多核应用编程实战
汤姆·索亚历险记 彩图注音版 一二三四年级5-6-7-8-9岁小学生课外阅读经典 儿童文学无障碍有声伴读世界名著童话故事
[美]马克 吐温
多核应用编程实战
富兰克林自传 名家全译本 改变无数人命运的励志传奇 埃隆马斯克反复推荐 赠富兰克林签名照及精美插图
[美]本杰明·富兰克林 著;李自修 译
多核应用编程实战
汤姆素亚历险记:中小学生课外阅读快乐读书吧 儿童文学无障碍有声伴读世界名著童话故事
[美]马克·吐温
多核应用编程实战
国际大奖图画书系列 共11册(小老鼠的恐惧的大书,大灰狼,红豆与菲比,别烦我,下雪了 ,穿靴子的猫 ,先有蛋,绿 ,特别快递,如果你想看鲸鱼 ,一个部落的孩子 ) 麦克米伦世纪
[美]莱恩·史密斯 (英)埃米莉·格雷维特 (美)劳拉·瓦卡罗·等/文 (英)埃米莉·格雷维特 等/图 彭懿 杨玲玲 阿甲 孙慧阳 白薇 译