三个英文单词首字母的简称。具备表明性的有Message Passing Interface ,Multi Point Interface ,Multi points injection等。 html
对MPI的定义是多种多样的,但不外乎下面三个方面,它们限定了MPI的内涵和外延: 一、MPI是一个库,而不是一门语言。许多人认为,MPI就是一种并行语言,这是不许确的。可是,按照并行语言的分类,能够把FORTRAN+MPI或C+MPI看做是一种在原来串行语言基础之上扩展后获得的,并行语言MPI库能够被FORTRAN77/C/Fortran90/C++调用,从语法上说,它遵照全部对库函数/过程的调用规则,和通常的函数/过程没有什么区别; 二、MPI是一种标准或规范的表明,而不特指某一个对它的具体实现,迄今为止,全部的并行计算机制造商都提供对MPI的支持,能够在网上免费获得MPI在不一样并行计算机上的实现,一个正确的MPI程序能够不加修改地在全部的并行机上运行; 三、MPI是一种消息传递编程模型,并成为这种编程模型的表明。事实上,标准MPI虽然很庞大,可是它的最终目的是服务于进程间通讯这一目标的; 解释来源于《高性能计算之并行编程技术——
MPI并行程序设计》都志辉 编著 linux
四、MPI是多点接口(Multi Point Interface)的简称,是西门子公司开发的用于PLC之间通信的保密的协议。MPI通信是当通讯速率要求不高、通讯数据量不大时,能够采用的一种简单经济的通信方式。MPI通讯可以使用PLC S7-200/300/400、操做面板TP/OP及上位机MPI/PROFIBUS通讯卡,如CP5512/CP5611/CP5613等进行数据交换。MPI网络的通讯速率为19.2Kbps~12Mbps,最多能够链接32个节点,最大通信距离为50m,可是可能经过中断器来扩展长度。
解释来源于《西门子工业网络通讯指南》(上册) 崔坚 主编 程序员
MPI(Message Passing Interface)是消息传递并行程序设计的标准之一,当前通用的是MPI1.1规范。正在制定的MPI2.0规范除支持消息传递外,还支持MPI的I/O规范和进程管理规范。MPI正成为并行程序设计事实上的工业标准。
MPI的实现包括MPICH、LAM、IBM MPL等多个版本,最经常使用和稳定的是MPICH,曙光天潮系列的MPI以MPICH为基础进行了定制和优化。 算法
MPICH含三层结构,最上层是MPI的API,基本是点到点通讯,和在点到点通讯基础上构造的集群通讯(Collective Communication);中间层是ADI层(Abstract
Device Interface),其中device能够简单地理解为某一种底层通讯库,ADI就是对各类不一样的底层通讯库的不一样接口的统一标准;底层是具体的底层通讯库,例如工做站机群上的p4通讯库、曙光1000上的NX库、曙光3000上的BCL通讯库等。 数据库
MPICH的1.0.12版本如下都采用第一代ADI接口的实现方法,利用底层device提供的通讯原语和有关服务函数实现全部的ADI接口,能够直接实现,也能够依靠必定的模板间接实现。自1.0.13版本开始,MPICH采用第二代ADI接口。 编程
咱们将MPICH移植到曙光3000高效通讯库BCL(Basic Communication Library)上(简称MPI_BCL)。MPI_BCL的接口标准与MPICH版本1.1彻底一致,知足MPI1.1标准。同时,也支持ch_p4的通讯库,即利用TCP/IP通讯机制。从网络硬件角度说,MPI_BCL针对系统网络,MPI_ch_p4针对高速以太网。 数组
做 者:张武生李建江 出版社: 清华大学出版社 出版时间:
2009 ISBN:
9787302186472 开本: 16 订价:
39.50 元 缓存
《MPI并行程序设计实例教程》旨在经过示例全面介绍MP1并行程序开发库的使用方法、程序设计技巧等方面的内容,力争完整讨论MP1规范所定义的各类特征。主要也括MPI环境下开发并行程序经常使用的方法、模式、技巧等内容。在内容组织上力求全面综合地反映MPl-1和MPI-2规范。对MPI所定义的各类功能、特征分别给出可验证和测试其工做细节的示例程序 安全
◆书中内容侧重于以MPI库为基础开发并行应用程序,对MP规范定义的各项功能和特征在阐述其特色基础上均配以实例加以说明和印证。 ◆书中所附实例尽可能采用独立的功能划分,其中的代码片断可直接用于并行应用程序开发 ◆在讲述基本原理的同时,注重对各项消息传递和管理操做的功能及局限性、适用性进行分析从而使熟读此书的读者可以编写出适合应用特色,易维护、高效率的并行程序。 ◆与《MPI并行程序设计实例教程》配套的电子教案可在清华大学出版社网站下载。 服务器
第1章MPI并行环境及编程模型 1.1MPICH2环境及安装和测试 1.1.1编译及安装 1.1.2配置及验汪 1.1.3应用程序的编译、连接 1.1.4运行及调试 1.1.5MPD中的安全问题 1.2MPI环境编程模型 1.2.1并行系统介绍 1.2.2并行编程模式 1.2.3MPI程序工做模式 1.3MPI消息传递通讯的基本概念 1.3.1消息 1.3.2缓冲区 1.3.3通讯子 1.3.4进样号和l进程纰 1.3.5通价胁议 1.3.6隐形对象 第2章点到点通讯 2.1阻糍通讯 2.1.1标准通讯模式 2.1.2缓冲通讯模式 2.1.3就绪通讯模式 2.1.4同步通讯模式 2.1.5小结 2.2非阻塞通讯 2.2.1通讯结束测试 2.2.2非重复的非阻塞通讯 2.2.3可醺复的非阻塞通讯 2.2.4Probe和Cancel 2.3组合发送接收 2.3.1MPl_Send,MPI_RecvoMPl_Sendreev 2.3.2MPI_Bsend←→MPl_Sendrecv 2.3.3MPI_Rsend←→MPI_Sendrecv 2.3.4MPl_Ssend←→MPl_Sendrecv 2.3.5MPl_lsend←→MP1一Sendrecv 2.3.6MPl_Ibsend←→MPI_Sendrecv 2.3.7MPI_Irsend←→MPI_Sendrecv 2.3.8MPl_Issend,MPI_Irecv←→MPI_Sendrecv 2.3.9MPISend_init←→MPl_Sendrecv 2.3.10MPI一Bsendjinit←→MPl_Sendrecv 2.3.11MPI_Rsend_init←→MPI_Sendrecv 2.3.12MPl_Ssend_init,MPl_Recv_init←→MPl_Sendrecv 2.4点到点通讯总结 2.4.1关于预防死锁 2.4.2关于阻塞与非阻塞、同步与异步 2.4.3关于操做的执行顺序及“公平性” 第3章组与通讯子 3.1简介 3.2组管理API 3.2.1组的构建及取消 3.2.2访问组的相关信息和属性 3.3组问通讯 3.3.1建立与取消 3.3.2访问通讯子信息 3.4组间通讯 3.4.1访问函数 3.4.2构造和取消函数 3.5属性 3.5.1建立及释放属性操做 3.5.2访问属性操做 3.5.3设置及删除属性操做 3.5.4命名通讯子对象 3.6错误处理 3.7组及通讯子的小结 第4章集合通讯 4.11←→N 4.1.1MPI_Bcast 4.1.2MPI_Scatter/MPI_Scatterv 4.2N←→1 4.2.1MPl_Gather/MPI_Gatherv 4.2.2MPI_Reduce 4.3N←→N 4.3.1MPI_Allgather/MPI_Allgatherv. 4.3.2MPI_Allreduce 4.3.3MPl_Reducescatter 4.3.4MPI_Alltoall/MPIAlltoallv/MPI_Alltoallw 4.3.5MPI_Scan/MPI_Exscan 4.4同步操做--MPI_Barrier 第5章数据类型 5.1类型图 5.2与数据类型相关的API函数 5.2.1建立 5.2.2访问 5.2.3注册与取消 5.3数据类型在通讯函数缓冲区的构成 5.4数据类型的属性 5.4.1属性建立与释放 5.4.2属性操做 5.4.3复制数据类型 5.4.4类型属性举例 5.4.5数据类型命名 5.5数据类型的析构 5.5.1获取建立数据类型MPI函数所使用参数数量信息 5.5.2获取建立数据类型MPI函数所使用实际参数信息 5.5.3示例 5.6打包/解包 第6章进程拓扑 第7章动态进程管理 第8章单向通讯/远端内存访问 第9章并行I/O 第10章MPI与外部环境的信息交互 第11章MPE 参考文献
MPI并行程序设计
http://wenku.baidu.com/view/3d1a6df80242a8956bece43c.html
CUDA
CUDA(Compute Unified Device Architecture),显卡厂商NVidia推出的运算平台。 CUDA™是一种由NVIDIA推出的通用并行计算架构,该架构使GPU可以解决复杂的计算问题。它包含了CUDA指令集架构(ISA)以及GPU内部的并行计算引擎。开发人员如今能够使用C语言来为CUDA™架构编写程序,C语言是应用最普遍的一种高级编程语言。所编写出的程序因而就能够在支持CUDA™的处理器上以超高性能运行。未来还会支持其它语言,包括FORTRAN以及C++。
简介 计算行业正在从只使用CPU的“中央处理”向CPU与GPU并用的“协同处理”发展。为打造这一全新的计算典范,NVIDIA®(英伟达™)发明了CUDA(Compute
Unified Device Architecturem,统一计算设备架构)这一编程模型,是想在应用程序中充分利用CPU和GPU各自的优势。如今,该架构现已应用于GeForce®(精视™)、ION™(翼扬™)、Quadro以及Tesla GPU(图形处理器)上,对应用程序开发人员来讲,这是一个巨大的市场。
在消费级市场上,几乎每一款重要的消费级视频应用程序都已经使用CUDA加速或很快将会利用CUDA来加速,其中不乏Elemental Technologies公司、MotionDSP公司以及LoiLo公司的产品。
在科研界,CUDA一直受到热捧。例如,CUDA现已可以对AMBER进行加速。AMBER是一款分子动力学模拟程序,全世界在学术界与制药企业中有超过60,000名研究人员使用该程序来加速新药的探索工做。
在金融市场,Numerix以及CompatibL针对一款全新的对手风险应用程序发布了CUDA支持并取得了18倍速度提高。Numerix为近400家金融机构所普遍使用。
CUDA的普遍应用造就了GPU计算专用Tesla GPU的崛起。全球财富五百强企业如今已经安装了700多个GPU集群,这些企业涉及各个领域,例如能源领域的斯伦贝谢与雪佛龙以及银行业的法国巴黎银行。
随着微软Windows
7与苹果Snow Leopard操做系统的问世,GPU计算必将成为主流。在这些全新的操做系统中,GPU将不只仅是图形处理器,它还将成为全部应用程序都可使用的通用并行处理器。
随着显卡的发展,GPU愈来愈强大,并且GPU为显示图像作了优化。在计算上已经超越了通用的CPU。如此强大的芯片若是只是做为显卡就太浪费了,所以NVidia推出CUDA,让显卡能够用于图像计算之外的目的。
目前只有G80、G9二、G9四、G9六、GT200、GF100平台(即Geforce 8~Gecorce GTX480)的NVidia显卡才能使用CUDA,工具集的核心是一个C语言编译器。G80中拥有128个单独的ALU,所以很是适合并行计算,并且数值计算的速度远远优于CPU。
CUDA的SDK中的编译器和开发平台支持Windows、Linux系统,能够与Visual Studio2005集成在一块儿。
Geforce8CUDA(Compute Unified Device Architecture)是一个新的基础架构,这个架构能够使用GPU来解决商业、工业以及科学方面的复杂计算问题。它是一个完整的GPGPU解决方案,提供了硬件的直接访问接口,而没必要像传统方式同样必须依赖图形API接口来实现GPU的访问。在架构上采用了一种全新的计算体系结构来使用GPU提供的硬件资源,从而给大规模的数据计算应用提供了一种比CPU更增强大的计算能力。CUDA采用C语言做为编程语言提供大量的高性能计算指令开发能力,使开发者可以在GPU的强大计算能力的基础上创建起一种效率更高的密集数据计算解决方案。
从CUDA体系结构的组成来讲,包含了三个部分:开发库、运行期环境和驱动(表2)。
开发库是基于CUDA技术所提供的应用开发库。目前CUDA的1.1版提供了两个标准的数学运算库——CUFFT(离散快速傅立叶变换)和CUBLAS(离散基本线性计算)的实现。这两个数学运算库所解决的是典型的大规模的并行计算问题,也是在密集数据计算中很是常见的计算类型。开发人员在开发库的基础上能够快速、方便的创建起本身的计算应用。此外,开发人员也能够在CUDA的技术基础上实现出更多的开发库。
运行期环境提供了应用开发接口和运行期组件,包括基本数据类型的定义和各种计算、类型转换、内存管理、设备访问和执行调度等函数。基于CUDA开发的程序代码在实际执行中分为两种,一种是运行在CPU上的宿主代码(Host
Code),一种是运行在GPU上的设备代码(Device Code)。不一样类型的代码因为其运行的物理位置不一样,可以访问到的资源不一样,所以对应的运行期组件也分为公共组件、宿主组件和设备组件三个部分,基本上囊括了全部在GPGPU开发中所须要的功能和可以使用到的资源接口,开发人员能够经过运行期环境的编程接口实现各类类型的计算。
因为目前存在着多种GPU版本的NVidia显卡,不一样版本的GPU之间都有不一样的差别,所以驱动部分基本上能够理解为是CUDA-enable的GPU的设备抽象层,提供硬件设备的抽象访问接口。CUDA提供运行期环境也是经过这一层来实现各类功能的。目前基于CUDA开发的应用必须有NVIDIA CUDA-enable的硬件支持,NVidia公司GPU运算事业部总经理Andy
Keane在一次活动中表示:一个充满生命力的技术平台应该是开放的,CUDA将来也会向这个方向发展。因为CUDA的体系结构中有硬件抽象层的存在,所以从此也有可能发展成为一个通用的GPGPU标准接口,兼容不一样厂商的GPU产品
是一种针对支持CUDA功能的GPU(图形处理器)的C语言开发环境。CUDA开发环境包括:
· 适用于GPU(图形处理器)的CUDA FFT和BLAS库
· 适用于GPU(图形处理器)的gdb调试器(在2008年3月推出alpha版)
· CUDA运行时(CUDA runtime)驱动程序(目前在标准的NVIDIA GPU驱动中也提供)
CUDA开发者软件开发包(SDK)提供了一些范例(附有源代码),以帮助使用者开始CUDA编程。这些范例包括:
· 并行双调排序
· 矩阵乘法
· 矩阵转置
· 利用计时器进行性能评价
· 并行大数组的前缀和(扫描)
· 图像卷积
· 使用Haar小波的一维DWT
· OpenGL和Direct3D图形互操做示例
· CUDA BLAS和FFT库的使用示例
· CPU-GPU C—和C++—代码集成
· 二项式期权订价模型
· Monte-Carlo期权订价模型
· 并行Mersenne Twister(随机数生成)
· 并行直方图
· 图像去噪
· Sobel边缘检测滤波器
· MathWorks MATLAB®
新的基于1.1版CUDA的SDK 范例如今也已经发布了。
· 在GPU(图形处理器)上提供标准C编程语言
· 为在支持CUDA的NVIDIA GPU(图形处理器)上进行并行计算而提供了统一的软硬件解决方案
· CUDA兼容的GPU(图形处理器)包括不少:从低功耗的笔记本上用的GPU到高性能的,多GPU的系统。
· 支持CUDA的GPU(图形处理器)支持并行数据缓存和线程执行管理器
· 标准FFT(快速傅立叶变换)和BLAS(基本线性代数子程序)数值程序库
· 针对计算的专用CUDA驱动
· 通过优化的,从中央处理器(CPU)到支持CUDA的GPU(图形处理器)的直接上传、下载通道
· CUDA驱动可与OpenGL和DirectX图形驱动程序实现互操做
· 支持Linux 32位/64位以及Windows XP 32位/64位 操做系统
· 为了研究以及开发语言的目的,CUDA提供对驱动程序的直接访问,以及汇编语言级的访问
NVIDIA进军高性能计算领域,推出了Tesla&CUDA高性能计算系列解决方案,CUDA技术,一种基于NVIDIA图形处理器(GPU)上全新的并行计算体系架构,让科学家、工程师和其余专业技术人员可以解决之前没法解决的问题,做为一个专用高性能GPU计算解决方案,NVIDIA把超级计算可以带给任何工做站或服务器,以及标准、基于CPU的服务器集群
CUDA是用于GPU计算的开发环境,它是一个全新的软硬件架构,能够将GPU视为一个并行数据计算的设备,对所进行的计算进行分配和管理。在CUDA的架构中,这些计算再也不像过去所谓的GPGPU架构那样必须将计算映射到图形API(OpenGL和Direct 3D)中,所以对于开发者来讲,CUDA的开发门槛大大下降了。CUDA的GPU编程语言基于标准的C语言,所以任何有C语言基础的用户都很容易地开发CUDA的应用程序。
因为GPU的特色是处理密集型数据和并行数据计算,所以CUDA很是适合须要大规模并行计算的领域。目前CUDA除了能够用C语言开发,也已经提供FORTRAN的应用接口,将来能够预计CUDA会支持C++、Java、Python等各种语言。可普遍的应用在图形动画、科学计算、地质、生物、物理模拟等领域。
2008年NVIDIA推出CUDA SDK2.0版本,大幅提高了CUDA的使用范围。使得CUDA技术愈发成熟
支持CUDA的GPU销量已逾1亿,数以千计的软件开发人员正在使用免费的CUDA软件开发工具来解决各类专业以及家用应用程序中的问题。这些应用程序从视频与音频处理和物理效果模拟到石油自然气勘探、产品设计、医学成像以及科学研究,涵盖了各个领域。目前市面上已经部署了超过一亿颗支持CUDA的GPU,数以千计的软件开发人员正在使用免费的CUDA软件工具来为各类应用程序加速。
CUDA 的核心有三个重要抽象概念: 线程组层次结构、共享存储器、屏蔽同步( barrier
synchronization),可轻松将其做为C 语言的最小扩展级公开给程序员。
CUDA 软件堆栈由几层组成,一个硬件驱动程序,一个应用程序编程接口(API)
和它的Runtime,还有二个高级的通用数学库,CUFFT 和CUBLAS。硬件被设计成支持轻
量级的驱动和Runtime 层面,于是提升性能。
所支持的OS(operating system)
CUDA目前支持linux和Windows操做系统。进行CUDA开发须要依次安装驱动、toolkit、SDK三个软件。在安装目录/C/src目录下有不少的例程能够进行学习。
英伟摩达(NVIDIA摩机社区):http://www.nvmod.cn
《大规模并行处理器编程实战》(英伟达官方网站推荐书籍)
《CUDA范例精解》(英伟达官方网站推荐书籍)
NVIDIA CUDA技术亮点何在
做为图形芯片领域的领头羊, NVIDIA(英伟达)认为GPU较CPU具备更强的浮点运算能力以及更大的带宽等诸多优点,甚至连晶体管数量目前都是GPU略胜一筹,将来GPU将愈来愈多地取代CPU的数据处理职能。所以,英伟达在07年就提出了独特的GPGPU(通用图形处理器)概念。目前 NVIDIA(英伟达)新一代GPU都采用了统一渲染架构,这种架构相比以往使GPU的运算单元变得通用,并能够根据图形渲染处理的负载灵活地改变运算单元的任务。这种架构集成了多个支持顶点坐标计算及三角形着色等多级处理的运算单元,各运算单元的任务能够根据各级处理的负载进行调整。新架构的出现也使得在以浮点运算为中心的通用处理中使用GPU成为可能。
在这种趋势下, NVIDIA(英伟达)定制了一个解决方案,被称做Compute Unified Device Architecture,简称CUDA。这也就是今天咱们介绍的主角!
CUDA的编译
CUDA的本质是NVIDIA为自家的GPU编写了一套编译器NVCC极其相关的库文件。CUDA的应用程序扩展名能够选择是.cu,而不是.cpp等。NVCC是一个预处理器和编译器的混合体。当遇到CUDA代码的时候,自动编译为GPU执行的代码,也就是生成调用CUDA Driver的代码。若是碰到Host C++代码,则调用平台本身的C++编译器进行编译,好比Visual Studio C++本身的Microsoft C++ Compiler。而后调用Linker把编译好的模块组合在一块儿,和CUDA库与标准CC++库连接成为最终的CUDA
Application。因而可知,NVCC模仿了相似于GCC同样的通用编译器的工做原理(GCC编译CC++代码本质上就是调用cc和g++)。整个CUDA平台是经过运用显卡内的流处理器进行数学运算,并经过GPU内部的缓存共享数据,流处理器之间甚至能够互相通讯,同时对数据的存储也再也不约束于以GPU的纹理方式,存取更加灵活,能够充分利用统一架构的流输出(stream out)特性,大大提升应用效率。
CUDA技术特点
CUDA的运算
目前的CUDA所用的运算方法是分开的,一部分由CPU负责,而另外一部分经过CUDA编译器使用GPU进行运算。在CUDA的架构下,一个程序分为两个部份:host 端和device 端。Host 端是指在CPU 上执行的部份,而device 端则是在显示芯片上执行的部份。Device端的程序又称为 “kernel”。一般host端程序会将数据准备好后,复制到显卡的内存中,再由显示芯片执行device端程序,完成后再由host端程序将结果从显卡的内存中取回。
因为显示芯片大量并行计算的特性,它处理一些问题的方式,和通常CPU是不一样的。好比在内存存取latency 的问题上,CPU 一般使用cache 来减小存取主内存的次数,以免内存latency 影响到执行效率,而显示芯片则多半没有cache(或很小),而利用并行化执行的方式来隐藏内存的latency(即,当第一个 thread 须要等待内存读取结果时,则开始执行第二个thread,依此类推),效率提升很多。正如 NVIDIA(英伟达)公司Tesla GPU计算事业部高级产品经理Sumit Gupta先生曾经推过一个形象的例子,CPU的顺序指令执行操做比如是一间办公室里的多个职员,若是每人须要将杯子里的水倒入同一个桶内时,他们须要排成长队按顺序进行。而对于GPU来讲,这些职员无需排队,只要同时走到桶前将水倒入便可。因此,最适合利用CUDA处理的问题,是能够大量并行化的问题,才能有效隐藏内存的latency,并有效利用显示芯片上的大量执行单元。使用CUDA
时,同时有上千个thread在执行是很正常的。所以,若是不能大量并行化的问题,使用CUDA就没办法达到最好的效率了。
GPU并行计算过程
CPU存取显卡内存时只能透过PCI Express 接口,所以速度较慢(PCI Express x16 的理论带宽是双向各4GB/s),所以不能过多进行这类动做,以避免下降效率。在CUDA架构下,显示芯片执行时的最小单位是thread。数个thread 能够组成一个block。一个block 中的thread 能存取同一块共享的内存,并且能够快速进行同步的动做。每个block 所能包含的thread 数目是有限的,不过执行相同程序的block,能够组成grid。不一样block中的thread没法存取同一个共享的内存,所以没法直接互通或进行同步。所以,不一样block中的thread能合做的程度是比较低的。不过,利用这个模式,可让程序不用担忧显示芯片实际上能同时执行的thread数目限制。例如,一个具备不多量执行单元的显示芯片,可能会把各个block中的thread顺序执行,而非同时执行。不一样的grid则能够执行不一样的程序。
在目前支持CUDA的GPU中,其流处理器个数是不能和CPU如今拥有的内核数量做类比的。CPU的每个核心都是一个完整的独立处理架构,而GPU中的每一个流处理器并不彻底是这样,而是以子组合方式运做,好比每8个流处理器组成一个Stream Multiprocessors (SM),其中分为四个流处理器又分为1小组,也能够当作是有两组4D的SIMD处理器。须要说明的是,若用户拥有超过两张或以上支持CUDA的显卡,驱动程序将经过PCIe总线自动分配工做负载,进一步提高效能。
固然CUDA也有其弱势的地方,并非全部的事情CUDA都可以很好地解决,好比像操做系统这样复杂的指令和纷繁的分支循环而又用不多的线程来处理,这显然就不是CUDA的强项了。高度并行的计算是CUDA的技术特性之一。
那些GPU支持CUDA?
在推出GeForce GTX 200系列前,CUDA短短两年时间就已经发展了四个版本:
不一样CUDA版本对比
目前,NVIDIA(英伟达)推出的GPU中,G80系列支持CUDA 1.0,而以后推出的G8四、G8六、G9二、G94和G96 则支持CUDA 1.1。
GeForce显卡规格对比
CUDA 2.0—随GeForce GTX 200登场
而NVIDIA(英伟达)在6月17日GeForce GTX 200系列发布之时也推出了CUDA 2.0,加入双精度运算支持,为应用提供更准确的运算结果,而这项技术源自于多重处理器的专用单元。
多重处理器的专用单元框架
每个多重处理器都包含了8个主要的FMAD处理器和8和MUL处理器来实现一些特殊功能的计算等。这样,一个64位的FMAD处理器就产生了。可是这样的处理器对于64位的计算能力至关低下,8X的低速FMAD和16X的低速FMUL都是致使计算能力低下的缘由。这个支持64位也意味着能够以它为模板为未来的更高级和新一代的GPU发展提供代码或者应用程序的支持,从而获得更好的甚至超过一个以上的64位处理器。每个多重处理器都具备两个流处理线,这样就没必要依赖周期而同时处理两个信号。
引入双精度运算能力,能够在必定程度上加强GT200在科学计算领域的适用性.尽管在实际的相关领域中其实有部分甚至只须要16位精度就足够了,但GTX200核心的每个SM都包括了一个双精度64Bit浮点运算单元,因此每一个周期GT200能达成1MAD*30SM=30MAD,在1.5GHz的shader频率下能够达到90 GFLOPS(MAD)的双精度浮点性能, NVIDIA(英伟达)对其称之为能够与8核Xeon处理器(我想应该是指45nm Hypertown内核Xeon E5440 2.83GHz)的水平。不过须要注意的是,Xeon每一个内核的浮点单元组合是每两个周期完成一个ADDPD或者一个周期完成一个MULPD,在双精度浮点峰值性能上"含金量"方面彷佛要比GT200每一个SM单周期MAD高一些。
NVIDIA(英伟达)的对手AMD在RV670上实现了硬件(非模拟)的FP64支持,双精度MAD性能为单精度MAD的1/5,GT200架构的双精度浮点支持应该是 NVIDIA(英伟达)迈向双精度浮点加速器的第一步,将来的架构极可能会把浮点双精度的性能作到单精度的1/2水平,这将是很是可观的。
CUDA将成为又一个标准API接口
选择CUDA的理由
目前CUDA已经应用在不少领域,包括在通用计算中的一些GPU加速,游戏中的物理模拟等等,而在科学计算中,CUDA可发挥的功效就更大了。好比有限元的计算、神经元的研究计算、地质分析等等科学研究的领域;固然目前GPU计算的应用仍是处于一个早期的阶段,大部分CUDA应用都是专业人员和相关的程序员在开发,随着CUDA的普遍推行,之后会有实际的基于CUDA的程序,更多的程序员可以加入进来,而且开发一些能够给你们平常应用带来好处的程序,只要有支持CUDA的GPU就可以利用到GPU计算的好处。
CUDA 4.0提升多GPU效率
● CUDA带给GPU行业无限可能
2007年能够说是GPU发展史上翻天覆地的一年,在这一年微软推出了DirectX 10 API标准,将传统的Pixel Shader(顶点着色器)、Vertex Shader(像素着色器)和Geometry Shader(几何着色器),三种硬件逻辑被整合为一个全功能的统一着色器Shader。
这种API发展思路背后是微软和NVIDIA、AMD对于整个GPU发展历程的思考与转型。它标志着微软开始支持GPU走向更强的可编程性,也标志着Intel等传统CPU制造厂商在将来几年将要面对GPU的强硬挑战,愈来愈多的高性能计算机和超级计算机已经开始以GPU做为其运算能力提高的重要配件。
天河一号-A所采用的NVIDIA Tesla GPU
2007年一样是NVIDIA值得回忆的一年,NVIDIA公司在这一年正式推出了CUDA整套方案,它是一个完整的通用计算产品。CUDA是Compute Unified Device Architecture(统一计算架构)的简称,是创建在GPU基础之上的通用计算开发平台,它是一个全新的软硬件架构,能够将GPU视为一个并行数据计算的设备,对所进行的计算进行分配和管理。
NVIDIA提出的CUDA通用计算方案
简单分析可知,CUDA是一种以C语言为基础的平台,主要是利用显卡强大的浮点运算能力来完成以往须要CPU才能够完成的任务。这种整套方案的提出意味着程序员不再用去钻研繁杂的底层汇编程序,而是在C语言的基础上稍加学习就能掌握CUDA并经过它来调用GPU强大的浮点运算能力。
CUDA 4.0的3个显著提高
这一版本的CUDA大幅度下降了编程难度,同时提高了GPU的编程和执行效率。CUDA 4.0主要的功能可以在Fermi架构的最新GPU上被发挥出来,同时它可让G80、G9二、GT200架构的GPU也拥有编程方式上的飞跃。
GPU统一虚拟寻址
● GPU统一虚拟寻址
在2011年2月28日,NVIDIA发布了最新版本的CUDA工具包——CUDA 4.0。借助该工具包,开发人员可以开发出在GPU上运行的并行应用程序。本次NVIDIA历经两年时间发布了CUDA 4.0版本,这一版本为咱们带来了3个核心的编程与执行方式提高,它们分别是:
一、统一的虚拟寻址;
二、更直接的GPU间通讯;
三、加强型C++模板库。
这3个关键性提高让更多开发人员可以利用GPU计算,它们也成为CUDA 4.0的核心提高之处。接下来咱们经过NVIDIA官方公布的资料来简单分析CUDA 4.0的不一样之处。
多个GPU及其显存能够被视为一体
首先提出的是“GPU统一虚拟寻址”概念,咱们第一次见到这一律念在Fermi架构发布的报道中,Fermi架构带领GPU全面走向高性能计算的重要表现就在于存储体系的结构完善和GPU统一的虚拟寻址,结构部分中关村在线显卡频道以前进行了大量分析,细心的读者确定收藏了咱们的技术分析类文章。
Fermi的发布完全统一了GPU寻址空间,将不一样的寻址简化为一种指令,这在之前的的GPU中是不敢想象的,内存地址取决于存储位置:最低位是本地,而后是共享,剩下的是全局。这种统一寻址空间也是支持C++的必需前提。
本次CUDA 4.0版本的发布可让多个GPU以及CPU统一调用GPU显存以及CPU内存,并将处理器(CPU+GPU)和存储器(内存+显存)视为统一总体。在最大显存为6GB的Tesla产品中,多CPU和多GPU融合以后能够为整个系统带来大容量存储设备而且进行统一寻址。
GPU通讯和C++模板库
● GPU通讯和C++模板库
多GPU通讯在之前的CUDA版本中代价很大,只有专业的并行编程环境才能驱动多款GPU在同一系统内执行一个任务,而目前桌面级应用中,若是用户的多块显卡同时存在于系统中,一个CUDA加速程序每每只能调用其中一个GPU核心。
从DirectX 10到DirectX 11的多线程变化
虽然咱们看到GPU在图形操做时能够有SLI速力或者CF交火能力,也有DirectX 提出的多线程渲染技术,可是高并行度的GPU通用计算领域在PC桌面级应用中反倒不能实现多款GPU联合加速。
旧版的GPU Direct 1.0主要用于应用程序在网络间通讯,新版的GPU Direct 2.0则转入节点内通讯,支持P2P内存访问、传输和同步,代码更少,编程效率更高。在此以前,同一节点内的不一样GPU互相访问,须要绕道系统内存并进行两次拷贝。就不用理会系统内存了,不一样GPU能够直接进行传输,只须要一个统一的存储体系协议NVIDIA就搞定了整个问题。
说到GPU支持C++编程你们必定不会陌生,在Fermi架构发布之时,C++模板库模板库就已经被NVIDIA不断升级。Fermi是首款支持第二代PTX指令的GPU架构,咱们知道PTX 2.0使得GPU具有更强的可编程性、更精确和提供更高的性能。
Thrust C++模板化算法与数据结构
经过上图可知,Thrust C++模板化算法与数据结构提供了强大的开源C++并行算法和数据结构。相似C++ STL标准模板库;可在编译时自动选择最快的代码路径,在多核心CPU与GPU之间分配工做。
C/C++语言中全部变量和函数都是经过指针才能肯定对象,这样存在编译时分离的寻址空间没法肯定指针的位置而致使没法支持C/C++语言。PTX 2.0最为突出的地方在于它提供的统一寻址空间的意义,将GPU当成“共享地址空间”的并行计算机。大量的算法是基于共享地址空间平台的,这样可以显著推进GPU并行计算的发展。
CUDA 4.0引领行业如何发展
● CUDA 4.0引领行业如何发展
2011年2月28日,NVIDIA官方发布了CUDA 4.0以及全新计算开发包的各项特性,而3月5日NVIDIA正式发布了GPU通用计算开发包的CUDA 4.0 RC候选版,并提供给开发人员下载使用。
NVIDIA对本身的定位发生变化
从官方公布的资料看来,NVIDIA的确是早有打算并雄心勃勃进入并行计算市场,目前NVIDIA拥有了从Tegra到Tesla的整套芯片产品线。而这条产品线从节能高效到高性能计算全面涵盖,这的确是一家处于产业链上游的“超级”计算芯片公司。
CUDA从发布开始,到目前已经到了4.0版,从NVIDIA提出CUDA这个概念,已经有将近四年的时间,在最近一年时间CUDA发展迅速,主要是Fermi架构推出以后GPU可编程性急剧提高,GPU和CPU的差距已经愈来愈近,二者关系也愈来愈紧密。
CUDA 4个版本发展历程
上图描述了NVIDIA CUDA发布以来,从1.0版本官方大力宣传和爱好者尝试,到2.0版专用领域开始应用CUDA进行编程开发,3.0版本已经引来整个行业的关注,大量软件开始基于CUDA进行基于GPU的加速开发,到今天推出4.0版本继续下降开发难度提高开发效率。
除了上述叙述以外,咱们经过资料获得CUDA 4.0架构版本还包含大量其它特性与功能,其中包括:
一、MPI与CUDA应用程序相结合——当应用程序发出MPI收发调用指令时,例如OpenMPI等改编的MPI软件可经过Infiniband与显卡显存自动收发数据。
二、GPU多线程共享——多个CPU主线程可以在一颗GPU上共享运行环境,从而使多线程应用程序共享一颗GPU变得更加轻松。
三、单CPU线程共享多GPU——一个CPU主线程能够访问系统内的全部GPU。 开发人员可以垂手可得地协调多颗GPU上的工做负荷,知足应用程序中“halo”交换等任务的须要。
四、全新的NPP图像与计算机视觉库——其中大量图像变换操做让开发人员可以快速开发出成像以及计算机视觉应用程序。
五、全新、改良的功能
Visual Profiler中的自动性能分析功能
Cuda-gdb中的新特性以及新增了对MacOS的支持
新增了对C++特性的支持,这些特性包括新建/删除以及虚拟等功能
全新的GPU二进制反汇编程序
3大核心提高可否带来CUDA 4.0飞跃式发展
目前CUDA可以有效利用GPU强劲的处理能力和巨大的存储器带宽进行图形渲染之外的计算,普遍应用于图像处理、视频传播、信号处理、人工智能、模式识别、金融分析、数值计算、石油勘探、天文计算、流体力学、生物计算、分子动力学计算、数据库管理、编码加密等领域,并在这些领域中对CPU得到了一到两个数量级的加速,取得了使人瞩目的成绩。