热门关键字:  听力密码  听力密码  新概念美语  单词密码  巧用听写练听力

GPU高性能运算之CUDA

中国水利水电出版社
    【作 者】主编 张舒 褚艳利 【I S B N 】978-7-5084-6543-2 【责任编辑】宋俊娥 【适用读者群】科技 【出版时间】2009-10-01 【开 本】16开 【装帧信息】平装(光膜) 【版 次】第1版第1次印刷 【页 数】 【千字数】438 【印 张】17.75 【定 价】38 【丛 书】暂无分类 【备注信息】
图书详情

    本书是全国第一本全面介绍CUDA软硬件体系架构的书籍。全面介绍使用CUDA进行通用计算所需要的语法、硬件架构、程序优化技巧等知识,是进行GPU通用计算程序开发的入门教材和参考书。

    本书共分5章。第1章介绍GPU通用计算的发展历程,介绍并行计算的历史、现状以及面临的问题;第2章介绍CUDA的使用方法,帮助读者理解CUDA的编程模型、存储器模型和执行模型,掌握CUDA程序的编写方法;第3章探讨CUDA硬件架构,深入分析Tesla GPU架构与CUDA通用计算的相互作用;第4章总结CUDA的高级优化方法,对任务划分、存储器访问、指令流效率等课题进行探讨;第5章以丰富的实例展示如何使用CUDA的强大性能解决实际问题。

    本书可作为CUDA的学习入门和编程参考书,主要面向从事高性能计算的程序员与工程师,使用GPU加速专业领域计算的科研人员,以及对GPU通用计算感兴趣的程序员。开设相关课程的高等院校与科研机构也可选用本书作为教材。

    1.精选典型实用例程,详解CUDA使用细节

    2.重视理论结合实际,介绍并行程序设计方法

    3.深入分析硬件架构,揭示模型与底层映射关系

    4.精心总结优化经验,解析高性能编程技巧

    5.技术支持:论坛http://bbs.hpctech.com

    CUDA是NVIDIA公司于2007年推出的GPU通用计算产品。CUDA能够有效利用GPU强劲的处理能力和巨大的存储器带宽进行图形渲染以外的计算,广泛应用于图像处理、视频播放、信号处理、人工智能、模式识别、金融分析、数值计算、石油勘探、天文计算、流体力学计算、生物计算、分子动力学计算、数据库管理、编码加密等领域,并在这些应用中对CPU获得了一到两个数量级的加速,取得了令人瞩目的成绩。CUDA在产业界和学术界引发了巨大反响,目前已有Adobe、Autodesk、HP、联想、浪潮等国内外著名企业推出了基于CUDA的产品;哈佛、伯克利、清华等大批国内外高校也开设了相关课程,将CUDA作为一种典型的并行系统来帮助学生学习高性能计算的原理与应用。

    多核的CPU和众核的GPU已经成为目前大多数计算机中最重要的两种处理器。传统上,GPU只用于处理3D图像渲染任务,而其他大多数的任务都交给了CPU。作为一种通用处理器,CPU的设计必须兼顾各种任务的需要。因此,CPU中大多数的晶体管都被用于制造庞大的缓存和复杂的控制逻辑,而运算单元占用的面积则并不多。近几年来,CPU生产厂商已经认识到依靠增加单个核心的缓存尺寸和控制逻辑的复杂程度对提高处理器性能已经没有太大帮助,因此纷纷在一块芯片中集成更多的CPU核心。不过,这样做只是能够用更多的晶体管制造一个处理器,并没有提高晶体管的利用率。与此同时,由于图形渲染的并行特性,GPU与生俱来就是一种拥有大量运算单元的并行处理器。近几年来的发展经验表明,一块高端GPU的单精度浮点处理性能可以达到一块同时期高端桌面CPU的10倍,其显存带宽也达同时期桌面平台的5倍左右。并且,由GPU提供相同的计算能力,所需要的成本和功耗都要小于基于CPU的系统。

    由于传统GPU硬件架构的限制,很难有效利用其资源进行通用计算。NVIDIA推出的CUDA产品则完全扭转了这一局面。与传统GPU通用计算开发方式相比,CUDA编程更简单,功能更强大,应用领域更广泛,支持CUDA的硬件性能也更强。CUDA完全改变了PC中的一些游戏规则,使用GPU计算无需投入额外的成本,却可以在一些应用中获得一个数量级的加速。在科学计算中,一些过去必须由集群处理的任务,现在也可以由每个研究人员的桌面PC完成了,这使得科研人员能够更加自由地将时间投入到自己的研究中。在超级计算机与集群中,过去往往拆除“多余的”显卡以节省功耗,现在的设计却开始采用大量GPU来获得更加绿色的计算能力。CUDA的强大性能引发了一场通用计算革命,这场革命将极大地改变计算机的面貌。

    我们很幸运地参与了这场GPU通用计算革命。在2007~2009年间,我们看到国内有越来越多的开发者尝试将CUDA应用到自己感兴趣的领域中,在学术和产业领域都取得了令人欣喜的成绩。与此同时,我们也注意到很多程序员在由CPU程序开发转移到CUDA程序开发的过程中遇到了一些问题。特别是由于CUDA程序的性能往往和并行算法以及硬件架构有很大关系,初次接触GPU的程序员往往需要较长的时间才能完全掌握CUDA程序的编写与优化。因此,我们结合自己的学习经验,结合例子对CUDA语法进行讲解,将CUDA编程需要的各种知识进行归纳而编写了本书。本书既可以作为科研人员与程序开发人者学习CUDA的入门指导和编程优化的参考手册,也可以作为高校相关课程的教材。

    本书的编写过程耗时一年,在这一年中我们也和国内的其他CUDA程序员共同成长,一起经历了CUDA从稚嫩走向成熟,渐渐发展壮大的过程。国内最开始只有一些高校中的教师学生在进行一些学术研究,渐渐地有更多的公司和研究机构以及编程爱好者加入了这一行列,讨论的问题也从基本的语法和使用渐渐深入到对算法、硬件架构和优化技巧的分析。在这一过程中,我们和国内的很多开发者和机构进行合作,并建立了友谊。在此,我们要特别感谢许磊给我们的指导和建议,讨论群中的刘伟峰、刘国峰、陈实富、杨常青等活跃的开发人员也提出了很多宝贵建议和意见;我们要感谢NVIDIA公司亚太区技术经理的邓培智先生,中国区市场总监魏鸣女士,销售经理谢强先生,以及NVIDIA深圳有限公司的Terence horng,Jerry Zhou,Johnny Qiu,Blues Yu,Jerry Jia,Donovan Chen,Sandy Zou等同事的支持;电子科技大学的窦衡副教授、杨万麟教授、沈晓峰副教授、况凌博士以及电子工程学院1201教研室的各位同学,西安电子科技大学的刘西洋教授、王黎明老师、高海昌老师以及香港浸会大学的褚晓文教授在本书的几位作者攻读学位期间给予的指导和支持;浪潮集团,联想集团,厦门美亚柏科资讯科技有限公司,广州明夏阳人工智能有限公司,以及中科院的张楠、王龙、张先轶等对几位作者在项目上给予了大力支持;感谢CSDN的路宏为我们出版本书四处奔走;感谢中国水利水电出版社的各位为了本书能够更早出版付出的巨大努力;最后,还要把最诚挚的感谢留给几位作者的家人。

    GPU和CUDA都还在不断发展中,本书也很难对GPU高性能计算涉及到的所有知识面面俱到,书中难免存在一些错误和不足之处,恳请诸位读者能够及时指出,给出宝贵的意见和建议。

    张 舒

    2009年8月于深圳

    前言

    第1章 GPU通用计算 1
    1.1 多核计算的发展 2
    1.1.1 CPU多核并行 3
    1.1.2 超级计算机、集群与分布式计算 4
    1.1.3 CPU+GPU异构并行 5
    1.2 GPU发展简介 8
    1.2.1 GPU渲染流水线 8
    1.2.2 着色器模型 10
    1.2.3 NVIDIA GPU发展简介 11
    1.3 从GPGPU到CUDA 12
    1.3.1 传统GPGPU开发 12
    1.3.2 CUDA开发 13
    第2章 CUDA基础 14
    2.1 CUDA编程模型 14
    2.1.1 主机与设备 14
    2.1.2 Kernel函数的定义与调用 15
    2.1.3 线程结构 16
    2.1.4 硬件映射 20
    2.1.5 deviceQuery示例 22
    2.1.6 matrixAssign示例 26
    2.2 CUDA软件体系 36
    2.2.1 CUDA C语言 37
    2.2.2 nvcc编译器 37
    2.2.3 运行时API与驱动API 39
    2.2.4 CUDA函数库 43
    2.3 CUDA存储器模型 44
    2.3.1 寄存器 45
    2.3.2 局部存储器 45
    2.3.3 共享存储器 46
    2.3.4 全局存储器 47
    2.3.5 主机端内存 52
    2.3.6 主机端页锁定内存 52
    2.3.7 常数存储器 57
    2.3.8 纹理存储器 58
    2.4 CUDA通信机制 68
    2.4.1 同步函数 68
    2.4.2 Volatile关键字 72
    2.4.3 ATOM操作 72
    2.4.4 VOTE操作 76
    2.5 异步并行执行 76
    2.5.1 流 79
    2.5.2 事件 81
    2.6 CUDA与图形学API互操作 87
    2.6.1 CUDA与OpenGL的互操作 87
    2.6.2 CUDA与Direct3D互操作 91
    2.7 多设备与设备集群 102
    2.7.1 CUDA设备控制 102
    2.7.2 CUDA与openMP 114
    2.7.3 CUDA与集群 117
    第3章 CUDA硬件架构 120
    3.1 NVIDIA显卡构造简介 120
    3.1.1 图形显卡概览 120
    3.1.2 PCI-E总线 121
    3.1.3 显存 122
    3.1.4 GPU芯片 123
    3.2 Tesla图形与计算架构 124
    3.2.1 SPA-TPC-SM 126
    3.2.2 主流GPU架构 129
    3.3 Tesla通用计算模型 131
    3.3.1 数据与指令的加载 131
    3.3.2 warp指令的发射与执行 133
    3.3.3 纹理、渲染和存储器流水线 137
    第4章 CUDA程序的优化 141
    4.1 CUDA程序优化概述 141
    4.2 测量程序运行时间 144
    4.2.1 设备端测时 144
    4.2.2 主机端测时 148
    4.3 任务划分 148
    4.3.1 任务划分原则 148
    4.3.2 grid和block维度设计 150
    4.4 存储器访问优化 152
    4.4.1 主机-设备通信优化 152
    4.4.2 全局存储器访问优化 155
    4.4.3 共享存储器访问优化 160
    4.4.4 使用纹理存储器和常数存储器加速 163
    4.5 指令流优化 163
    4.5.1 算术指令 164
    4.5.2 控制流指令 166
    4.5.3 访存指令 166
    4.5.4 同步指令 167
    4.6 CUDA profiler的使用 167
    4.6.1 图形分析 167
    4.6.2 图表分析 167
    4.7 优化应用举例 169
    4.7.1 矩阵乘法的优化 169
    4.7.2 并行归约的优化 176
    4.7.3 矩阵转置的优化 184
    第5章 综合应用 190
    5.1 基本应用 190
    5.1.1 双调排序网络 190
    5.1.2 Scan 197
    5.1.3 CUBLAS简单应用 206
    5.1.4 CUFFT简单应用 211
    5.2 高级应用 217
    5.2.1 共轭梯度法的CUBLAS实现 217
    5.2.2 AC多模式匹配算法的CUDA实现 227
    附录A 安装、配置、编译及调试 237
    附录B 常见问题与解答 247
    附录C 技术规范 249
    附录D C扩展 253
    附录E 数学函数 263
    附录F 纹理拾取 272
    附录G 着色器模型 275
最新评论共有 0 位网友发表了评论
发表评论
评论内容:不能超过250字,需审核,请自觉遵守互联网相关政策法规。
用户名: 密码:
匿名?
注册