高性能计算技术丛书基于CUDA的GPU并行程序开发指南
- ISBN:9787111630616
- 装帧:一般胶版纸
- 册数:暂无
- 重量:暂无
- 开本:16开
- 页数:444
- 出版时间:2018-05-01
- 条形码:9787111630616 ; 978-7-111-63061-6
本书特色
作者结合多年CUDA教学和工程实践经验精心撰写。内容丰富详实、通俗易懂,是学习CUDA编程的*佳选择。
内容简介
近10年来,随着大数据、深度学习等相关领域的发展,对计算能力的需求呈几何级数增长。与此同时,大规模集成电路的发展却受到功耗、散热、晶体管尺寸等客观因素的,难以继续维持摩尔定律。因此,人们逐渐把目光转向了并行系统。GPU自诞生之日起就是为计算机的图形图像渲染等大规模并行处理任务而服务的,因而越来越受到研究界和企业界的关注。随着CUDA等计算架构模型的出现,这一趋势更加明显。CUDA(Compute Unified Device Architecture,统一计算设备架构)是Nvidia(英伟达)提出的并行计算架构,它可以结合CPU和GPU的优点,处理大规模的计算密集型任务。同时,它采用了基于C语言风格的语法,又将CPU端和GPU端的开发有效地集成到了同一环境中,对于大多数C程序员来说,使用十分方便,因而一经推出就迅速占领了GPU开发环境的市场。然而,会写CUDA程序与会写好的CUDA程序相差甚远!阻碍CUDA程序获得高性能的原因有很多。首先,GPU属于单指令多数据类型的并行计算,因而任务切分方式很好关键,既要充分挖掘线程级的并行性,也要充分利用流来实现任务级的并行。其次,GPU的存储类型和访问模式比CPU的要丰富得多,一个成功的CUDA程序要能充分利用不同类型的存储。再次,Nvidia GPU的架构还处于高速发展期,新一代GPU所推出的新功能也能够有效地提升计算效率。很后,万丈高楼平地起并不是CUDA开发的很好方式,Nvidia和一些第三方机构都开发了很多基于CUDA的支撑库,利用好这些第三方库可以让你的开发过程事半功倍。Tolga Soyata结合他10多年的CUDA教学经验以及与Nvidia多年合作的经历精心撰写了本书,针对上述问题进行了详细而生动的阐述。本书很独特的地方是它在部分中通过CPU多线程解释并行计算,使没有太多并行计算基础的读者也能毫无阻碍地进入CUDA天地。第二部分重点介绍了基于CUDA的GPU大规模并行程序的开发与实现。与现有的同类书籍相比,本书的特点是在多个Nvidia GPU平台(Fermi、Kepler、Maxwell和Pascal)上并行化,并进行性能分析,帮助读者理解GPU架构对程序性能的影响。第三部分介绍了一些重要的CUDA库,比如cuBLAS、cuFFT、NPP和Thrust(2章);OpenCL编程语言(3章);使用其他编程语言和API库进行GPU编程,包括Python、Metal、Swift、OpenGL、OpenGL ES、OpenCV和微软HLSL(4章);当下流行的深度学习库cuDNN(5章)。本书通过生动的类比、大量的代码和详细的解释向读者循序渐进地介绍了基于CUDA编程开发的GPU并行计算方法,内容丰富翔实,适合所有具备基本的C语言知识的程序员阅读,也适合作为GPU并行计算相关课程的教材。
目录
前言
关于作者
**部分 理解CPU的并行性
第1章 CPU并行编程概述 2
1.1 并行编程的演化 2
1.2 核心越多,并行性越高 3
1.3 核心与线程 4
1.3.1 并行化更多的是线程还是核心 5
1.3.2 核心资源共享的影响 6
1.3.3 内存资源共享的影响 6
1.4 **个串行程序 7
1.4.1 理解数据传输速度 8
1.4.2 imflip.c中的main( )函数 9
1.4.3 垂直翻转行:FlipImageV( ) 10
1.4.4 水平翻转列:FlipImageH( ) 11
1.5 程序的编辑、编译、运行 12
1.5.1 选择编辑器和编译器 12
1.5.2 在Windows 7、8、10平台上开发 12
1.5.3 在Mac平台上开发 14
1.5.4 在Unix平台上开发 14
1.6 Unix速成 15
1.6.1 与目录相关的Unix命令 15
1.6.2 与文件相关的Unix命令 16
1.7 调试程序 19
1.7.1 gdb 19
1.7.2 古典调试方法 20
1.7.3 valgrind 22
1.8 **个串行程序的性能 22
1.8.1 可以估计执行时间吗 23
1.8.2 代码执行时OS在做什么 23
1.8.3 如何并行化 24
1.8.4 关于资源的思考 25
第2章 开发**个CPU并行程序 26
2.1 **个并行程序 26
2.1.1 imflipP.c中的main( )函数 27
2.1.2 运行时间 28
2.1.3 imflipP.c中main( )函数代码的划分 28
2.1.4 线程初始化 30
2.1.5 创建线程 31
2.1.6 线程启动/执行 32
2.1.7 线程终止(合并) 33
2.1.8 线程任务和数据划分 34
2.2 位图文件 35
2.2.1 BMP是一种无损/不压缩的文件格式 35
2.2.2 BMP图像文件格式 36
2.2.3 头文件ImageStuff.h 37
2.2.4 ImageStuff.c中的图像操作函数 38
2.3 执行线程任务 40
2.3.1 启动线程 41
2.3.2 多线程垂直翻转函数MTFlipV( ) 43
2.3.3 FlipImageV( )和MTFlipV( )的比较 46
2.3.4 多线程水平翻转函数MTFlipH(?) 47
2.4 多线程代码的测试/计时 49
第3章 改进**个CPU并行程序 51
3.1 程序员对性能的影响 51
3.2 CPU对性能的影响 52
3.2.1 按序核心与乱序核心 53
3.2.2 瘦线程与胖线程 55
3.3 imf?lipP的性能 55
3.4 操作系统对性能的影响 56
3.4.1 创建线程 57
3.4.2 线程启动和执行 57
3.4.3 线程状态 58
3.4.4 将软件线程映射到硬件线程 59
3.4.5 程序性能与启动的线程 60
3.5 改进imf?lipP 61
3.5.1 分析MTFlipH( )中的内存访问模式 62
3.5.2 MTFlipH( )的多线程内存访问 63
3.5.3 DRAM访问的规则 64
3.6 imf?lipPM:遵循DRAM的规则 65
3.6.1 imflipP的混乱内存访问模式 65
3.6.2 改进imflipP的内存访问模式 65
3.6.3 MTFlipHM( ):内存友好的MTFlipH( ) 66
3.6.4 MTFlipVM( ):内存友好的MTFlipV( ) 69
3.7 imflipPM.C的性能 69
3.7.1 imflipP.c和imflipPM.c的性能比较 70
3.7.2 速度提升:MTFlipV( )与MTFlipVM( ) 71
3.7.3 速度提升:MTFlipH( )与MTFlipHM( ) 71
3.7.4 理解加速:MTFlipH( )与MTFlipHM( ) 71
3.8 进程内存映像 72
3.9 英特尔MIC架构:Xeon Phi 74
3.10 GPU是怎样的 75
3.11 本章小结 76
第4章 理解核心和内存 77
4.1 曾经的英特尔 77
4.2 CPU和内存制造商 78
4.3 动态存储器与静态存储器 79
4.3.1 静态随机存取存储器(SRAM) 79
4.3.2 动态随机存取存储器(DRAM) 79
4.3.3 DRAM接口标准 79
4.3.4 DRAM对程序性能的影响 80
4.3.5 SRAM对程序性能的影响 81
4.4 图像旋转程序:imrotate.c 81
4.4.1 imrotate.c的说明 82
4.4.2 imrotate.c:参数限制和简化 82
4.4.3 imrotate.c:实现原理 83
4.5 imrotate的性能 87
4.5.1 线程效率的定性分析 87
4.5.2 定量分析:定义线程效率 87
4.6 计算机的体系结构 89
4.6.1 核心、L1$和L2$ 89
4.6.2 核心内部资源 90
4.6.3 共享L3高速缓存(L3 $) 91
4.6.4 内存控制器 92
4.6.5 主存 92
4.6.6 队列、非核心和I/O 93
4.7 imrotateMC:让imrotate更高效 94
4.7.1 Rotate2( ):平方根和浮点除法有多差 96
4.7.2 Rotate3( )和Rotate4( ):sin( )和cos( )有多差 97
4.7.3 Rotate5( ):整数除法/乘法有多差 98
4.7.4 Rotate6( ):合并计算 100
4.7.5 Rotate7( ):合并更多计算 100
4.7.6 imrotateMC的总体性能 101
4.8 本章小结 103
第5章 线程管理和同步 104
5.1 边缘检测程序:imedge.c 104
5.1.1 imedge.c的说明 105
5.1.2 imedge.c:参数限制和简化 106
5.1.3 imedge.c:实现原理 106
5.2 imedge.c:实现 108
5.2.1 初始化和时间戳 109
5.2.2 不同图像表示的初始化函数 110
5.2.3 启动和终止线程 111
5.2.4 高斯滤波 112
5.2.5 Sobel 113
5.2.6 阈值过滤 114
5.3 imedge的性能 115
5.4 imedgeMC:让imedge更高效 116
5.4.1 利用预计算降低带宽 116
5.4.2 存储预计算的像素值 117
5.4.3 预计算像素值 118
5.4.4 读取图像并预计算像素值 119
5.4.5 PrGaussianFilter 1
作者简介
Tolga Soyata于1988年在伊斯坦布尔技术大学电子与通信工程系获得学士学位,1992年在美国马里兰州巴尔的摩的约翰·霍普金斯大学电气与计算机工程系(ECE)获得硕士学位,2000年在罗切斯特大学电气与计算机工程系获得博士学位。2000年至2015年间,他成立了一家IT外包和复印机销售/服务公司。在运营公司的同时,他重返学术界,在罗切斯特大学电气与计算机工程系担任研究员。之后,他成为助理教授,并一直担任电气与计算机工程系教职研究人员至2016年。在罗切斯特大学电气与计算机工程系任职期间,他指导了三名博士研究生。其中两人在他的指导下获得博士学位,另一位在他2016年加入纽约州立大学奥尔巴尼分校担任电气与计算机工程系副教授时留在了罗切斯特大学。Soyata的教学课程包括大规模集成电路、模拟电路以及使用FPGA和GPU进行并行编程。他的研究兴趣包括信息物理系统、数字健康和高性能医疗移动云计算系统等。
Tolga Soyata从2009年开始从事GPU编程的教学,当时他联系Nvidia将罗切斯特大学认证为CUDA教学中心(CTC)。在Nvidia将罗切斯特大学认证为教学中心后,他成为主要负责人。之后,Nvidia还将罗切斯特大学认证为CUDA研究中心(CRC),他也成为项目负责人。Tolga Soyata在罗切斯特大学担任这些计划的负责人直到他于2016年加入纽约州立大学奥尔巴尼分校。这些计划后来被Nvidia命名为GPU教育中心和GPU研究中心。在罗切斯特大学期间,他讲授了5年GPU编程和高级GPU项目开发课程,这些课程同时被列入电气与计算机工程系以及计算机科学与技术系的课程体系。自2016年加入纽约州立大学奥尔巴尼分校以来,他一直在讲授类似的课程。本书是他在两所大学讲授GPU课程的经验结晶。
-
有限与无限的游戏:一个哲学家眼中的竞技世界
¥37.4¥68.0 -
硅谷之火-人与计算机的未来
¥14.3¥39.8 -
全图解零基础word excel ppt 应用教程
¥12.0¥48.0 -
机器学习
¥59.4¥108.0 -
深度学习的数学
¥43.5¥69.0 -
智能硬件项目教程:基于ARDUINO(第2版)
¥31.9¥65.0 -
元启发式算法与背包问题研究
¥38.2¥49.0 -
AI虚拟数字人:商业模式+形象创建+视频直播+案例应用
¥62.9¥89.8 -
UNIX环境高级编程(第3版)
¥164.9¥229.0 -
剪映AI
¥52.8¥88.0 -
深度学习高手笔记 卷2:经典应用
¥90.9¥129.8 -
纹样之美:中国传统经典纹样速查手册
¥77.4¥109.0 -
UG NX 12.0数控编程
¥24.8¥45.0 -
MATLAB计算机视觉与深度学习实战(第2版)
¥90.9¥128.0 -
界面交互设计理论研究
¥30.8¥56.0 -
UN NX 12.0多轴数控编程案例教程
¥25.8¥38.0 -
微机组装与系统维护技术教程(第二版)
¥37.8¥43.0 -
Go 语言运维开发 : Kubernetes 项目实战
¥48.2¥79.0 -
明解C语言:实践篇
¥62.9¥89.8 -
Linux服务器架设实战(Linux典藏大系)
¥84.5¥119.0