描述
开 本: 16开纸 张: 胶版纸包 装: 平装-胶订是否套装: 否国际标准书号ISBN: 9787111557494丛书名: 高性能计算技术丛书
内容简介
本书以清晰简明的方式介绍了CUDAC编程的核心知识,始于运行CUDA样例程序,快速引导读者构建自己的代码。自始至终,你可以通过亲手创建、运行和修改书中的示例程序进行体验式教学。书中配备的实践项目用以加深和巩固你的理解。
目 录
目 录 Contents
本书赞誉
致谢
第0章 本书导读1
0.1 什么是CUDA1
0.2 学习CUDA的“须知”2
0.3 本书的读者对象3
0.4 学习CUDA的3
0.5 本书的组织结构4
0.6 本书体例5
0.7 本书代码6
0.8 用户指南7
0.9 历史沿革8
参考文献9
第1章 起步10
1.1 运行CUDA样例程序10
1.1.1 在Windows下运行CUDA样例程序11
1.1.2 在Linux下运行CUDA样例程序13
1.1.3 估计“加速效果”13
1.2 运行我们自己的串行程序14
1.2.1 dist_v1应用15
1.2.2 dist_v2应用16
1.3 本章小结18
1.4 推荐项目18
第2章 CUDA基础知识19
2.1 CUDA并行模式 19
2.2 需要知道的CUDA API和C语言拓展21
2.3 本章小结23
2.4 推荐项目23
参考文献24
第3章 从循环到网格25
3.1 并行化 dist_v125
3.2 并行化dist_v229
3.3 标准操作流程33
3.4 简化操作流程33
3.4.1 统一内存和托管数组34
3.4.2 使用cudaMallocManaged()实现的距离应用34
3.5 本章小结36
3.6 推荐项目37
参考文献38
第4章 二维网格与交互式图形39
4.1 启动二维计算网格40
4.1.1 二维内核启动的语法41
4.1.2 定义二维内核41
4.1.3 dist_2d43
4.2 通过图形交互实时显示45
4.3 stability应用程序54
4.4 本章小结62
4.5 推荐项目62
参考文献62
第5章 模板与共享内存64
5.1 线程间依赖64
5.2 一维网格上的导数计算66
5.2.1 实现dd_ld_global66
5.2.2 实现dd_ld_shared69
5.2.3 解决二维拉普拉斯方程:heat_2d72
5.2.4 图像边缘锐化:sharpen83
5.3 本章小结96
5.4 推荐项目97
参考文献98
第6章 归约与原子操作99
6.1 全局交互的线程99
6.2 实现parallel_dot100
6.3 计算整体属性:centroid_2d106
6.4 本章小结113
6.5 推荐项目113
参考文献114
第7章 三维数据交互115
7.1 计算三维网格数据:dist_3d117
7.2 查看三维数据并与之交互:vis_3d119
7.2.1 切片法121
7.2.2 体绘制法124
7.2.3 光线投射法124
7.2.4 创建vis_3d应用126
7.3 本章小结139
7.4 推荐项目139
参考文献140
第8章 CUDA函数库实践141
8.1 自定义的与现有的141
8.2 Thrust库143
8.2.1 使用inner_product()计算向量的模144
8.2.2 使用transform()计算距离147
8.2.3 使用generate()、transform()以及reduce()对的值进行估计151
8.3 cuRAND库156
8.4 NPP库158
8.4.1 sharpen_npp159
8.4.2 更多使用NPP进行的图像处理操作163
8.5 线性代数中的cuSOLVER和cuBLAS实践166
8.6 cuDNN库170
8.7 ArrayFire库171
8.8 本章小结171
8.9 推荐项目171
参考文献172
第9章 探索CUDA生态系统174
9.1 主要资源的权威列表174
9.1.1 CUDA空间174
9.1.2 其他的主要网络资源175
9.1.3 在线课程176
9.1.4 CUDA书籍176
9.2 更多资源179
9.2.1 CUDA样例179
9.2.2 CUDA语言和库179
9.2.3 更多的CUDA书籍179
9.3 本章小结180
9.4 推荐项目180
附录A 硬件设置182
附录B 软件设置189
附录C C语言编程须知201
附录D CUDA实践技巧:计时、性能分析、错误处理与调试229
本书赞誉
致谢
第0章 本书导读1
0.1 什么是CUDA1
0.2 学习CUDA的“须知”2
0.3 本书的读者对象3
0.4 学习CUDA的3
0.5 本书的组织结构4
0.6 本书体例5
0.7 本书代码6
0.8 用户指南7
0.9 历史沿革8
参考文献9
第1章 起步10
1.1 运行CUDA样例程序10
1.1.1 在Windows下运行CUDA样例程序11
1.1.2 在Linux下运行CUDA样例程序13
1.1.3 估计“加速效果”13
1.2 运行我们自己的串行程序14
1.2.1 dist_v1应用15
1.2.2 dist_v2应用16
1.3 本章小结18
1.4 推荐项目18
第2章 CUDA基础知识19
2.1 CUDA并行模式 19
2.2 需要知道的CUDA API和C语言拓展21
2.3 本章小结23
2.4 推荐项目23
参考文献24
第3章 从循环到网格25
3.1 并行化 dist_v125
3.2 并行化dist_v229
3.3 标准操作流程33
3.4 简化操作流程33
3.4.1 统一内存和托管数组34
3.4.2 使用cudaMallocManaged()实现的距离应用34
3.5 本章小结36
3.6 推荐项目37
参考文献38
第4章 二维网格与交互式图形39
4.1 启动二维计算网格40
4.1.1 二维内核启动的语法41
4.1.2 定义二维内核41
4.1.3 dist_2d43
4.2 通过图形交互实时显示45
4.3 stability应用程序54
4.4 本章小结62
4.5 推荐项目62
参考文献62
第5章 模板与共享内存64
5.1 线程间依赖64
5.2 一维网格上的导数计算66
5.2.1 实现dd_ld_global66
5.2.2 实现dd_ld_shared69
5.2.3 解决二维拉普拉斯方程:heat_2d72
5.2.4 图像边缘锐化:sharpen83
5.3 本章小结96
5.4 推荐项目97
参考文献98
第6章 归约与原子操作99
6.1 全局交互的线程99
6.2 实现parallel_dot100
6.3 计算整体属性:centroid_2d106
6.4 本章小结113
6.5 推荐项目113
参考文献114
第7章 三维数据交互115
7.1 计算三维网格数据:dist_3d117
7.2 查看三维数据并与之交互:vis_3d119
7.2.1 切片法121
7.2.2 体绘制法124
7.2.3 光线投射法124
7.2.4 创建vis_3d应用126
7.3 本章小结139
7.4 推荐项目139
参考文献140
第8章 CUDA函数库实践141
8.1 自定义的与现有的141
8.2 Thrust库143
8.2.1 使用inner_product()计算向量的模144
8.2.2 使用transform()计算距离147
8.2.3 使用generate()、transform()以及reduce()对的值进行估计151
8.3 cuRAND库156
8.4 NPP库158
8.4.1 sharpen_npp159
8.4.2 更多使用NPP进行的图像处理操作163
8.5 线性代数中的cuSOLVER和cuBLAS实践166
8.6 cuDNN库170
8.7 ArrayFire库171
8.8 本章小结171
8.9 推荐项目171
参考文献172
第9章 探索CUDA生态系统174
9.1 主要资源的权威列表174
9.1.1 CUDA空间174
9.1.2 其他的主要网络资源175
9.1.3 在线课程176
9.1.4 CUDA书籍176
9.2 更多资源179
9.2.1 CUDA样例179
9.2.2 CUDA语言和库179
9.2.3 更多的CUDA书籍179
9.3 本章小结180
9.4 推荐项目180
附录A 硬件设置182
附录B 软件设置189
附录C C语言编程须知201
附录D CUDA实践技巧:计时、性能分析、错误处理与调试229
前 言
Praise 本书赞誉FORTRAN(盛行于20世纪60年代)是早允许我们在大型机上编程的语言。之后是BASIC(流行于20世纪80年代)赋予我们为批微型计算机编写程序的能力。现在轮到CUDA,让我们可以为超级微型计算机编写程序。
本书介绍的技术能够帮助工程和数学等领域的研究者以超越微机100倍的速度执行计算任务。这使新的计算任务得以完成,也使本书得以成为颠覆传统规则的教程。
—Richard H. Rand,康奈尔大学机械与航空航天工程系教授、数学系教授本书结构合理,内容实用,能够帮助读者快速体验CUDA并行编程并即时得到结果。本书围绕不同科学和工程问题,展示了GPU编程的魅力。书中提供了优秀的示例程序和项目练习,让人读之愉悦。
—Mark Staveley博士,微软Azure高性能计算高级项目经理本书名副其实,手把手教授读者基本概念、核心策略、关键术语和典型示例。这些内容有机构成的教学体系以老道而深入的方式介绍高性能计算。本书同时适用于专家和普通读者。
—Joseph M. Iaquinto博士,VA Puget Sound公司研究专家本书体现的实用性与我为工程师讲授数值方法课程的教学方法具有惊人的一致性。本书将为工程专业的学生以及程序员补充新的数值计算工具箱,使他们能够基于CUDA进行高性能科学计算。对于有一定编程基础的CUDA初学者,本书堪称完美。建议读者遵从作者的建议,尽早好好练习实践项目。践行本书的理论,你将可以熟练应对GPU计算方面的项目,进入CUDA开发者行列。
—Lorena A. Barba,乔治华盛顿大学机械与航空航天工程系副教授致 谢 Acknowledgements我们需要向很多人致谢,没有他们也就没有这本书。
感谢我们的家人,在写作本书的过程中,我们对他们时有忽略。谢谢Laura Lewin和Pearson公司的所有人,他们为本书的编辑、出版和营销做了大量努力。多谢《CUDA专家手册:GPU编程权威指南》一书的作者Nicholas Wilt先生(曾任职于英伟达公司,现任职于亚马逊公司),是他建议我们与Laura联系,终促成了本书的出版。同样需要感谢英伟达公司的Thomas Bradley、微软公司的Mark Staveley和康奈尔大学的Richard Rand,作为技术评审专家,他们提供了颇具建设性的评论、校正和见解。
谢谢华盛顿大学西雅图校区机械工程系的同事们。他们与我们上聊科技大势下聊底层技术细节,为本书贡献了素材。这些同事包括却不仅限于Mark Ganter、Di Zhang、Ben Weiss等人。他们帮本书绘制了多幅图片并提供了多个好用的软件帮我们制作标签和自动排版代码。我们也要感谢机械工程系系主任Per Reinhall,是他批准了我们的课程申请,正是这门课促使我们编写了本书的很多内容。另外要感谢同校放射科的David Haynor和西雅图VA医院的William Ledoux,他们的研究项目持续围绕着CUDA相关的技术探索。
特别感谢英伟达公司的员工们。包括首席执行官黄仁勋,他一直坚信并热情坚持基于GPU的并行计算;学术项目经理Chandra Cheij;高等教育与医疗行业主任Kimberly Powell;给我们帮助和启迪的CUDA大师Jon Saposhnik和Bob Crovella。后同样的感谢送给战略营销主任Jay White,他长期支持西雅图地区的GPU计算交流会并是我们聚会的召集人。
我们还要感谢所有的学生。他们敢于参加华盛顿大学早期的CUDA课程,颇有冒险精神。特别是已毕业的硕士生Grant Marchelli(现在他已拿到了博士学位并受聘在Envitrum公司任职CTO),他参与了课程的很多关键环节,包括建立实验环境、提供示例代码并受邀讲课。特别感谢Gerald Barnett,当本书进入稿编辑环节时,他立即放下自己的事情,全情参与。
后,真心感谢本书的读者。分享对象的价值取决于有没有合适的人去共享。谢谢你们对本书感兴趣。我们真诚地希望本书能为你们带来有用的经验和丰厚的回报。
本书介绍的技术能够帮助工程和数学等领域的研究者以超越微机100倍的速度执行计算任务。这使新的计算任务得以完成,也使本书得以成为颠覆传统规则的教程。
—Richard H. Rand,康奈尔大学机械与航空航天工程系教授、数学系教授本书结构合理,内容实用,能够帮助读者快速体验CUDA并行编程并即时得到结果。本书围绕不同科学和工程问题,展示了GPU编程的魅力。书中提供了优秀的示例程序和项目练习,让人读之愉悦。
—Mark Staveley博士,微软Azure高性能计算高级项目经理本书名副其实,手把手教授读者基本概念、核心策略、关键术语和典型示例。这些内容有机构成的教学体系以老道而深入的方式介绍高性能计算。本书同时适用于专家和普通读者。
—Joseph M. Iaquinto博士,VA Puget Sound公司研究专家本书体现的实用性与我为工程师讲授数值方法课程的教学方法具有惊人的一致性。本书将为工程专业的学生以及程序员补充新的数值计算工具箱,使他们能够基于CUDA进行高性能科学计算。对于有一定编程基础的CUDA初学者,本书堪称完美。建议读者遵从作者的建议,尽早好好练习实践项目。践行本书的理论,你将可以熟练应对GPU计算方面的项目,进入CUDA开发者行列。
—Lorena A. Barba,乔治华盛顿大学机械与航空航天工程系副教授致 谢 Acknowledgements我们需要向很多人致谢,没有他们也就没有这本书。
感谢我们的家人,在写作本书的过程中,我们对他们时有忽略。谢谢Laura Lewin和Pearson公司的所有人,他们为本书的编辑、出版和营销做了大量努力。多谢《CUDA专家手册:GPU编程权威指南》一书的作者Nicholas Wilt先生(曾任职于英伟达公司,现任职于亚马逊公司),是他建议我们与Laura联系,终促成了本书的出版。同样需要感谢英伟达公司的Thomas Bradley、微软公司的Mark Staveley和康奈尔大学的Richard Rand,作为技术评审专家,他们提供了颇具建设性的评论、校正和见解。
谢谢华盛顿大学西雅图校区机械工程系的同事们。他们与我们上聊科技大势下聊底层技术细节,为本书贡献了素材。这些同事包括却不仅限于Mark Ganter、Di Zhang、Ben Weiss等人。他们帮本书绘制了多幅图片并提供了多个好用的软件帮我们制作标签和自动排版代码。我们也要感谢机械工程系系主任Per Reinhall,是他批准了我们的课程申请,正是这门课促使我们编写了本书的很多内容。另外要感谢同校放射科的David Haynor和西雅图VA医院的William Ledoux,他们的研究项目持续围绕着CUDA相关的技术探索。
特别感谢英伟达公司的员工们。包括首席执行官黄仁勋,他一直坚信并热情坚持基于GPU的并行计算;学术项目经理Chandra Cheij;高等教育与医疗行业主任Kimberly Powell;给我们帮助和启迪的CUDA大师Jon Saposhnik和Bob Crovella。后同样的感谢送给战略营销主任Jay White,他长期支持西雅图地区的GPU计算交流会并是我们聚会的召集人。
我们还要感谢所有的学生。他们敢于参加华盛顿大学早期的CUDA课程,颇有冒险精神。特别是已毕业的硕士生Grant Marchelli(现在他已拿到了博士学位并受聘在Envitrum公司任职CTO),他参与了课程的很多关键环节,包括建立实验环境、提供示例代码并受邀讲课。特别感谢Gerald Barnett,当本书进入稿编辑环节时,他立即放下自己的事情,全情参与。
后,真心感谢本书的读者。分享对象的价值取决于有没有合适的人去共享。谢谢你们对本书感兴趣。我们真诚地希望本书能为你们带来有用的经验和丰厚的回报。
评论
还没有评论。