楼主: 图腾部落

CUDA第四期有奖讨论:谈谈你对CUDA的架构的理解(活动已结束)

[复制链接]
论坛徽章:
0
31#
发表于 2010-1-5 00:57 | 只看该作者
我这边是下午6点,顺便再白活一句,你们的活动我都很喜欢,学到这种麻烦的东西实在是缺乏动力,但你们的活动给我我很多动力,让我不断的搜索知识丰富自己,从一开始被各种不知所谓的规定搞晕,到现在已经对这些规定有了初步的了解,这为我以后的编程提供了很多的理论支持,不了解的东西怎么也入不了门 ,现在已经有跨进门槛的感觉

使用道具 举报

回复
招聘 : 产品经理/专员
论坛徽章:
54
生肖徽章2007版:牛
日期:2008-01-02 17:35:53生肖徽章2007版:马
日期:2009-10-28 11:52:42生肖徽章2007版:猴
日期:2009-10-08 08:51:35生肖徽章2007版:狗
日期:2009-10-05 22:46:56生肖徽章2007版:羊
日期:2009-09-22 19:45:03生肖徽章2007版:鼠
日期:2009-04-29 11:18:17生肖徽章2007版:鸡
日期:2009-03-10 21:30:15生肖徽章2007版:猪
日期:2009-03-10 21:17:25生肖徽章2007版:蛇
日期:2009-02-26 00:23:42生肖徽章2007版:兔
日期:2009-02-02 17:56:52
32#
发表于 2010-1-5 01:27 | 只看该作者
我觉得软件架构更有前景。

使用道具 举报

回复
论坛徽章:
0
33#
发表于 2010-1-5 08:03 | 只看该作者
非常同意,CUDA的感觉很原始,CUDA编程除了软件水平以外还要顾及硬件的操作,个人感觉这对程序员来说难度是比较高的,个人感觉而已,没有实际参加过软件开发 ,以后的版本肯定会降低复杂度,对各种缓存和寄存器的操作交给编好的代码,让程序员的精力更多放在软件方面,在并行计算的效率上应该会有所提高,现在的并行运算效率完全取决于程序员的水平,因为对硬件的操作太细,同样的程序不同的程序员编出来速度和效率也不一样,估计以后会推出一些统一的标准,或者直接调用的组件。这是我的一点设想,和梦想。。。别再这么麻烦了

使用道具 举报

回复
论坛徽章:
25
八级虎吧徽章
日期:2009-05-09 09:54:40参与2009年中国云计算大会纪念
日期:2009-06-05 10:02:28参与物流供应链俱乐部活动纪念
日期:2009-06-08 10:02:43生肖徽章2007版:猴
日期:2009-11-26 15:51:232010新春纪念徽章
日期:2010-01-04 08:33:082010新春纪念徽章
日期:2010-03-01 11:20:00
34#
发表于 2010-1-5 11:21 | 只看该作者
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)特性,大大提高应用效率。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

使用道具 举报

回复
论坛徽章:
13
35#
发表于 2010-1-5 11:23 | 只看该作者
CUDA所提供的最重要的创新在于,它使得工作在GPU上的线程可以协作解决问题。在线程间通讯实现以后,CUDA将允许应用程序更加高效的执行。由NV GPUs的支持,CUDA有一个直接在GPU上的并行计算缓存,它用于保存频繁使用的信息。在GPU上保存信息可以让计算线程即刻得到共享数据而不是去漫长的等待off-chip的DRAM上的数据。

    CUDA的特色如下,引自NVIDIA的官方说明:

   1. 为并行计算设计的统一硬件软件架构。
   2. 在GPU内部实现数据缓存和多线程管理。
   3. 在GPU上可以使用标准C语言进行编写。
   4. 标准离散FFT库和BLAS基本线性代数计算库。
   5. 一套CUDA计算驱动。
   6. 提供从CPU到GPU的加速数据上传性能。
   7. CUDA驱动可以和OpenGL DirectX驱动交互操作。
   8. 与SLI配合实现多硬件核心并行计算。
   9. 同时支持Linux和Windows。

使用道具 举报

回复
论坛徽章:
1
八级虎吧徽章
日期:2009-12-29 04:01:21
36#
发表于 2010-1-5 11:24 | 只看该作者
CUDA的运算

  目前的CUDA所用的运算方法是分开的,一部分由CPU负责,而另一部分通过CUDA编译器使用GPU进行运算。在CUDA的架构下,一个程序分为两个部份:host 端和device 端。Host 端是指在CPU 上执行的部份,而device 端则是在显示芯片上执行的部份。Device端的程序又称为 “kernel”。通常host端程序会将数据准备好后,复制到显卡的内存中,再由显示芯片执行device端程序,完成后再由host端程序将结果从显卡的内存中取回。


CUDA运行框架


由于显示芯片大量并行计算的特性,它处理一些问题的方式,和一般CPU是不同的。比如在内存存取latency 的问题上,CPU 通常使用cache 来减少存取主内存的次数,以避免内存latency 影响到执行效率,而显示芯片则多半没有cache(或很小),而利用并行化执行的方式来隐藏内存的latency(即,当第一个 thread 需要等待内存读取结果时,则开始执行第二个thread,依此类推),效率提高不少。正如 NVIDIA(英伟达)公司Tesla GPU计算事业部高级产品经理Sumit Gupta先生曾经推过一个形象的例子,CPU的顺序指令执行操作好比是一间办公室里的多个职员,如果每人需要将杯子里的水倒入同一个桶内时,他们需要排成长队按顺序进行。而对于GPU来说,这些职员无需排队,只要同时走到桶前将水倒入即可。所以,最适合利用CUDA处理的问题,是可以大量并行化的问题,才能有效隐藏内存的latency,并有效利用显示芯片上的大量执行单元。使用CUDA 时,同时有上千个thread在执行是很正常的。因此,如果不能大量并行化的问题,使用CUDA就没办法达到最好的效率了。


GPU并行计算过程


在目前支持CUDA的GPU中,其流处理器个数是不能和CPU现在拥有的内核数量作类比的。CPU的每一个核心都是一个完整的独立处理架构,而GPU中的每个流处理器并不完全是这样,而是以子组合方式运作,比如每8个流处理器组成一个Stream Multiprocessors (SM),其中分为四个流处理器又分为1小组,也可以看成是有两组4D的SIMD处理器。需要说明的是,若用户拥有超过两张或以上支持CUDA的显卡,驱动程序将通过PCIe总线自动分配工作负载,进一步提升效能。

  当然CUDA也有其弱势的地方,并不是所有的事情CUDA都能够很好地解决,比如像操作系统这样复杂的指令和纷繁的分支循环而又用很少的线程来处理,这显然就不是CUDA的强项了。高度并行的计算是CUDA的技术特性之一。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

使用道具 举报

回复
论坛徽章:
1
37#
发表于 2010-1-5 11:27 | 只看该作者
哪些GPU支持CUDA?

  在推出GeForce GTX 200系列前,CUDA短短两年时间就已经发展了四个版本:


目前,NVIDIA(英伟达)推出的GPU中,G80系列支持CUDA 1.0,而之后推出的G84、G86、G92、G94和G96 则支持CUDA 1.1。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

使用道具 举报

回复
论坛徽章:
1
八级虎吧徽章
日期:2010-01-01 06:01:20
38#
发表于 2010-1-5 11:28 | 只看该作者
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已经应用在很多领域,包括在通用计算中的一些GPU加速,游戏中的物理模拟等等,而在科学计算中,CUDA可发挥的功效就更大了。比如有限元的计算、神经元的研究计算、地质分析等等科学研究的领域;当然目前GPU计算的应用还是处于一个早期的阶段,大部分CUDA应用都是专业人员和相关的程序员在开发,随着CUDA的广泛推行,以后会有实际的基于CUDA的程序,更多的程序员能够加入进来,并且开发一些可以给大家日常应用带来好处的程序,只要有支持CUDA的GPU就能够利用到GPU计算的好处。

使用道具 举报

回复
论坛徽章:
1
八级虎吧徽章
日期:2010-01-01 06:01:19
39#
发表于 2010-1-5 11:32 | 只看该作者
先进的技术远不如一个火爆的商业概念吸引人,火爆的商业概念还没有被中国炒作时,国人开始担心是不是又落后了。先进技术与应用技术不同,先进技术的突破需要天才,不是钱所能堆出来的,也不可能炒作出来。互联网未来技术实质上是下一代计算机技术,谁能提出下一代计算机技术方案,谁将占领互联网未来技术的制高点。
        现在美国热炒的主要有两大技术,一是“云计算”,二是 CUDA。“云计算”被炒作为互联网未来的制高点,CUDA被炒作为计算机新的体系结构。然而炒作的概念并不为业界认同,大老美的其他公司也不认同。
     “云计算”并不是互联网未来的制高点,在CPU硅芯片的前提下,下一代计算机技术的核心是基于0、1码的高端算法,美国人从不嚷嚷,早就投入巨资研发,花的钱就不说了,时间也搭进去几十年,可惜智商不够,毕竟文化底蕴太浅。也是没辙,IBM提出了“Cloud computing”的云计算概念,算是知道了高端算法的概念,但门还没摸着,二进制的云计算玩概念,充其量还是赚取眼球的商业炒作。
        同样基于二进制,Nvidia着力渲染的Compute Unified Device Architecture简称 CUDA技术,宣称可以让GPU计算性能达到4核CPU的100倍,使用NVIDIA GPU就可以向解决复杂密集型运算挑战。Nvidia认为通过CUDA技术,让GPU逐渐进入通用计算领域,从而在未来和CPU形成分庭抗礼之势。看来老美还不傻,知道下一代计算机的突破是在算法,从CUDA技术分析,Nvidia是摸到了高端算法的一点点门,钱也没白花,但也仅是皮毛而已。
二十一世纪初,一个中国疯子取得了基于0、1码的六十四进制算法发明专利,抢占了下一代计算机技术的制高点,其体系结构中的矩阵门、数学模型、算法、数据流时空分布、自主逻辑、六维阵列、倍频等等让云计算、CUDA望尘莫及,一些全新的数学概念自认为是CPU鼻祖的老美还没听说过,真急得抓耳挠腮。更让老美垂头丧气的是六十四进制算法可以与CPU相同皆采用业界普及的C语言,因此为六十四进制算法编写程序并不困难,如加一个编译器与二进制编程完全一样。如果说CUDA可令GPU同一时间处理逾1,000个以上的线程,六十四进制算法则可令CPU同一时间处理逾1,000个以上的6次方线程。如果说二进制算法是人类的共同发明,六十四进制算法却是中国个人惊世骇俗的又一伟大发明,彰显了中华民族博大精深的文化底蕴。六十四进制算法已经开始在我国智能领域应用,显示出二进制所无法比拟的强大优势,二进制无法突破的问题,在六十四进制面前轻而易举就解决了。如果用六十四进制算法重新设计的CPU、操作系统、数据库一旦问世,智能计算机时代就到来了,到那时,小心遇到的漂亮mm可能是个机器人。
       借用洪秀全的一句诗告慰中华民族的父老乡亲“一统江山图已到,胞们宽心任逍遥。”

使用道具 举报

回复
论坛徽章:
304
山治
日期:2017-03-02 08:50:07ITPUB十周年纪念徽章
日期:2011-11-03 15:15:25ITPUB十周年纪念徽章
日期:2011-11-03 15:14:55ITPUB十周年纪念徽章
日期:2011-11-03 15:09:35ITPUB十周年纪念徽章
日期:2011-11-03 14:01:59ITPUB十周年纪念徽章
日期:2011-11-03 15:07:35ITPUB十周年纪念徽章
日期:2011-11-03 14:24:42ITPUB十周年纪念徽章
日期:2011-11-03 14:23:57ITPUB十周年纪念徽章
日期:2011-11-03 14:22:38ITPUB十周年纪念徽章
日期:2011-11-03 14:21:34
40#
发表于 2010-1-5 11:50 | 只看该作者
原帖由 chris1244 于 2010-1-5 00:47 发表
看到贴子有点晚,一上来就被各位大大的复制内容搞晕了,于是自己在网上找了下资料,算是找到一篇自己易于理解的,现在说说我的理解,关于CUDA的所有内容都充满了专业用词,这可能是因为CUDA资料被翻译过来时间不长,不少用语都是直译,所以在中文意义上让人难以理解,作为一个在海外读书的学生,本来中文就已经退化了,于是就想把这些复杂的说明转变得简化易懂,不然自己以后看的时候一样找不到语义,跟没看过一样
不好意思闲话太多,进入正题,根据资料上的描述,我的理解是CUDA架构本身并不是一种开发语言,仅仅是一种开发的平台,开发语言其实是C语言,CUDA架构能力上的飞越就是,可以在这个架构中,用编程语句直接控制GPU也就是显卡运算核心工作,以前想要利用GPU的能力必须依靠麻烦的方式(图形API)。  
编程语言是C,但有很多额外的限制,所以只懂C语言是远远不够的。因为CUDA编程是控制CPU和GPU联合工作,所以编程的时候代码就被分为两大类,一类控制CPU(宿主代码),一类控制GPU(设备代码),其原理不同,能够访问的资源不同,像CPU可以直接访问内存,GPU可以直接访问自己的各种缓存,寄存器,所以编起程序来要顾及的很多,在控制GPU的代码部分就连建立个整数的指令都会不同,所以说只懂C语言是不够的,要把CUDA编程的各种规定吃透,这个我还在努力
从CUDA体系结构的组成来说,包含了三个部分:开发库、运行期环境和驱动。
这3个词怎么看也是看不出什么含义,往后看才知道,所谓开发库就是帮助开发的一大堆辅助程序,开发时用到一些程序就不用自己写了,CUDA的能力优势是大批量计算,所以开发库里目前都是数学运算程序,直接调用把数代进去,就像是做好的计算器,像X的Y次方乘以Z的开根号(只是个例子,表当真 )这种东西不需要自己再造个程序来计算。
运行期环境。。。很复杂深奥的词语,其实就是翻译的时候把原词摆上来了,它的作用就是上面说的各种类型转换,内存管理,执行调度,设备访问之类的麻烦东西,就是支持你用这些东西编程的一堆数据,说的有点土
代码有两种(宿主代码,设备代码),对应的运行期组件有三种,公共组件、宿主组件和设备组件,为什么多一种呢?CPU和GPU怎么合作啊?肯定有共用的组件,要交换信息才能合作啊,像是扯根电话线,或者QQ视频聊天。。。有点扯远了,所以公共组件是他们俩都能访问的组件。总之比C语言麻烦的都在这儿了,想用CUDA编程?先来吃透了这里面的规矩!你想算个1+2+到100?先搞清楚该加的数放在哪,GPU算的时候在哪取,取的时候用什么装。。。。一个字,头疼
至于驱动就不用说了吧?我老爸都知道,新买个打印机要装驱动 ,就是直接控制硬件的一些程序,把你的要求反映给设备。你说我要打印这张纸,他就把你说的翻译过去,让机器听懂,机器就给你打印了

下面把我找到的资料也发上来,对于不想听我白活的还是直接看资料吧,我知道有些人跟我不同,喜欢满是专业用词的感觉,只有这样才能看懂
资料在下面

CUDA(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产品
资料在上面

总结的不错啊!只不过这些资料早看过了。有没有新的啊?

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表