首页>参考读物>计算机科学与技术>综合

高性能CUDA应用设计与开发:方法与最佳实践
作者 : (美)Rob Farber 著
译者 : 于玉龙 唐堃 译 郭禾 王宇新 审校
出版日期 : 2012-12-17
ISBN : 978-7-111-40446-0
定价 : 59.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 288
开本 : 16
原书名 : CUDA Application Design and Development
原出版社: Elsevier
属性分类: 店面
包含CD :
绝版 : 未绝版
图书简介

全书共分12章。第1~2章介绍了CUDA的基本概念、构建、调试CUDA应用所需要的工具,以及完整的机器学习与优化的通用框架。第3章介绍了高新能编程的性能分析技术——CUDA性能分析工具,以及两种数据挖掘技术。第4章主要介绍了CUDA执行模型。第5~6章讨论了CUDA提供的多种GPU内存优缺点,以及如何使应用高效利用内存的技术。第7章通过示例和对应的性能分析输出结果介绍了多GPU、异步核函数执行以及统一虚拟地址空间等GPU并行方式的应用。第8章讨论了多种CUDA后端设备,并给出可有效在异构多GPU环境中运行的示例以及响应的性能分析输出结果。第9章讨论CUDA如何显著地加速可视化与游戏应用。第10章介绍如何使用MPI提升应用的可伸缩性以及性能。第11章介绍了应用于不同技术的CUDA开源代码项目,其中包括支持向量机、多维尺度分析等。第12章介绍了基于第9章的框架,给出的一个用于视频识别的实时视频流处理示例。

图书特色

本书是所有希望系统学习和使用CUDA编写用于科学计算或可视化程序等并行应用的程序员的必读书之一。本书通俗易懂,并且提供了便于读者动手实践的详细操作案例。
—— Jack Dongrra 田纳西大学计算机科学分布式处理器研究院

CUDA是一种颠覆性的技术,它和大规模并行GPGPU设备正在引领传统计算的变革,使用GPU设备和CUDA工具套件可以轻松编写出能同时处理数以万计操作的大规模并行程序,相比于传统的程序,程序的运行速率得到了极大提升。无论你从事何种领域的软件开发,如商业应用、科学计算、云计算、计算机可视化、游戏、机器人等,本书都将带你领略CUDA的强大魅力,并掌握利用CUDA开发和设计并行应用的思想、方法。
本书以CUDA的重要概念和编程思想开篇,不仅系统讲解了CUDA应用的创建、分析、调试和性能优化方法,而且详细介绍了如何在现有程序代码中使用CUDA技术,包括在不同的编译器、编程语言、软件工具以及不同行业标准的各种API支持库中使用。此外,本书详细解释了重要算法的实现方法,如量子化学、机器学习和计算机视觉等,以及如何改写这些算法以便从GPU体系结构中最大化收益。本书还包括大量经典案例,作者将带你一步步地完成从了解基础知识到动手编写代码的全部过程,实现编程语言理论与代码编写实践相结合。

作者简介










资深高性能编程专家,Irish高端计算中心和美国国家实验室等权威机构的高性能编程技术顾问,同时为多家《财富》世界500强企业提供咨询服务,经验十分丰富,在该领域颇具权威和影响力。他还是一位技术作家,任职于Santa Fe学院,在《Dr. Dobb’s Journal》《Scientific Computing》等媒体上发表了多篇关于高性能编程的经典技术文章,深受读者喜爱。此外,他还是《财富》美国100强中两家公司的合伙创始人。

图书前言

在技术领域以及学术、职业生涯中,把握时机是极其重要的。我们这一代程序员非常幸运,能够率先利用这种经济实惠而且普及的大规模并行计算设备。GPGPU(通用图形处理单元)技术正在世界范围内影响着计算领域的各个方面——小到手机,大到超级计算机。它还在改变着商业应用、科学计算、云计算、计算机可视化系统、游戏和机器人等领域,甚至重新定义了我们所熟知的计算机编程方式。Teraflop(每秒万亿次浮点计算)如今能以一种经济可行的方式惠及全世界大多数人。无论是青少年、学生、家长、教师、专业人士,还是小型科研机构、大型公司都能负担得起GPGPU设备,又能获得免费的软件开发工具(SDK)。NVIDIA公司估计已生产并销售了超过3亿个可编程GPGPU设备。
  这3亿个用于CUDA(Compute Unified Device Architecture,统一计算设备架构)开发的GPGPU设备,在商业应用领域中展现出极大的市场潜力,并且拓展了科学计算的可行范围。最重要的是,CUDA以及大规模并行GPGPU设备正在改变我们对计算的认知。CUDA程序不再是某个时刻只进行一个或少量的操作,而是同时进行数以万计的操作!
  本书将介绍CUDA编程思想以及如何利用数以万计的线程使得应用(无论是商业还是学术、科研方面)的执行性能获得指数级的提升。进而,本书将介绍单一应用如何在单机或集群环境中使用单个或多个GPGPU。此外,本书还将介绍如何利用CUDA来开发针对多核处理器平台的应用,使CUDA可以用于所有的应用开发场景,甚至是没有GPU的环境中!
  本书不仅仅关注程序语法和API函数,还将涉及CUDA的设计理念,并在体系结构方面探讨GPGPU硬件带来惊人性能的原因。本书也将涉及CUDA开发中的准则和注意事项,以利于编写简洁、易读并具有可维护性的代码。本书主要以最新的CUDA 4.x为准。
  使用与修改代码是学习过程中的必要环节,因此,本书提供了可供编译和修改的示例代码。这些示例展示了如何在Fermi架构的GPGPU设备(NVIDIA 20系列)中编写具有高性能的代码,旨在让读者学会编写高效的代码而不是仅仅让代码能够运行。书中的示例可以在任何支持CUDA的GPGPU上编译运行,因此使用旧版GPGPU的读者也可以从本书中获益。本书在适当的位置引用了我所撰写的全面CUDA教程之“Doctor Dobb’s Journal”(Dobb博士的日志)专栏中的文字,来说明CUDA各版本之间的改进以及如何在各代GPGPU架构中获得高计算性能。
  相关教学资料、附加示例以及读者评论在http://gpucomputing.net的wiki中可以找到,可以从以下任何一个网址中访问:
 作者的名字:http://gpucomputing.net/RobFarber
 本书名(连成一个单词):http://gpucomputing.net/CUDAapplicationdesignanddevelopment
 作者的专栏名:http://gpucomputing.net/supercomputingforthemasses
  购买本书的读者还可以下载书中示例的源代码:http://booksite.mkp.com/9780123884268。
  本书内容安排如下:
  第1章介绍了CUDA的基本概念以及构建、调试CUDA应用所需要的工具。针对Thrust C++和C Runtime API,该章提供了一些简单的示例。此外,还介绍了三个有效提高程序性能的GPU编程准则。
  第2章利用第1章所介绍的技术,提供了完整的机器学习以及相对于常规单核处理器加速了341倍的优化通用框架。同时,为了满足对领域知识和GPU程序开发能力有双重需求的读者,该章还介绍了机器学习与数值优化的核心概念。
  第3章主要关注性能分析技术(profiling),它是高性能编程的一个重要技术。该章介绍了CUDA性能分析工具,并应用于第2章的案例中。而且将揭示一些Thrust API的惊人瓶颈。该章还讨论了数据挖掘技术以及主成分分析(PCA)和非线性主成分分析(NPCA)两种数据挖掘方法。无论是用户还是编程者,该章都是值得阅读的。
  第4章主要介绍CUDA执行模型。该章的内容是任何希望获得GPU最高性能的人所必须了解的。为了帮助读者理解GPU的工作方式,该章还提供了示例以及性能分析的输出结果;这些资料有助于读者掌握如何使用现有工具来观察程序运行的内部细节。
  第5章介绍并讨论了CUDA提供的多种GPU内存以及各种内存的优缺点。
  第6章。鉴于最快与最慢的GPU内存之间有超过3个数量级的性能差距,因此合理利用GPU内存是获得高性能的唯一可行途径。该章将讨论使应用高效利用内存的技术,并通过观察性能分析输出结果理解这些技术。该章还给出了一个通用功能的示例,指导编写类似于关键API的基础通用函数。
  第7章。GPU提供了多种并行方式,包括多GPU、异步核函数执行以及统一虚拟地址空间(Unified Virtual Address,UVA)。该章通过示例和对应的性能分析输出结果来介绍这些GPU并行方式的应用。
  第8章。历经发展,CUDA已适用于包括GPU和多核处理器在内的所有应用开发平台。该章将讨论多种CUDA后端设备,并给出可有效在异构多GPU环境中运行的示例以及响应的性能分析输出结果。该章还设计了CUDA支持库,以及如何在其他高级语言(如Python、Java、R和FORTRAN等)中应用CUDA与GPU计算接口。
  第9章。在关注利用CUDA加速计算任务的同时,往往容易忽略GPU技术也是优秀的可视化平台。该章回归GPU的设计初衷,讨论CUDA如何显著地加速可视化与游戏应用。该章将给出一个完整的示例,使读者可以创建一个3D世界并在其中遨游。性能分析输出结果揭示了CUDA能够有效加速可视化应用的原因。该章的框架还可扩展并用到第12章的实时视频流的处理例子中。
  第10章介绍使用MPI(Message Passing Interface,通信传递接口)扩展第3章的示例来介绍可伸缩性以及性能。示例代码的另一版本证明了,在扩展至500个GPGPU(单体最高具有每秒五十万亿次单精度浮点计算的能力)的过程中其性能近似于线性增长,最终获得了每秒超过三百万亿次浮点计算能力,相当于60000个x86处理器核。
  第11章。在CUDA技术浪潮中,还没有能覆盖所有方面的书籍。该章是一个综述章节,介绍了应用于不同技术的CUDA开源代码的项目,其中包括支持向量机(Support Vector Machine,SVM)、多维尺度分析(MDS)、交互信息、力导引图、分子模型等。对于这些项目的了解以及第8章讨论的其他高级语言接口,将有助于你成为一名成熟的CUDA开发者。
  第12章。基于第9章的框架,该章给出了一个用于视频识别的实时视频流处理示例。仅需要一个廉价的摄像头或一个视频文件,你就可以完成实时的视频识别任务。本示例为学习CUDA而设计,因此很容易修改。经过扩展,本示例与技术可用于机器人、增强现实游戏,以及综合状态视窗(HUD)的数据融合,该章对此也进行了探讨。
  学习CUDA(以及GPGPU)编程思想与开发技术是非常有趣的。然而,性能是使用GPGPU技术的终极目的,正如我的一位大学教授经常说的:“要知道布丁的滋味就要去品尝一下。”图1是2011年7月12日NVIDIA CUDA Showcase上报道的获得性能加速比前100名的应用。这些报告都来自于经权威评议的学术论文和商业实体,可以看出,对于许多不同种类的应用,相比于多核处理器,GPGPU技术都能够获得2个数量级(100倍)或以上的加速。展示的这些应用值得我们花时间进行探究,而且其中大部分都可以免费下载源代码或支持库。
  GPGPU是一种颠覆性的技术,它改变了人们对计算过程的认识。正如NVIDIA所说,“从超智能手机到超级计算机”。该技术的到来正赶上这样一场机遇风暴,传统的多核处理器已经无法再通过增加时钟频率来实现有效的加速。传统处理器生产商唯一能吸引消费者升级计算机的方式,就是通过双核或四核的并行来获得2~4倍的加速。多核并行是具有颠覆性的,要求现有软件必须重写以实现对多核心的有效利用。在计算机与科研领域转向并行硬件探究之时,加入到这前沿软件应用研发中来吧!学习CUDA,把握这一难得的机遇。

图1 NVIDIA展示的性能加速比前100名应用

致谢
  仅以此书献给我的妻子Margy和我的儿子Ryan,虽然他们没有直接帮助我写作,却在我创作本书的过程中一直深深地支持着我。尤其是我的儿子Ryan的成长,证明了长江后浪推前浪,感谢上帝让我陪他度过童年时光。
  献给许多审阅过此书的朋友们,尤其是那些指出本书错误的朋友,对于他们付出的时间与帮助,我感激不尽。特别感谢爱尔兰高端计算中心的每个人,他们从我开始创作到完成本书手稿期间一直给予我支持。最后,感谢NVIDIA公司的朋友与同事,是他们将所有CUDA革命性的梦想变成了现实。

上架指导

计算机\程序设计

封底文字

本书是所有希望系统学习和使用CUDA编写用于科学计算或可视化程序等并行应用的程序员的必读书之一。本书写作风格通俗易懂,并且提供了便于读者动手实践的详细操作案例。
——Jack Dongrra 田纳西大学计算机科学分布式处理器研究院

CUDA是一种颠覆性的技术,它和大规模并行GPGPU设备正在引领传统计算的变革,使用GPU设备和CUDA工具套件可以轻松编写出能同时处理数以万计操作的大规模并行程序,相比于传统的程序,程序的运行速率得到了极大提升。无论你从事何种领域的软件开发,如商业应用、科学计算、云计算、计算机可视化、游戏、机器人等,本书都将带你领略CUDA的强大魅力,并掌握利用CUDA开发和设计并行应用的思想、方法。
本书以CUDA的重要概念和编程思想开篇,不仅系统讲解了CUDA应用的创建、分析、调试和性能优化方法,而且详细介绍了如何在现有程序代码中使用CUDA技术,包括在不同的编译器、编程语言、软件工具以及不同行业标准的各种API支持库中使用。此外,本书详细解释了重要算法的实现方法,如量子化学、机器学习和计算机视觉等,以及如何改写这些算法以便从GPU体系结构中使得收益最大化。本书还包括大量经典案例,作者将带你一步步地完成从了解基础知识到动手编写代码的全部过程,实现编程语言理论与代码编写实践相结合。

图书序言

作为一种革新性的技术,GPU近年来在科学计算领域备受关注。这项技术已有大量的科学应用,并在性能与能效方面取得了显著提升。这些应用大多由那些致力于使用GPU的先驱者开发和使用。最近,这项技术面临一个关键问题:它能否普遍适用于科学计算领域中各种各样的算法,以及能否为更广泛的人群而不仅是那些先驱者使用。软件开发是阻碍这项技术得以广泛应用的关键,其中包括大规模并行CUDA代码的编写与优化、新的性能与正确性分析工具的使用、CUDA支持库的使用以及对GPU硬件架构的理解。
  通过书籍、教程等方式,专家们可以将他们在此领域掌握的知识和方法与其他使用者分享,这在一定程度上解决了CUDA广泛应用的难题。本书就是这样的一本书。在这本书中,作者详尽地解释了重要算法的实现方法,如量子化学、机器学习以及计算机视觉等。本书不仅讲述了GPU编程的基本方法,还介绍了如何改写算法以便从GPU架构中最大化获益。此外,这本书提供了许多案例研究用以解释与充实GPU的重要概念,如CUDA线程、GPU存储层次结构以及多GPU的扩展性(书中使用一个MPI示例例证了其扩展性可以近似线性地增至使用500个GPU)。
  最后,任何一种编程语言都不能独立存在。可以说,任何一个成功的编程语言,都伴随由强大的编译器、性能与正确性分析工具以及优化的支持库组成的整套系统环境。这些软件开发中的实用工具是快速开发应用程序的关键。本书的诸章节描述了如何使用CUDA编译器、调试器、性能分析工具、库以及与其他语言的互操作,本书在这些方面没有令人失望。
  我享受从这本书中学到的一切,我确信您也会。

Jeffrey S.Vetter
美国橡树岭国家实验室杰出研究员
佐治亚理工学院教授

作者简介

(美)Rob Farber 著:加作者照片 Rob Farber 资深高性能编程专家,是Irish高端计算中心和美国国家实验室等权威机构的高性能编程技术顾问,同时为多家《财富》世界500强企业提供咨询服务,经验十分丰富,在该领域颇具权威和影响力。他还是一位技术作家,任职于Santa Fe学院,在《Dr. Dobb’s Journal》、《Scientific Computing》等媒体上发表了多篇关于高性能编程的经典技术文章,深受读者喜爱。此外,他还是《财富》排名前100名的两家公司的合伙创始人。

译者简介

于玉龙 唐堃 译 郭禾 王宇新 审校:暂无简介

译者序

目前,并行计算是提高算法性能的主要方式,无论是大规模集群系统还是个人电脑,甚至是智能手机,都将性能的提升寄托于并行计算。GPU芯片曾主要用于计算机可视化和图形图像处理,其内部具有大量的并行计算单元,有着天然的并行优势。近年来,NVIDIA和AMD等厂商相继推出以GPU为协处理器的通用并行计算解决方案,CUDA是其中的典型代表。
  CUDA是NVIDIA推出的一种利用GPU进行通用并行计算的整套解决方案,包括硬件支持、程序语言扩展、编译器、调试器等整套开发工具链,它对矩阵数值计算、图像视频处理、机器学习、计算机可视化等问题都有良好的加速效果。CUDA提供的CUDA C编程语言扩展,利用Kernel函数等机制,将大规模并行计算逻辑通过一种简单、有效且合理的方式进行表达,成为充分利用并行硬件实现程序性能加速的关键。同时,NVIDIA还提供了充分的配套开发工具链,如nvcc编译器、cuda-gdb调试器、gprof和computeprof性能分析工具、Parallel Nsight性能跟踪工具等。此外,CUDA还包含了一些常用的支持库,如用于基础开发的Driver、Runtime、Thrust API;用于线性代数数值计算的CUBLAS;用于图像处理的NPP等。CUDA甚至可以用于开发不使用GPU加速的应用程序。
  本书是一本介绍CUDA程序设计的优秀图书。对于那些具有一定程序开发实践基础,并渴望学习并行计算、GPU程序设计的读者来说,本书是快速入门CUDA并学会编写高效GPU并行计算程序的理想选择。本书注重理论与实践的结合,与其他介绍CUDA的图书相比,具有如下特点:
  首先,对CUDA的介绍深入浅出、全面细致。对于基础知识的介绍可以使读者快速了解CUDA,迅速上手编程;深入的分析又能够帮助读者了解不同的程序设计方式带来性能差异的原因,从而设计出更高效的程序,对于实践这点十分重要。
  其次,在介绍CUDA的编程语言语法、各种资源以及工具的使用方法的基础上,立足于实践,选择了如机器学习、可视化系统等诸多有代表性的示例,将书中介绍的各种技术学以致用,不仅可以帮助读者更深入地理解CUDA编程思想,也有利于将CUDA技术更好地应用于实际工作中。
  此外,本书内容广泛,涵盖了CUDA技术的各个方面,其中不仅介绍了基本的单GPU系统中CUDA程序的设计,还涉及了单机多GPU系统、多机GPU集群系统,甚至云计算环境中CUDA技术的应用等。本书还介绍了CUDA第三方支持产品和CUDA的衍生产品,例如可将CUDA程序编译为运行在常规CPU系统上的PGI等。
  通过翻译本书,我们深深体会到作者对于CUDA和并行计算相关领域知识的深刻理解以及为编写本书所付出的努力,从中收获颇丰。我们相信读者也能够享受本书所带来的愉悦。本书的翻译力求在保证准确和接近原文风格的前提下,专业技术词汇采用国内专业通用术语,尽可能做到易于理解。
  本书的第1、3、5、6、9、10章由于玉龙翻译,第2、4、7、8、11、12章由唐堃翻译,并由郭禾、王宇新和于玉龙共同完成全文终稿定稿。
  感谢机械工业出版社的各位编辑在本书翻译过程中提供的帮助;感谢沈阳药科大学王薇同学在图书译稿的校对工作中提供的大量帮助。还要感谢我们的科研团队——大连理工大学软件学院高性能计算与图像处理实验室、大连理工大学计算机科学与技术学院系统结构实验室的各位同仁为本书翻译工作提供的各种支持。另外,还要特别感谢已经毕业的程童同学,为我们实验室开展GPU并行计算所做出的开创性工作,以及对本书翻译工作的支持。最后,感谢家人在图书翻译工作中给予我们的支持和鼓励。
  由于时间仓促,翻译过程中的瑕疵和错误在所难免,欢迎各位读者批评指正。您的批评与建议会成为我们进步的基石。

图书目录

译者序
序言
前言
第1章 CUDA入门与编程思想1
 1.1 源代码与维基1
 1.2 一个用以区别CUDA与传统程序开发的示例2
 1.3 选择合适的CUDA API5
 1.4 CUDA的一些基本概念7
 1.5 理解首个Runtime Kernel10
 1.6 GPGPU编程的三条法则11
  1.6.1 法则1:将数据放入并始终存储于GPU12
  1.6.2 法则2:交给GPGPU足够多的任务12
  1.6.3 法则3:注重GPGPU上的数据重用,以避免带宽限制12
 1.7 大O记号的思想与数据传输13
 1.8 CUDA和Amdahl定律15
 1.9 数据并行与任务并行15
 1.10 混合执行:同时使用CPU和GPU资源16
 1.11 回归测试与正确性18
 1.12 静默错误19
 1.13 调试简介20
 1.14 UNIX调试方法21
  1.14.1 NVIDIA cuda-gdb调试器21
  1.14.2 CUDA内存检查器23
  1.14.3 通过UNIX ddd界面使用cuda-gdb24
 1.15 使用Parallel Nsight进行Windows调试25
 1.16 本章小结27
第2章 CUDA在机器学习与优化中的应用28
 2.1 建模与模拟28
  2.1.1 拟合参数化模型29
  2.1.2 Nelder-Mead方法30
  2.1.3 Levenberg-Marquardt方法30
  2.1.4 算法加速31
 2.2 机器学习与神经网络32
 2.3 异或逻辑:一个重要的非线性机器学习问题33
  2.3.1 目标函数示例35
  2.3.2 针对多GPU设备、多CPU处理器的完整仿函数35
  2.3.3 完整Nelder-Mead优化代码的简要讨论37
 2.4 异或逻辑的性能结果45
 2.5 性能讨论45
 2.6 本章小结48
 2.7 C++ NELDER-MEAD代码模板48
第3章 CUDA工具套件:对PCA、NLPCA进行性能分析53
 3.1 PCA和NLPCA53
  3.1.1 自编码网络55
  3.1.2 用于PCA分析的仿函数示例56
  3.1.3 用于NLPCA分析的示例仿函数58
 3.2 获得基础性能分析数据60
 3.3 gprof:通用UNIX性能分析器61
 3.4 NVIDIA可视化性能分析器:computeprof62
 3.5 Microsoft Visual Studio中的Parallel Nsight65
  3.5.1 Nsight时间表分析66
  3.5.2 NVTX跟踪支持库67
  3.5.3 CUDA API的可扩展性表现68
 3.6 性能调节与分析实用工具(TAU)70
 3.7 本章小结70
第4章 CUDA执行模型72
 4.1 GPU架构综述72
  4.1.1 线程调度:通过执行配置统筹性能与并行度74
  4.1.2 computeprof中Warp相关值77
  4.1.3 Warp分歧77
  4.1.4 关于Warp分歧的若干准则78
  4.1.5 computeprof中Warp分歧相关值79
 4.2 Warp调度与TLP79
 4.3 ILP:高性能低占用率80
  4.3.1 ILP隐藏算术计算延迟81
  4.3.2 ILP隐藏数据延迟84
  4.3.3 ILP的未来84
  4.3.4 computeprof中指令速率相关值85
 4.4 Little法则86
 4.5 检测限制因素的CUDA工具87
  4.5.1 nvcc编译器88
  4.5.2 启动约束90
  4.5.3 反汇编器90
  4.5.4 PTX Kernel函数92
  4.5.5 GPU模拟器92
 4.6 本章小结93
第5章 CUDA存储器94
 5.1 CUDA存储器层次结构94
 5.2 GPU存储器95
 5.3 L2缓存98
 5.4 L1缓存99
 5.5 CUDA内存类型100
  5.5.1 寄存器101
  5.5.2 局域内存101
  5.5.3 和局域内存相关的computeprof性能分析参数102
  5.5.4 共享内存102
  5.5.5 和共享内存相关的computeprof性能分析参数105
  5.5.6 常量内存105
  5.5.7 纹理内存106
  5.5.8 和纹理内存相关的computeprof性能分析参数108
 5.6 全局内存109
  5.6.1 常见的整合内存示例110
  5.6.2 全局内存的申请111
  5.6.3 全局内存设计中的限制因素113
  5.6.4 和全局内存相关的computeprof性能分析参数114
 5.7 本章小结115
第6章 高效使用CUDA存储器116
 6.1 归约116
  6.1.1 归约模板117
  6.1.2 functionReduce.h的测试程序122
  6.1.3 测试结果126
 6.2 使用非规则数据结构127
 6.3 稀疏矩阵和CUSP支持库131
 6.4 图论算法132
 6.5 SoA、AoS以及其他数据结构134
 6.6 分片和分块135
 6.7 本章小结136
第7章 提高并行度的技巧137
 7.1 CUDA上下文环境对并行度的扩展137
 7.2 流与上下文环境138
  7.2.1 多GPU的使用139
  7.2.2 显式同步139
  7.2.3 隐式同步141
  7.2.4 统一虚拟地址空间141
  7.2.5 一个简单的示例142
  7.2.6 分析结果144
 7.3 使用多个流乱序执行144
  7.3.1 在同一GPU内并发执行Kernel函数的建议147
  7.3.2 隐式并行Kernel的原子操作147
 7.4 将数据捆绑计算149
  7.4.1 手动分割数据150
  7.4.2 映射内存150
  7.4.3 映射内存的工作机制152
 7.5 本章小结153
第8章 CUDA在所有GPU与CPU程序中的应用154
 8.1 从CUDA到多种硬件后端的途径155
  8.1.1 PGI CUDA x86编译器155
  8.1.2 PGI CUDA x86编译器157
  8.1.3 将x86处理器核心用作流多处理器159
  8.1.4 NVIDIA NVCC编译器160
  8.1.5 Ocelot160
  8.1.6 Swan161
  8.1.7 MCUDA162
 8.2 从其他语言访问CUDA162
  8.2.1 SWIG162
  8.2.2 Copperhead163
  8.2.3 EXCEL164
  8.2.4 MATLAB164
 8.3 支持库164
  8.3.1 CUBLAS164
  8.3.2 CUFFT165
  8.3.3 MAGMA174
  8.3.4 phiGEMM支持库175
  8.3.5 CURAND176
 8.4 本章小结177
第9章 CUDA与图形渲染混合编程178
 9.1 OpenGL178
  9.1.1 GLUT179
  9.1.2 通过OpenGL映射GPU内存179
  9.1.3 使用基元重启提升3D处理性能181
 9.2 框架内各文件的介绍183
  9.2.1 Kernel与Perlin Kernel演示的示例代码184
  9.2.2 simpleGLmain.cpp文件192
  9.2.3 simpleVBO.cpp文件196
  9.2.4 callbacksVBO.cpp文件199
 9.3 本章小结204
第10章 在云计算和集群环境中使用CUDA205
 10.1 消息传递接口205
  10.1.1 MPI编程模型206
  10.1.2 MPI通信器206
  10.1.3 MPI进程号206
  10.1.4 主从模式208
  10.1.5 点对点模式基础208
 10.2 MPI通信机制209
 10.3 带宽211
 10.4 平衡率212
 10.5 运行大型MPI程序需要考虑的因素214
  10.5.1 初始数据加载的可扩展性214
  10.5.2 使用MPI进行计算215
  10.5.3 可扩展性检查216
 10.6 云计算217
 10.7 代码示例218
  10.7.1 数据的产生218
  10.7.2 主体代码部分220
 10.8 本章小结225
第11章 CUDA在现实问题中的应用227
 11.1 高维数据的处理228
  11.1.1 PCA/NLPCA228
  11.1.2 多维尺度分析229
  11.1.3 K均值聚类算法229
  11.1.4 期望最大化229
  11.1.5 支持向量机230
  11.1.6 Bayesian网络230
  11.1.7 互信息231
 11.2 力导向图232
 11.3 Monte Carlo方法232
 11.4 分子建模233
 11.5 量子化学234
 11.6 交互式工作流234
 11.7 其他众多的项目235
 11.8 本章小结235
第12章 针对现场实况视频流的应用程序236
 12.1 机器视觉话题236
  12.1.1 3D效果237
  12.1.2 肤色区域分割238
  12.1.3 边缘检测238
 12.2 FFmpeg239
 12.3 TCP服务器241
 12.4 实况视频流应用程序244
  12.4.1 kernelWave():动画Kernel函数244
  12.4.2 kernelFlat():在平面渲染图像245
  12.4.3 kernelSkin():仅保留肤色区域245
  12.4.4 kernelSobel():Sobel边缘检测过滤器246
  12.4.5 launch_kernel()方法247
 12.5 simpleVBO.cpp文件248
 12.6 callbacksVBO.cpp文件248
 12.7 生成与执行代码251
 12.8 展望251
  12.8.1 机器学习252
  12.8.2 Connectome252
 12.9 本章小结253
 12.10 simpleVBO.cpp文件253
参考文献258
术语表265

教学资源推荐
作者: (美)Kevin F. Brennan 著
作者: 张建忠 徐敬东 编著
参考读物推荐
作者: 尹继平 张帆 编著
作者: 郑志强 曹来京 孟永 编著
作者: 黄文恺 吴羽 编著