基本信息

编辑推荐
---------------------------3769261 - CUDA并行程序设计:GPU编程指南---------------------------
CUDA开发者社区技术总监亲自撰写,英伟达中国首批CUDA官方认证工程师翻译,译著双馨
全面、详实地讲解了CUDA并行程序设计的技术知识点和编程方法,包含大量实用代码示例,是目前学习CUDA编程最权威的著作之一
内容简介
计算机书籍
---------------------------8071136 - 并行程序设计:概念与实践---------------------------
本书由德国约翰内斯·古腾堡大学并行和分布式架构团队撰写,对并行编程的高级主题进行了深入讨论,除了涵盖基础概念外,还讲授了共享内存和分布式内存体系结构的实用编程技巧。作者提供了一套进行自动代码评估的开源系统,可方便地访问并行计算资源,这也使得本书特别适合于课堂教学。
---------------------------8067632 - 高性能计算:现代系统与应用实践---------------------------
本书内容全面且易学易懂,不仅涵盖高性能计算的基础概念和知识点,同时重视核心技能的培养。通过阅读本书:资深研究者将学习如何将超级计算机作为寻求新知识的重要工具;新手工程师将体验超级计算机如何运用高性能计算系统和方法来设计和模拟创新产品;学生将会了解未来高性能计算研究和开发的可能方向,为职业生涯做好准备;商用集群的维护和管理者将在掌握高性能计算系统的功能的基础上,学习如何更好地使用它们。
---------------------------8061305 - 基于CUDA的GPU并行程序开发指南---------------------------
本书旨在帮助读者了解与基于CUDA的并行编程技术有关的基本概念,并掌握实用c语言进行GPU高性能编程的相关技巧。本书第一部分通过CPU多线程编程解释了并行计算,使得没有太多并行计算基础的读者也能毫无阻碍地进入CUDA天地;第二部分重点介绍了基于CUDA的GPU大规模并行程序的开发与实现,并通过大量的性能分析帮助读者理解如何开发一个好的GPU并行程序以及GPU架构对程序性能的影响;本书的第三部分介绍了一些常用的CUDA库。
本书内容详尽、实例丰富,可作为高等院校相关专业高年级本科生和研究生课程的教材,也可作为有关专业研究生或计算机技术人员的参考书。
作译者
---------------------------8061305 - 基于CUDA的GPU并行程序开发指南---------------------------
[美]托尔加·索亚塔(Tolga Soyata) 著:托尔加·索亚塔(Tolga Soyata) 是纽约州立大学奥尔巴尼分校电气与计算机工程系副教授。主要教授大规模集成电路、GPU编程课程,曾担任罗切斯特大学CUDA教学中心和CUDA研究中心负责人。
---------------------------5850457 - CUDA C编程权威指南---------------------------
程润伟(John Cheng)是一位有着丰富行业经验的研究员,研究方向为异构计算平台上的高性能计算。在进入石油天然气行业之前,他曾在金融行业工作了十余年,以其计算智能领域的专长,基于遗传算法做出了与数据挖掘和统计研究相关的许多方案,为商业项目中的技术难题提供了很多高明而有效的解决办法。作为享誉国际的遗传算法与工业工程应用方面的权威研究人员,他已参与编写了三本书。《遗传算法与工程设计》是他的第一部作品,该书于1997年由John Wiley and Sons公司出版,现今仍是全球高校的教科书。无论是学术研究还是实业发展方面,他都有了不错的成就,他擅长将晦涩复杂的学术问题化繁为简,深入浅出地给读者以阐释和启发。他已获东京技术研究所的计算智能博士学位。
马克斯·格罗斯曼(Max Grossman)与GPU编程模型已经打了近十年交道。他的主要研究内容为开发新型GPU编程模型和用于在GPU硬件上实现的算法。他已将GPU应用于地球科学、等离子体物理、医学成像和机器学习等一系列领域,并致力于发现和研究新领域的计算模式,寻求以全新方式应用它们的可能性。这些宝贵的实践经验对于指导今后在编程模型和程序框架方面的工作大有裨益。马克斯获莱斯大学的计算机科学学士学位,主要研究并行计算。
泰·麦克切尔(Ty McKercher)是NVIDIA公司的首席方案架构师,他领导的团队专攻跨行业的视觉计算系统架构。他通常负责在新兴技术评估期间促进客户和产品工程团队之间的沟通交流。自从2006年参加了在NVIDIA公司总部举办的第一届CUDA训练课程后,他一直参与CUDA的相关项目。也是自那时起,他也在某些世界最大、任务最为繁重的产品数据中心工作,帮助构建基于GPU的超级计算环境。他已获科罗拉多矿业学院数学学士学位,主要研究方向为地球物理学和计算机科学。
技术审校者简介 About the Reviewers
张伟,是一位在高性能计算领域有着15年工作经验的科研程序员。他已独立研发或与人合作研发了许多科学软件包,服务于分子模拟、计算机辅助药物设计、EM的结构重建和地震深度成像开发等。目前,他正致力于研究如何采用诸如CUDA等新技术来提升地震数据的处理效率。
赵超,于2008年加入雪佛龙公司,目前是地球物理应用软件开发专家,负责为地球学家们设计和开发软件产品。他在加入雪佛龙之前是知识系统公司和地震微技术公司的软件开发员。他从事软件开发的研究和实业已超过13年,在地质学和地球物理学方面积累了丰富的经验。经过多年的学术研究,他十分乐于见到CUDA编程能真正广泛地应用到科研工作中,并愿为此尽其所能。赵超本科毕业于北京大学的化学专业,获罗得岛大学计算机科学专业的理学硕士学位。
目录
3769261 - CUDA并行程序设计:GPU编程指南 - 9787111448617 - 机械工业出版社 - 定价 99
5206918 - 多核与GPU编程:工具、方法及实践 - 9787111557685 - 机械工业出版社 - 定价 129
5850457 - CUDA C编程权威指南 - 9787111565475 - 机械工业出版社 - 定价 99
8061305 - 基于CUDA的GPU并行程序开发指南 - 9787111630616 - 机械工业出版社 - 定价 179
8067632 - 高性能计算:现代系统与应用实践 - 9787111645795 - 机械工业出版社 - 定价 149
8071136 - 并行程序设计:概念与实践 - 9787111656661 - 机械工业出版社 - 定价 119
---------------------------8071136 - 并行程序设计:概念与实践---------------------------
译者序
前言
致谢
第1章 绪论 1
1.1 一个有趣的例子及其分析 2
1.2 并行计算基础 10
1.2.1 分布式内存系统 10
译者序
---------------------------5850457 - CUDA C编程权威指南---------------------------
CUDA(Compute Unified Device Architecture,统一计算设备架构)是NVIDIA(英伟达)提出的并行计算架构,结合了CPU和GPU的优点,主要用来处理密集型及并行计算。CPU和GPU是两个独立的处理器,通过单个计算节点中的PCI-Express总线相连,GPU用来提高计算密集型应用程序中并行程序段的执行速度,CPU则负责管理设备端的资源。CUDA编程的独特优势在于开放的架构特性可以使程序员在功能强大的硬件平台上充分挖掘其并行性,既满足了计算密集型程序的需要,又实现了程序的易读性及便捷性。
对任何想要使用GPU来进行科研或技术编程的人来说,本书都将是一个珍贵的资源宝库,它全面介绍了CUDA编程接口及其用法,包含但不局限于CUDA编程模型、GPU执行模型、GPU内存模型、CUDA流和事件、多GPU编程的相关技术、CUDA库等内容。此外,本书列举了大量的范例来帮助读者入门,并提供了程序下载地址,供读者亲自运行体验。在基本掌握了本书的内容之后,你将发现CUDA C编程是一项十分简单、有趣且高效的工作。
本书第1章简要介绍了GPU和CPU构成的异构架构,对使用CUDA进行异构并行计算的原理进行了简要说明。第2章介绍了CUDA编程模型,从逻辑上解释了什么是CUDA大规模并行计算。第3章介绍了CUDA执行模型。第4章给出了CUDA内存模型,分析了全局内存的访问模式。第5章介绍了数据在共享内存中的存储方式,以及如何使用共享内存提高函数性能。第6章讲述了如何使用CUDA流实现网格级的并发。第7章介绍了计算密集型应用程序中的CUDA指令级原语。第8章介绍了CUDA函数库及其作用域,包括线性代数、傅里叶变换、随机数等。第9章讲述了多GPU编程。第10章则说明了在使用CUDA进行程序开发时的一些注意事项。
译者在翻译过程中力求忠于原著,但限于译者的能力及水平,如有纰漏,还望读者朋友们不吝赐教,译者在此表示衷心的感谢。
---------------------------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编程。
希望本书陪伴你度过快乐时光。充满活力,探索代码!最后,我们将非常高兴能收到你的任何反馈,以便帮助我们尽可能完善本书相关内容。
---------------------------8067632 - 高性能计算:现代系统与应用实践---------------------------
序言
---------------------------8067632 - 高性能计算:现代系统与应用实践---------------------------
高性能计算是贝克尔和斯特林于1994年创建的Beowulf集群方案的必由后续产品,用于利用商品硬件构建可扩展的高性能计算机(也称为超级计算机)。Beowulf使各地的团队都能建立自己的超级计算机,现在全球有数百个Beowulf集群在运营。这本内容全面的书籍填补了培训领域科学家和工程师,特别是计算机科学家的学术课程中的重要缺失环节。读者将会了解在构成当今超级计算机的计算元件(核心)的聚集体上,如何创建和运行(例如,控制、调试、监视、可视化、改进)并行程序。
掌握了这些不断增加且可扩展的并行计算机,读者将有机会进入相对较小但不断增长的技术精英阶层,这是本书的目标。为了避免读者误认为这个名称并不重要,我们举例说明:1988年的第一次会议是ACM/IEEE超级计算大会,也称为Supercomputing 88;2006年,该名称演变为高性能计算、网络、存储和分析国际会议,缩写为SCXX;大约11 000人参加了SC16。
虽然很难描述什么样的计算机才算是一台“超级计算机”,但是当我看到它时,我知道它就是超级计算机。1961年出现的第一台超级计算机是劳伦斯·利弗莫尔国家实验室的UNIVAC LARC(利弗莫尔高级研究计算机),它由爱德华·泰勒研制,用于核武器设计的水动力模拟。就我个人而言,我从未参观过它。LARC由几十个密集封装的电路板组成,这些电路板由几千英里(1英里= 1609.344米)长的电缆互连,一些计算单元以100kHz的频率工作。2016年,中国最大的神威·太湖之光超级计算机的运行速度比LARC快了1万亿倍。它由超过1000万个处理核心组成,每个核以1.5GHz的频率运行,功耗为15MW。计算机安装在4排机柜中,每排40个机柜,每个机柜包含256个物理节点。它具有四个互连的8MB处理器,控制64个处理单元或核心。因此,1060万个处理单元提供峰值为125千万亿次的浮点运算/秒,即160个机柜×256个物理节点×4个核心组×(1个MPE + 8×8个CPE)个处理单元或核心,具有1.31PB存储器(160×256×4×8GB)。500强超级计算机中的一些具有O(10000)量级的计算节点,这些节点连接和控制具有O(100)量级核的图形处理单元(GPU)。今天,计算程序开发人员面临的挑战是设计程序的架构和实现,以利用这些具有兆级数量处理器的计算机。
从用户的角度来看,“理想的高性能计算机”具有无限快速的时钟,能执行单指令流程序,该程序对存储在无限大且快速的单存储器中的数据进行操作,并且具有任何大小以适应任何预算或问题。1957年,巴科斯基于Fortran语言建立了冯·诺依曼编程模型。从20世纪60年代到90年代初,这是超级计算的第一个时代,或者说“克雷”时代,我们看到了硬件的发展。通过提高处理器速度,流水线化指令流,使用单指令处理向量,最后为单存储器计算机中存储的程序添加处理器,超级计算实现了对这种简单易用的理想模型的支持。到20世纪90年代初,单台计算机向理想模型的演变已经停止:时钟频率达到GHz级别,通过互连访问单个存储器的处理器数量限制在几十个。尽管如此,有限规模的多处理器共享内存可能是最直接的编程和使用方式!
幸运的是,在20世纪80年代中期,“杀手级微处理器”到来了。它通过互连日益强大的计算机,展示了成本效益和无限扩展能力。不幸的是,这个多计算机时代要求放弃Fortran的单存储器和单个顺序程序的理想。因此,“超级计算”已经从西摩·克雷时代(1960~1995年)的单台(单存储器)计算机的硬件工程设计挑战演变为使用多台计算机有效运行程序的软件工程设计挑战。程序首先运行在64个处理单元上(1983年),然后是1000个处理单元上(1987年),现在则在数千台完全分布式(单存储器)的计算机上的1000万个处理单元上(2016年)。实际上,今天的高性能计算(HPC)节点就像十年前的超级计算机一样,因为处理单元每年增长36%,从1987年的1000台计算机增长到1000万个处理单元(包含在100 000个计算机节点中)。
本书是掌握超级计算的重要指南和参考,作者列举了并行化、创建和运行这些大型并行和分布式程序结构的复杂性和微妙之处。例如,最大的气候模型同时模拟了海洋、冰、大气和陆地,由十几名领域科学家、计算数学家和计算机科学家组成的团队来创建。
程序创建包括了解处理资源集合的结构及其与不同计算机的交互,从多处理器到多计算机(第2章和第3章),以及各种并行化总体策略(第9章)。其他主题包括并行程序各部分之间的同步和消息传递通信(第7章和第8章),构成程序的附加库(第10章),文件系统(第18章),长期大容量存储(第17章),结果可视化的组件(第12章)。对于一个系统而言,标准基准可以给出并行程序的运行情况(第4章)。第16章和第17章介绍和描述了控制加速器和特殊硬件核心(尤其是GPU)的技术,这些核心连接到节点,为每个节点提供额外的两个数量级的处理能力。这些附件是克雷时代的向量处理单元的替代品,并且以计算统一设备架构(CUDA),以及跨不同加速器封装的并行性的模型和标准为代表。
与在个人计算机、智能手机或浏览器中交互运行的程序的创建、调试和执行不同,超级计算机程序通过批处理控制来提交。运行程序需要向计算机指定使用的批处理控制语言和命令来控制程序所需的资源和条件(第5章),通过调试使程序进入可靠和可信赖状态(第14章),检查点(即及时保存中间结果)作为计算投入的保险(第20章),通过性能监测(第13章)发展和提高程序的有效性。
第21章介绍了移动超级计算机的问题和替代方案,以及将它们用于千万亿次运算级及以上规模的能力。事实上,本书中唯一没有描述的是令人难以置信的团队合作,以及编写和管理HPC代码时所面临的团队规模的发展。然而,团队合作最关键的方面在于个人成员的能力。这本书正是你所需要的指南。
戈登·贝尔
2017年10月
媒体评论
---------------------------8071136 - 并行程序设计:概念与实践---------------------------
并行无处不在!任意一款现代CPU都至少包含两个核心,几乎人手一部的智能手机都配备了多核CPU与异构加速器。因此,对于工程师和程序员而言,学会在这类系统上直接高效编写程序,成为必须具备的重要技能。
本书针对共享内存和分布式内存两种体系结构,介绍了实用的并行编程方法,涵盖C++11线程API、OpenMP、CUDA、MPI、UPC++等内容,既包含基础概念,也提供大量的编程实例和编程工具。
本书特色:
·搭建从概念到实践的桥梁。基于实际应用讲授理论知识,包括基本线性代数例程、机器学习算法、物理模拟等,关注算法的实现和性能评估。
·配备便于教学的实验工具。SAUCE(自动代码评估系统)是专为本书而开发的基于Web的测试环境,便于读者完成章末练习或实现交互编程。
·提供不同侧重的学习路线。无论是高校学生还是企业技术人员,均可从相对独立的介绍性章节开始阅读,然后根据各自需求进阶高级内容。
---------------------------8067632 - 高性能计算:现代系统与应用实践---------------------------
本书是掌握超级计算的重要指南和参考。它填补了培训领域科学家和工程师,特别是计算机科学家的学术课程中的重要缺失环节。
——戈登·贝尔(同名的戈登·贝尔奖是高性能应用领域的最高奖项)
高性能计算涉及硬件架构、操作系统、编程工具和软件算法等跨学科的知识,学习曲线较长。本书从中提炼出核心知识及技能,为初学者构建了一条易于理解的学习路径,夯实基础的同时注重培养实战能力。
书摘
---------------------------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时钟频率 理论带宽 单核带宽