基本信息

编辑推荐
---------------------------3769261 - CUDA并行程序设计:GPU编程指南---------------------------
CUDA开发者社区技术总监亲自撰写,英伟达中国首批CUDA官方认证工程师翻译,译著双馨
全面、详实地讲解了CUDA并行程序设计的技术知识点和编程方法,包含大量实用代码示例,是目前学习CUDA编程最权威的著作之一
内容简介
计算机书籍
---------------------------8071136 - 并行程序设计:概念与实践---------------------------
本书由德国约翰内斯·古腾堡大学并行和分布式架构团队撰写,对并行编程的高级主题进行了深入讨论,除了涵盖基础概念外,还讲授了共享内存和分布式内存体系结构的实用编程技巧。作者提供了一套进行自动代码评估的开源系统,可方便地访问并行计算资源,这也使得本书特别适合于课堂教学。
---------------------------3769261 - 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应用中易犯错误以及应对建议。
作译者
---------------------------3769261 - CUDA并行程序设计:GPU编程指南---------------------------
Shane Cook,CUDA开发者社区技术总监,有20余年行业经验。当认识到异构系统以及CUDA对于已有串行和并行编程技术的革命性冲击时,创立了CUDA开发者社区(欧洲的咨询公司,专门帮助企业重构代码以充分利用GPU硬件的威力)。他专注于高性能软件开发、GPU利用、嵌入式系统,并参与了多个C语言编程标准的建设,包括广泛应用于汽车软件行业的汽车工业软件MISRA Safer C。他常为德国汽车行业、国防承包行业、北电网络以及福特汽车公司等机构或蓝筹股公司提供专业咨询服务和软件定制开发。
苏统华,博士,英伟达中国首批CUDA官方认证工程师,主要研究领域包括大规模并行计算、模式识别、物联网智能信息处理、智能媒体交互与计算等。2013年,其所开发的CUDA识别算法,在文档分析和识别国际会议(ICDAR’ 2013)上获得手写汉字识别竞赛的双料冠军。另外,他在手写汉字识别领域建立了里程碑式的工作,论文他引300余次;他所建立的HIT-MW库,为全世界100多家科研院所采用;目前负责国家自然科学基金项目2项。著有英文专著《Chinese Handwriting Recognition: An Algorithmic Perspective》(德国施普林格出版社),CUDA相关译作2本(机械工业出版社)。现任哈尔滨工业大学软件学院高级讲师、硕士生导师。
目录
3769261 - CUDA并行程序设计:GPU编程指南 - 9787111448617 - 机械工业出版社 - 定价 99
8071136 - 并行程序设计:概念与实践 - 9787111656661 - 机械工业出版社 - 定价 119
---------------------------8071136 - 并行程序设计:概念与实践---------------------------
译者序
前言
致谢
第1章 绪论 1
1.1 一个有趣的例子及其分析 2
1.2 并行计算基础 10
1.2.1 分布式内存系统 10
1.2.2 共享内存系统 11
1.2.3 并行程序设计需考虑的因素 13
1.3 HPC动态和排名 15
1.4 附加练习 17
译者序
---------------------------3769261 - CUDA并行程序设计:GPU编程指南---------------------------
我们正在由单核时代进入多核时代和众核时代。在单核时代,软件行业一直享用着“免费的午餐”。 受益于CPU主频的指数级提速,开发软件无须任何代码修改,只要换上新一代的处理器,即可获得性能上的飞速提升。随着汹涌而来的众核时代,这里已经“不再有免费午餐”。随着计算架构的不断演进,编程模型也发生着深刻的变化。计算机软件行业面临着最大的变迁问题——从串行、单线程的问题求解方式切换到大规模线程同时执行的问题求解方式。而CUDA提供了非常优秀的可扩展架构,以支持这种大规模并行程序设计需求。
本书是一本很出众的CUDA书籍,内容全面而又不落窠臼。全书可以分成四个部分。第一部分为背景篇,包括前4章。其中前两章简述流处理器历史和并行计算基本原理,第3~4章分别介绍了CUDA的硬件架构与计算能力和软件开发配置。第二部分为CUDA基本篇,包括第5~7章。第5、6章依次介绍了CUDA线程抽象模型和内存抽象模型,在此过程中,紧密结合直方图统计实例和样本排序实例进行讨论。为了更好地增进读者的实践经验,第7章全方位剖析了AES加密算法的CUDA实现过程。第三部分为CUDA扩展篇,包括第8~10章。其中第8、9章面向优化执行性能,而第10章为提升开发生产效率。第8章从充分利用多个硬件设备的角度,讲述了流的使用。相反的,第9章从程序优化角度,给出了CUDA性能调优的全方位指导。第10章介绍了一些常用的函数库和CUDA开发包中提供的优质SDK,为大型软件的快速发布提供了支持。第四部分为CUDA经验篇,包括最后的两章。这两章分别针对硬件系统搭建和软件生产过程中的共性问题提供建议,是作者多年CUDA开发经验的总结。
本书特色鲜明。作者在介绍CUDA时,仿佛在跟朋友聊天论道,谈论家常,讲着故事,娓娓道来。论到关键之处,却又语重心长,体贴备至。在不知不觉中,把CUDA的魅力展示得淋漓尽致,同时把CUDA程序设计的功力传授于你。
本书的翻译工作经过精心的组织,整个过程得到大批专业人士的帮助。在交付出版社之前,译者团队经过了全书讨论、初译、初核、再译、再核、审校等六个环节。很荣幸地邀请到在哈尔滨工业大学长年承担“并行程序设计”和“计算机体系结构”等课程教学工作的李东教授,加盟本书的翻译团队。李东教授翻译了第1~3章,对保证本书的翻译质量起到了重要作用。本书第5~7章的初译以及第9章部分小节的初译和再译由李松泽负责。本书第10章和第12章的初译以及第9章部分小节的初译和再译由魏通负责。苏统华负责了本书前言、第4章、第8章、第9章部分小节和第11章的初译和再译任务,除此之外,他还负责了全书的初核和再核任务。特别感谢哈尔滨工业大学软件学院院长马培军教授,他应邀审校了全部译文,提出了很多中肯的改进意见。本书在交到出版社之后,又得到了机械工业出版社编辑团队的大力帮助,他们的工作专业而细致,让人钦佩。另外还要感谢哈尔滨工业大学软件学院2012级数字媒体方向的硕士研究生,参与了部分内容的初译,特别是王烁行同学做了不少工作。如果没有这么多人的辛勤奉献,这本中译本很难如期呈现。另外,国家自然科学基金(资助号:61203260)对本书的翻译提供了部分资助,哈尔滨工业大学创新实验课《CUDA高性能并行程序设计》也对本书的翻译提供了大力支持。
由于本书涉及面广,很多术语较新,目前尚无固定译法,翻译难度很大。有时,为一个术语选择一个恰当的中文译法,译者经常反复推敲、讨论。但由于译者水平有限,译文中难免存在一些问题,真诚地希望读者朋友们将您的意见发往 cudabook@gmail.com。
苏统华
哈尔滨工业大学软件学院
前言
---------------------------8071136 - 并行程序设计:概念与实践---------------------------
并行无处不在!如今,任意一款现代CPU都至少包含2个核心,一些CPU甚至配置了超过50个处理单元。对于有多个CPU的更大的系统,比如多个服务器节点、计算机集群、超级计算机等,它们甚至能够获得更高的并行度。因此,对于科学家、工程师、程序员来说,必须具备在这类系统上直接高效编写程序的能力。本书的主题是全面介绍并行编程领域的知识,以满足上述需求。本书针对共享内存和分布式内存体系结构讲解了实用的并行编程方法,包括C++11线程API、OpenMP、CUDA、MPI、UPC++,以及必不可少的理论背景。本书还提供大量的编程实例,它们基于C++编程语言针对多线程特性的扩展版本C++11和C++14。
本书以“并行编程”或者“高性能计算”两门课程的学生为目标读者。在计算机科学专业或计算机工程专业,很多大学都为高年级本科生或者研究生开设了这两门课程。此外,本书还适合用作其他学科学生在辅修计算机科学时的教材,或者用作相关领域专业人员的参考资料,譬如研究科学家、数据分析师或研发工程师等。理解本书内容需要有编写C/C++串行代码的经验,并具备基本的数学知识。
高性能计算和自然科学之间历来有良好的共生关系,我们将基于真实应用讲述并行概念。这些应用包括:基本线性代数例程、机器学习算法,以及物理模拟和计算机科学领域中的传统算法。编写正确而高效的代码是每一位程序员的关键技能,因此我们关注算法的真正实现和性能评估。尽管如此,我们还是深入讨论了算法的理论特性。每章都有一组附加的编程练习,可在本书配套的Web框架中完成这些练习。自动代码评估系统(System for Automated Code Evaluation,SAUCE)为提交解答方案和后续的课堂讲解提供了一个基于Web的测试环境。仅需的前提条件是一个与HTML5兼容的Web浏览器,以支持嵌入课堂教学的交互编程练习。SAUCE已经以docker镜像发布,可在下列网站下载:
https://parallelprogrammingbook.org
该网站汇集了本书相关的在线资源,比如安装指南、勘误表、附加材料(如课件、针对教师精选的部分练习答案)等。
如果你是一名学生或者专业人士,目标是学习编程技术,那么我们建议你首先阅读前3章,从并行编程基础、理论模型、硬件体系结构开始。然后,你就可以深入学习C++11多线程、OpenMP、CUDA或MPI中的任意一章。这些都是介绍性章节,内容几乎自成体系。关于高级C++11多线程、高级CUDA和UPC++的内容依赖前导章节中的技术,所以不能独立阅读。
如果你是一名教师,我们推荐一套包含14讲的授课体系,大体上覆盖了介绍性章节中提到的全部应用程序。你可以从第1章开始,第1讲讨论基础知识,包括利用超立方体并行求和的算法及其分析、基本度量标准(如加速比、并行效率、开销等)以及对排名指标的讨论等。第2讲应该包括PRAM、网络拓扑、强弱可扩展性等。如果将来想详细讨论CUDA,或者重点强调CPU的硬件体系结构,可以在PRAM上分配更多时间。可以用2~3讲的时间讲解C++11线程API、CUDA、MPI方面的基础知识。OpenMP相关内容可以分配1~2讲的时间。剩余时间可以选择讨论多线程、CUDA或者基于PGAS的UPC++语言等高级章节的相关内容。
另外一种可选的方法是,把本书内容分成两门课程,重点放在课堂上的“结对编程”。第一门课可以从基于CPU的并行编程技术开始,涵盖从前3章中选定的主题。这样,C++11多线程、OpenMP、MPI就能够讲解得足够细致。第二门课将侧重于高级并行方法,包括CUDA感知的MPI或基于PGAS的UPC++等技术相结合的扩展CUDA编程。
希望本书陪伴你度过快乐时光。充满活力,探索代码!最后,我们将非常高兴能收到你的任何反馈,以便帮助我们尽可能完善本书相关内容。
---------------------------3769261 - CUDA并行程序设计:GPU编程指南---------------------------
媒体评论
---------------------------8071136 - 并行程序设计:概念与实践---------------------------
并行无处不在!任意一款现代CPU都至少包含两个核心,几乎人手一部的智能手机都配备了多核CPU与异构加速器。因此,对于工程师和程序员而言,学会在这类系统上直接高效编写程序,成为必须具备的重要技能。
本书针对共享内存和分布式内存两种体系结构,介绍了实用的并行编程方法,涵盖C++11线程API、OpenMP、CUDA、MPI、UPC++等内容,既包含基础概念,也提供大量的编程实例和编程工具。
本书特色:
·搭建从概念到实践的桥梁。基于实际应用讲授理论知识,包括基本线性代数例程、机器学习算法、物理模拟等,关注算法的实现和性能评估。
·配备便于教学的实验工具。SAUCE(自动代码评估系统)是专为本书而开发的基于Web的测试环境,便于读者完成章末练习或实现交互编程。
·提供不同侧重的学习路线。无论是高校学生还是企业技术人员,均可从相对独立的介绍性章节开始阅读,然后根据各自需求进阶高级内容。
---------------------------3769261 - CUDA并行程序设计:GPU编程指南---------------------------
本书旨在为读者学习CUDA打下坚实基础。涵盖如何理解串行程序并把它转化到单指令流多数据流编程模型下,以及如何基于CUDA实现高效的并行程序。本书除了提供多个实例,还深入讨论了GPU程序的优化,同时对共享内存、内存预读和线程的使用均有涉及。
——Nagarajan Kandasamy博士,德雷塞尔大学电子与计算机工程系副教授
书摘
---------------------------3769261 - CUDA并行程序设计:GPU编程指南---------------------------
第1章
超级计算简史
1.1?简介
为什么我们会在一本关于CUDA的书籍中谈论超级计算机呢?超级计算机通常走在技术发展的最前沿。我们在这里看到的技术,在未来的5~10年内,将是桌面计算机中很普通的技术。2010年,在德国汉堡举行的一年一度的国际超级计算机大会上宣布,根据500强名单(http://www.top500.org),英伟达基于GPU的机器在世界最强大的计算机列表中位列第二。从理论上讲,它的峰值性能比强大的IBM Roadrunner和当时的第一名Cray Jaguar的性能还要高。当时Cray Jaguar的性能峰值接近3千万亿次。2011年,采用CUDA技术的英伟达GPU仍然是世界上最快的超级计算机。这时大家突然清楚地认识到,与简陋的桌面PC一起,GPU已经在高性能计算领域达到了很高的地位。
超级计算是我们在现代处理器中看到的许多技术的发展动力。由于对用更快的处理器来处理更大数据集的需求,工业界不断生产出更快的计算机。正是在这些发展变化中,GPU的CUDA技术走到了今天。
超级计算机和桌面计算正在向着异构计算发展——人们试图通过将中央处理器(Central Processor Unit,CPU)和图形处理器(Graphics Processor Unit,GPU)技术混合在一起来实现更高的性能。使用GPU的两个最大的国际项目是BOINC和Folding @ Home,它们都是分布式计算的项目。这两个项目使得普通人也能为具体的科学项目做出真正的贡献。在项目中,采用GPU加速器的CPU/GPU主机的贡献远远超过了仅装备CPU主机的贡献。截至2011年11月,大约550万台主机提供了约5.3千万亿次的计算性能,这将近是2011年世界上最快的超级计算机(日本富士通的“京(K)计算机”)计算性能的一半。
作为美国最快的超级计算机Jaguar的升级换代产品,命名为Titan的超级计算机计划于2013年问世。它将用近30万个CPU核和高达18?000个GPU板卡达到每秒10~20千万亿次的性能。正是由于有像Titan这样的来自世界各地的大力支持,无论是在HPC(高性能计算)行业,还是在桌面电脑领域,GPU编程已经成为主流。
现在,你可以自己“攒”或者购买一台具有数万亿次运算性能的桌面超级计算机了。在21世纪初期,这将会使你跻身500强的首位,击败拥有9632奔腾处理器的IBM ASCI Red。这不仅部分地展现了过去十几年计算机技术取得的巨大进步,更向我们提出了从现在开始的未来十几年,计算机技术将发展到何种水平这个问题。你可以完全相信在未来一段时间内,GPU将位于技术发展的前沿。因此,掌握GPU编程将是任何一个优秀开发人员必备的重要技能。
1.2?冯·诺依曼计算机架构
几乎所有处理器都以冯·诺伊曼提出的处理结构为工作基础,冯·诺伊曼被认为是计算之父之一。在该结构中,处理器从存储器中取出指令、解码,然后执行该指令。
现代处理器的运行速度通常高达4GHz。现代DDR-3内存,与标准的英特尔I7设备配合使用时,可以在运行任何程序时最高达到2GHz的速度。然而,在一个I7设备中至少具有四个处理器或内核。如果你认为超线程能力只能作为一个真正的处理器,那么一个I7设备中也是两个处理器。
在一个I7 Nehalem系统中,三通道DDR-3内存具有的理论带宽如表1-1所示。受主板和确切的内存模式影响,实际带宽可能要小很多。
表1-1I7 Nehalem处理器带宽
QPI时钟频率 理论带宽 单核带宽