C++ AMP:用Visual C++加速大规模并行计算.pdf

C++ AMP:用Visual C++加速大规模并行计算.pdf
 

书籍描述

内容简介
  C++ AMP是Microsoft Visual Studio和C++编程语言的新扩展,用于帮助开发人员充分适应现在和未来的高度并行和异构计算环境。C++ AMP更易用,与C++配合得更好。《C++ AMP:用Visual C++加速大规模并行计算》的目标是帮助C++开发人员在理解C++ AMP核心概念的基础上,掌握更高级的功能。书中包含了C++ AMP程序开发的设计思路、使用方法、真实案例及代码示例,并提供了案例的源代码。通过学习《C++ AMP:用Visual C++加速大规模并行计算》,读者能理解如何在应用程序中最好地使用C++ AMP,还能利用Microsoft Visual Studio 2012提供的调试和剖析工具来解决问题、优化性能。
  《C++ AMP:用Visual C++加速大规模并行计算》的两位作者一位是有20多年C++实践经验的讲师、演讲人和作家,一位是微软工作室的首席软件架构师,他们有丰富的实践经验,因此,本书极具实际应用参考价值。《C++ AMP:用Visual C++加速大规模并行计算》适合专业C++异构编程人员及熟悉C++并希望从事并行编程及异构编程的开发人员。

编辑推荐
帮助C++开发人员在理解C++ AMP核心概念的基础上,理解更高级的功能。包含了C++ AMP程序开发的设计思路、使用方法、真实案例及代码示例,并提供了案例的源代码。
通过学习,读者能理解如何在应用程序中最好地使用C++ AMP,还能利用Microsoft Visual Studio 2012提供的调试和剖析工具来解决问题、优化性能。

作者简介
作者介绍
Kate Gregory是Visual C++方向的Microsoft MVP和微软技术代言人(Microsoft Regional Director)。她在2005年获得年度技术代言人大奖,2010年被授予Visual C++年度MVP。Kate是一位极富有热情的导师、演讲家和作家,有20余年的C++应用经验。

Ade Miller是Microsoft Studio的首席架构师。他的主要兴趣点是并行和分布式计算,以及如何通过工程化领导力提升团队的软件交付效率。他是Parallel Programming with Microsoft .NET和Parallel Programming with Microsoft Visual C++两本书的作者之一。
译者介绍
车皓阳,从事大数据、数据库等领域的研究和管理工作,著述颇丰,是《驾驭大数据》和《UML面向对象建模与设计(第2版)》等经典外版图书的译者。

黄文龙,目前任职于华为研究院,从事大数据系统、新型存储系统的研究工作。他曾经从事过网格计算、云计算、数据库系统等领域的研发工作,著有多篇论文与专利。

目录
第1章C++AMP概述
1.1为什么选择GPGPU?什么是异构计算?
1.1.1 性能提升史
1.1.2异构平台
1.1.3GPU架构
1.1.4通过并行性提升性能的候选方案
1.2CPU并行技术
1.2.1向量化
1.2.2OpenMP
1.2.3并发运行时库(ConcRT)和并行模式库
1.2.4任务并行库
1.2.5WARP—Windows高级栅格化平台
1.2.6GPU并行技术
1.2.7成功并行化的要求
1.3C++AMP方法
1.3.1C++ AMP将GPGPU(以及更多)带进主流
1.3.2C++ AMP是C++,而不是C
1.3.3C++ AMP使用了我们熟识的工具
1.3.4C++AMP是一个近乎全面的代码库
1.3.5C++ AMP可以生成可移植的、不会过时的执行代码
1.4小结
第2章Nbody案例
2.1运行示例前的准备L作
2.2运行Nbody示例
2.3示例的结构
2.4 CPU计算
2.4.1数据结构
2.4.2wWinMain函数
2.4.3OnFrameMove回调函数
2.4.4OnD3D11CreateDevice回调函数
2.4.5OnGUIEvent回调函数
2.4.6OnD3D11FrameRender回调函数
2.5.1NBodySimpleInteractionEngine
2.5.2NBodySimpleSingleCore
2.5.3NBodySimpleMultiCore
2.5.4NBodySimpleInteractionEngine::BodyBodyInteraction
2.6.2CreateTasks
2.7C++AMPNBody类
2.7.1NBodyAmpSimple::Integrate
2.7.2BodyBodyInteraction
第3章C++ AMP基础
3.1array
3.2accelerator与accelerator_view
3.3index
3.4extent
3.5array_view
3.6parallel_for_each
3.7使用restrict(amp)标记的函数
3.8在CPU和GPU之间复制数据
3.9数学库函数
3.10小结
第4章分组
4.1使用分组的目的和好处
4.2tile_static内存
4.3tiled—extent
4.4tiled_index
4.5将简单算法改成分组算法
4.5.1使用tile_static内存
4.5.2分组栅和同步
4.5.3完成简单版本到分组版本的修改
4.6分组大小的影响
4.7选择分组大小
4.8小结
第5章分组NBody案例
5.1分组功能对NBody的提速有多大帮助
5.2N体问题的分组算法
5.2.1NBodyAmpTiled类
5.2.2NBodyAmpTiled::Integrate
5.3使用Concurrency Visualizer
5.4选择分组大小
5.5小结
第6章调试
6.1第一步
6.1.1选择GPU调试还是CPU调试
6.1.2参考加速器
6.2GPU调试基础
6.2.1熟悉的窗口和技巧
6.2.2Debug Location工具栏
6.2.3检测竞态
6.3检查线程运行状况
6.3.1线程标记
6.3.2GPU Threads窗口
6.3.3Parallel Stacks窗口
6.3.4Parallel Watch窗口
6.3.5对线程置标记、分组和过滤
6.4施加更多的控制
6.4.1冻结与解冻线程
6.4.2Run Tile to Cursor
6.5小结
第7章优化
7.1一种性能优化方法
7.2分析性能
7.2.1测量内核性能
7.2.2使用Concurrency Visualizer
7.2.3使用Concurrency Visualizer SDK
7.3优化内存访问模式
7.3.1别名和parallel_for_ each调用
7.3.2往返GPU的高效数据复制
7.3.3高效加速器全局内存访问
7.3.4结构体数组与数组结构体
7.3.5高效的分组静态内存访问
7.3.6常量内存
7.3.7纹理内存
7.3.8占用比和寄存器
7.4优化计算
7.4.1避免分支代码
7.4.2选择合适的精度
7.4.3数学运算的成本估算
7.4.4循环展开
7.4.5障栅
7.4.6排队模式
7.5小结
第8章性能案例——归约
8.1问题
8.2示例的结构
8.2.1初始化和负载
8.2.2Concurrency Visualizer标记
8.2.3TimeFunc()
8.2.4开销
8.3CPU算法
8.3.1串行算法
8.3.2并行算法
8.4C++AMP算法
8.4.1简单版本
8.4.2使用array_view的简单版本
8.4.3简单优化版本
8.4.4原始分组版本
8.4.5共享内存的分组版本
8.4.6使分支数降至最低的版本
8.4.7消除槽位冲突版本
8.4.8减少停滞线程版本
8.4.9循环展开版本
8.4.10级联归约版本
8.4.11带循环展开的级联归约版本
8.5小结
……
第9章使用多个加速器工作
第10章Cartoonizer案例
第11章图形互操作
第12章提示、技巧与最佳实践
附录其他资源

文摘
版权页:



插图:

购买书籍

当当网购书 京东购书 卓越购书

PDF电子书下载地址

相关书籍

搜索更多