多核应用编程实战
¥
12.38
1.6折
¥
79
九五品
仅1件
作者(美)Darryl Gove
出版社人民邮电出版社
ISBN9787115317506
出版时间2013-06
版次1
装帧平装
开本16开
纸张胶版纸
页数345页
字数99999千字
定价79元
上书时间2024-12-16
商品详情
- 品相描述:九五品
- 商品描述
-
基本信息
书名:多核应用编程实战
定价:79.00元
作者:(美)Darryl Gove
出版社:人民邮电出版社
出版日期:2013-06-01
ISBN:9787115317506
字数:526000
页码:345
版次:1
装帧:平装
开本:12开
商品重量:
编辑推荐
多核应用编程实战面向主流平台打造多核应用程序,真正实现高性能与高可扩展性并举。全面介绍相关主题与技术,免除你翻查搜索其他资料之苦。不拘泥于单个并行处理方法和平台,面向多种操作系统和处理器展示示例,让你一书在手,别无他求!弱化编程语言基础知识,从更高层次考量如何编写功能正确、性能优良、可扩展至多核的应用程序代码。
内容提要
《多核应用编程实战》是一本全面实用的多核应用编程指南,旨在介绍如何编写功能正确、性能优越且适合扩展为在多个CPU核心的系统运行的应用程序。《多核应用编程实战》面向多种操作系统和处理器类型引用程序示例,内容涵盖类UNIX操作系统(Linux、OracleSolaris、OSX)和Windows系统上多核应用的编写方法、多核的硬件实现对应用程序的性能影响、编写并行应用程序时要避免的潜在问题,以及如何编写可扩展至大量并行线程的应用程序。 《多核应用编程实战》适合所有C程序员学习参考。
目录
章硬件、进程和线程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章自动并行化和OpenMP7.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小结0章其他并行技术10.1基于GPU的运算10.2语言扩展10.2.1线程构建模块10.2.2Cilk 10.2.3GrandCentralDispatch10.2.4为未来C和C 标准提议的可能功能10.2.5微软的C /CLI10.3其他语言10.4集群技术10.4.1MPI10.4.2以MapReduce作为扩展策略10.4.3网格10.5事务性内存10.6向量化10.7小结1章结束语11.1编写并行应用程序11.1.1识别任务11.1.2估算性能提升11.1.3确定依赖关系11.1.4数据争用和互斥锁扩展限制11.1.5锁的粒度11.2多核处理器上的并行代码11.3并行化的未来参考文献索引
作者介绍
Darryl Gove是Oracle SolarisStudio编译团队的首席高级软件工程师,负责对应用程序以及基准测试程序进行分析、并行化和优化。Darryl获得了英国南安普顿大学的运筹学硕士和博士学位,其著作包括SolarisApplication Programming(Prentice Hall,2008)、The Developer'sEdge(Sun Microsystems,2009)和OpenSPARCInternals(lulu.com,2008,合著)。此外,他经常在个人博客www.darrylgove.com上发表关于优化和编码的文章。
序言
— 没有更多了 —
以下为对购买帮助不大的评价