《CUDA并行程序设计:GPU编程指南》

基本信息

原书名:CUDA Programming:A Developer’s Guide to Parallel Computing with GPUs

作者: (美)Shane Cook

译者: 苏统华 李东 李松泽 魏通

丛书名: 高性能计算系列丛书

出版社:机械工业出版社

ISBN:9787111448617

上架时间:2014-1-10

出版日期:2014 年1月

开本:16开

页码:1

版次:1-1

所属分类:计算机

更多关于》》》 《CUDA并行程序设计:GPU编程指南》

内容简介

书籍

计算机书籍

  《cuda并行程序设计:gpu编程指南》是cuda并行程序设计领域最全面、最详实和最具权威性的著作之一,由cuda开发者社区技术总监亲自撰写,英伟达中国首批cuda官方认证工程师翻译,详实地讲解了cuda并行程序设计的技术知识点(平台、架构、硬件知识、开发工具和热点技术)和编程方法,包含大量实用代码示例,实践性非常强。

  全书共分为12章。第1章从宏观上介绍流处理器演变历史。第2章详解gpu并行机制,深入理解串行与并行程序,以辩证地求解问题。第3章讲解cuda设备及相关的硬件和体系结构,以实现最优cuda程序性能。第4章介绍cuda开发环境搭建和可用调试环境。第5章介绍与cuda编程紧密相关的核心概念——网格、线程块与线程,并通过示例说明线程模型与性能的关系。第6章借助实例详细讲解了不同类型内存的工作机制,并指出实践中容易出现的误区。第7章细述多任务的cpu和gpu协同,并介绍多个cpu/gpu编程秘技。第8章介绍如何在应用程序中编写和使用多gpu。第9章详述cuda编程性能限制因素、分析cuda代码的工具和技术。第10章介绍编程实践中的库与软件开发工具包。第11章讲解如何设计基于gpu的系统。第12章总结cuda应用中易犯错误以及应对建议。

目录

《cuda并行程序设计:gpu编程指南》

致中国读者

译者序

前 言

第1章 超级计算简史 1

1.1 简介 1

1.2 冯·诺依曼计算机架构 2

1.3 克雷 4

1.4 连接机 5

1.5 cell处理器 6

1.6 多点计算 8

1.7 早期的gpgpu编程 10

1.8 单核解决方案的消亡 11

1.9 英伟达和cuda 12

1.10 gpu硬件 13

1.11 cuda的替代选择 15

1.11.1 opencl 15

1.11.2 directcompute 16

1.11.3 cpu的替代选择 16

1.11.4 编译指令和库 17

1.12 本章小结 18

第2章 使用gpu理解并行计算 19

2.1 简介 19

2.2 传统的串行代码 19

2.3 串行/并行问题 21

2.4 并发性 22

2.5 并行处理的类型 25

2.5.1 基于任务的并行处理 25

2.5.2 基于数据的并行处理 27

2.6 弗林分类法 29

2.7 常用的并行模式 30

2.7.1 基于循环的模式 30

2.7.2 派生/汇集模式 31

2.7.3 分条/分块 33

2.7.4 分而治之 34

2.8 本章小结 34

第3章 cuda硬件概述 35

3.1 pc架构 35

3.2 gpu硬件结构 39

3.3 cpu与gpu 41

3.4 gpu计算能力 42

3.4.1 计算能力1.0 42

3.4.2 计算能力1.1 43

3.4.3 计算能力1.2 44

3.4.4 计算能力1.3 44

3.4.5 计算能力2.0 44

3.4.6 计算能力2.1 46

第4章 cuda环境搭建 48

4.1 简介 48

4.2 在windows下安装软件开发工具包 48

4.3 visual studio 49

4.3.1 工程 49

4.3.2 64位用户 49

4.3.3 创建工程 51

4.4 linux 52

4.5 mac 55

4.6 安装调试器 56

4.7 编译模型 58

4.8 错误处理 59

4.9 本章小结 60

第5章 线程网格、线程块以及线程 61

5.1 简介 61

5.2 线程 61

5.2.1 问题分解 62

5.2.2 cpu与gpu的不同 63

5.2.3 任务执行模式 64

5.2.4 gpu线程 64

5.2.5 硬件初窥 66

5.2.6 cuda内核 69

5.3 线程块 70

5.4 线程网格 74

5.4.1 跨幅与偏移 76

5.4.2 x与y方向的线程索引 77

5.5 线程束 83

5.5.1 分支 83

5.5.2 gpu的利用率 85

5.6 线程块的调度 88

5.7 一个实例——统计直方图 89

5.8 本章小结 96

第6章 cuda内存处理 99

6.1 简介 99

6.2 高速缓存 100

6.3 寄存器的用法 103

6.4 共享内存 112

6.4.1 使用共享内存排序 113

6.4.2 基数排序 117

6.4.3 合并列表 123

6.4.4 并行合并 128

6.4.5 并行归约 131

6.4.6 混合算法 134

6.4.7 不同gpu上的共享内存 138

6.4.8 共享内存小结 139

6.5 常量内存 140

6.5.1 常量内存高速缓存 140

6.5.2 常量内存广播机制 142

6.5.3 运行时进行常量内存更新 152

6.6 全局内存 157

6.6.1 记分牌 165

6.6.2 全局内存排序 165

6.6.3 样本排序 168

6.7 纹理内存 188

6.7.1 纹理缓存 188

6.7.2 基于硬件的内存获取操作 189

6.7.3 使用纹理的限制 190

6.8 本章小结 190

第7章 cuda实践之道 191

7.1 简介 191

7.2 串行编码与并行编码 191

7.2.1 cpu与gpu的设计目标 191

7.2.2 cpu与gpu上的最佳算法对比 194

7.3 数据集处理 197

7.4 性能分析 206

7.5 一个使用aes的示例 218

7.5.1 算法 219

7.5.2 aes的串行实现 223

7.5.3 初始内核函数 224

7.5.4 内核函数性能 229

7.5.5 传输性能 233

7.5.6 单个执行流版本 234

7.5.7 如何与cpu比较 235

7.5.8 考虑在其他gpu上运行 244

7.5.9 使用多个流 248

7.5.10 aes总结 249

7.6 本章小结 249

第8章 多cpu和多gpu解决方案 252

8.1 简介 252

8.2 局部性 252

8.3 多cpu系统 252

8.4 多gpu系统 253

8.5 多gpu算法 254

8.6 按需选用gpu 255

8.7 单节点系统 258

8.8 流 259

8.9 多节点系统 273

8.10 本章小结 284

第9章 应用程序性能优化 286

9.1 策略1:并行/串行在gpu/cpu上的问题分解 286

9.1.1 分析问题 286

9.1.2 时间 286

9.1.3 问题分解 288

9.1.4 依赖性 289

9.1.5 数据集大小 292

9.1.6 分辨率 293

9.1.7 识别瓶颈 294

9.1.8 cpu和gpu的任务分组 297

9.1.9 本节小结 299

9.2 策略2:内存因素 299

9.2.1 内存带宽 299

9.2.2 限制的来源 300

9.2.3 内存组织 302

9.2.4 内存访问以计算比率 303

9.2.5 循环融合和内核融合 308

9.2.6 共享内存和高速缓存的使用 309

9.2.7 本节小结 311

9.3 策略3:传输 311

9.3.1 锁页内存 311

9.3.2 零复制内存 315

9.3.3 带宽限制 322

9.3.4 gpu计时 327

9.3.5 重叠gpu传输 330

9.3.6 本节小结 334

9.4 策略4:线程使用、计算和分支 335

9.4.1 线程内存模式 335

9.4.2 非活动线程 337

9.4.3 算术运算密度 338

9.4.4 一些常见的编译器优化 342

9.4.5 分支 347

9.4.6 理解底层汇编代码 351

9.4.7 寄存器的使用 355

9.4.8 本节小结 357

9.5 策略5:算法 357

9.5.1 排序 358

9.5.2 归约 363

9.5.3 本节小结 384

9.6 策略6:资源竞争 384

9.6.1 识别瓶颈 384

9.6.2 解析瓶颈 396

9.6.3 本节小结 403

9.7 策略7:自调优应用程序 403

9.7.1 识别硬件 404

9.7.2 设备的利用 405

9.7.3 性能采样 407

9.7.4 本节小结 407

9.8 本章小结 408

第10章 函数库和sdk 410

10.1 简介 410

10.2 函数库 410

10.2.1 函数库通用规范 411

10.2.2 npp 411

10.2.3 thrust 419

10.2.4 curand 434

10.2.5 cublas库 438

10.3 cuda运算sdk 442

10.3.1 设备查询 443

10.3.2 带宽测试 445

10.3.3 simplep2p 446

10.3.4 asyncapi和cudaopenmp 448

10.3.5 对齐类型 455

10.4 基于指令的编程 457

10.5 编写自己的内核 464

10.6 本章小结 466

第11章 规划gpu硬件系统 467

11.1 简介 467

11.2 cpu处理器 469

11.3 gpu设备 470

11.3.1 大容量内存的支持 471

11.3.2 ecc内存的支持 471

11.3.3 tesla计算集群驱动程序 471

11.3.4 更高双精度数学运算 472

11.3.5 大内存总线带宽 472

11.3.6 系统管理中断 472

11.3.7 状态指示灯 472

11.4 pci-e总线 472

11.5 geforce板卡 473

11.6 cpu内存 474

11.7 风冷 475

11.8 液冷 477

11.9 机箱与主板 479

11.10 大容量存储 481

11.10.1 主板上的输入/输出接口 481

11.10.2 专用raid控制器 481

11.10.3 hdsl 483

11.10.4 大容量存储需求 483

11.10.5 联网 483

11.11 电源选择 484

11.12 操作系统 487

11.12.1 windows 487

11.12.2 linux 488

11.13 本章小结 488

第12章 常见问题、原因及解决方案 489

12.1 简介 489

12.2 cuda指令错误 489

12.2.1 cuda错误处理 489

12.2.2 内核启动和边界检查 490

12.2.3 无效的设备操作 491

12.2.4 volatile限定符 492

12.2.5 计算能力依赖函数 494

12.2.6 设备函数、全局函数和主机函数 495

12.2.7 内核中的流 496

12.3 并行编程问题 497

12.3.1 竞争冒险 497

12.3.2 同步 498

12.3.3 原子操作 502

12.4 算法问题 504

12.4.1 对比测试 504

12.4.2 内存泄漏 506

12.4.3 耗时的内核程序 506

12.5 查找并避免错误 507

12.5.1 你的gpu程序有多少错误 507

12.5.2 分而治之 508

12.5.3 断言和防御型编程 509

12.5.4 调试级别和打印 511

12.5.5 版本控制 514

12.6 为未来的gpu进行开发 515

12.6.1 开普勒架构 515

12.6.2 思考 518

12.7 后续学习资源 519

12.7.1 介绍 519

12.7.2 在线课程 519

12.7.3 教学课程 520

12.7.4 书籍 521

12.7.5 英伟达cuda资格认证 521

12.8 本章小结 522

本图书信息来源:互动出版网

《CUDA并行程序设计:GPU编程指南》的更多相关文章

  1. 简单物联网:外网访问内网路由器下树莓派Flask服务器

    最近做一个小东西,大概过程就是想在教室,宿舍控制实验室的一些设备. 已经在树莓上搭了一个轻量的flask服务器,在实验室的路由器下,任何设备都是可以访问的:但是有一些限制条件,比如我想在宿舍控制我种花 ...

  2. 利用ssh反向代理以及autossh实现从外网连接内网服务器

    前言 最近遇到这样一个问题,我在实验室架设了一台服务器,给师弟或者小伙伴练习Linux用,然后平时在实验室这边直接连接是没有问题的,都是内网嘛.但是回到宿舍问题出来了,使用校园网的童鞋还是能连接上,使 ...

  3. 外网访问内网Docker容器

    外网访问内网Docker容器 本地安装了Docker容器,只能在局域网内访问,怎样从外网也能访问本地Docker容器? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Docker容器 ...

  4. 外网访问内网SpringBoot

    外网访问内网SpringBoot 本地安装了SpringBoot,只能在局域网内访问,怎样从外网也能访问本地SpringBoot? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装Java 1 ...

  5. 外网访问内网Elasticsearch WEB

    外网访问内网Elasticsearch WEB 本地安装了Elasticsearch,只能在局域网内访问其WEB,怎样从外网也能访问本地Elasticsearch? 本文将介绍具体的实现步骤. 1. ...

  6. 怎样从外网访问内网Rails

    外网访问内网Rails 本地安装了Rails,只能在局域网内访问,怎样从外网也能访问本地Rails? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Rails 默认安装的Rails端口 ...

  7. 怎样从外网访问内网Memcached数据库

    外网访问内网Memcached数据库 本地安装了Memcached数据库,只能在局域网内访问,怎样从外网也能访问本地Memcached数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装 ...

  8. 怎样从外网访问内网CouchDB数据库

    外网访问内网CouchDB数据库 本地安装了CouchDB数据库,只能在局域网内访问,怎样从外网也能访问本地CouchDB数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Cou ...

  9. 怎样从外网访问内网DB2数据库

    外网访问内网DB2数据库 本地安装了DB2数据库,只能在局域网内访问,怎样从外网也能访问本地DB2数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动DB2数据库 默认安装的DB2 ...

  10. 怎样从外网访问内网OpenLDAP数据库

    外网访问内网OpenLDAP数据库 本地安装了OpenLDAP数据库,只能在局域网内访问,怎样从外网也能访问本地OpenLDAP数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动 ...

随机推荐

  1. 两周撸一个掘金微信小程序

    利益相关 无 声明 这并不是掘金官方小程序(貌似没有搜到掘金 APP 对应的官方小程序),完全为第三者开发者开发,仅用于学习交流,禁止用于其他用途.若要使用官方正版,可访问掘金 官方网站,或下载掘金官 ...

  2. 火狐 firefox proxy moz=proxy:// 407错误 解决办法

    设置代理后,访问任一网站均弹窗要求输入代理的用户名和密码,但是多次输入始终无法认证. 最后才发现原来firefox把代理服务器的认证信息当成网站的认证信息记录了. 解决方法:将已登录信息中的代理相关的 ...

  3. vim编码相关

    与vim编码相关的四个配置: encoding:vim核心编码,所有vim交换区,信息提示区都用这个编码.打开文件的编码如果是其他编码,会自动转换为核心编码,保存时再转回文件编码. fileencod ...

  4. 【WPF】RenderTransform和LayoutTransform

    布局系统 在WPF中,许多绘图任务通过使用变换(transform)可以变得更加简单——变换是通过不加通告地切换形状或元素使用的坐标系统来改变形状或元素绘制方式的对象.在WPF中,变换的一些类大多继承 ...

  5. Am335x SD卡 启动制作

    1.网上下载DiskGenius(分区工具) 2.将4Gsd卡分区3个,boot,rootfs,user 3.boot分区大概在62M左右如图所示 将编译好的MLO.u-boot.img.uEnv.t ...

  6. ARGB 8888 内存大小

    韩梦飞沙  韩亚飞  313134555@qq.com  yue31313  han_meng_fei_sha 4字节  argb 各占8个bit

  7. AtCoder Regular Contest 81

    链接 C.Make a Rectangle 给出一堆木棍的长度 从中选4根,询问在能围成矩形的情况下,矩形的最大面积 开个map统计一下就行 分正方形和矩形分别统计即可 复杂度$O(n \log n) ...

  8. 【最小路径覆盖】BZOJ2150-部落战争

    [题目大意] 给出一张图,'*'表示不能走的障碍.已知每只军队可以按照r*c的方向行军,且军队与军队之间路径不能交叉.问占据全部'.'最少要多少支军队? [思路] 首先注意题意中有说“军队只能往下走” ...

  9. Unity JsonFx 插件使用

    在Unity中使用 JsonFx 插件笔记(提示:以下在 Unity3D v5.4.0 版本 Win 平台下测试成功) 下载 JsonFx 插件注意:JsonFx 插件其实就是一个 dll 文件(如果 ...

  10. Yii单元测试 codeception-Fixture的使用

    Fixture 本文主要是介绍关于Fixture,Specify的使用和遇到的坑 部分是根据源码摸索,有差错的部分望指出 Fixture主要是用来提供测试环境下的数据特定的状态 例如:测试中需要一条待 ...