楼主: 图腾部落

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

[复制链接]
论坛徽章:
0
21#
发表于 2010-1-4 21:49 | 只看该作者
CUDA 并行运算,由OpenCl 组成。
OpenCL是一种全新计算应用程序接口,大家可称为API,它的全称是Open Compute Library(开放式计算语言),它让开发人员能够利用GPU内部巨大的并行计算动力。OpenCL的作用就是为通用计算领域提供一个跨平台的统一标准语言。
  OpenCL最早是由Apple公司提出,而KHRONOS Group通过协调各个厂商,从而使OpenCL的跨平台特性更加完善。简单的说,OpenCL是针对并行计算的API,它可以利用GPU进行并行计算方面的工作,OpenCL API是应用程序的编程接口,图形程序也有很多API,比如OpenGL和DirectX
 OpenCL是KHRONOS制定的多项开放标准中的并行计算和可视化的标准API。

使用道具 举报

回复
论坛徽章:
0
22#
发表于 2010-1-4 21:51 | 只看该作者
CUDA架构(Compute Unified Device Architecture统一计算设备架构),是NV口中的通用GPU(GPGPU)的正式名称。
NV面向专业开发者们发布了CUDA软件开发包(SDK)以及C语言编译器的0.8版本。
UDA开发环境目前支持Windows XP和Linux(Red Hat Enterprise Linux 4 Update 3)。
遗憾的是,目前CUDA仅支持32位系统,因此在进行运算时只能够兼容单精度数据。NV透露今年晚些时候推出的新款显卡将支持64位系统,兼容双精度数据。

使用道具 举报

回复
论坛徽章:
7
2012新春纪念徽章
日期:2012-01-04 11:56:01itpub13周年纪念徽章
日期:2014-10-08 15:16:50itpub13周年纪念徽章
日期:2014-10-08 15:16:50itpub13周年纪念徽章
日期:2014-10-08 15:16:50
23#
发表于 2010-1-4 21:53 | 只看该作者
CUDA是世界上第一个针对GPU的C语言开发环境,可以充分应用GeForce 8800 GPU 128(GTX版)或96(GTS版)个流处理单元强大的浮点运算能力,解决复杂的科学运算问题。该环境目前仅支持8800系列显卡,未来还将对NV后续发布的Quadro专业显卡提供支持。根据NVIDIA的测试,8800显卡在CUDA架构中的峰值运算能力可达520GFlops,因此如果构建SLI双卡系统,可以达到1TFlops(即每秒运算1万亿次)的强大运算能力。

使用道具 举报

回复
论坛徽章:
0
24#
发表于 2010-1-4 21:56 | 只看该作者
原帖由 renhuiying 于 2010-1-4 21:49 发表
CUDA 并行运算,由OpenCl 组成。
OpenCL是一种全新计算应用程序接口,大家可称为API,它的全称是Open Compute Library(开放式计算语言),它让开发人员能够利用GPU内部巨大的并行计算动力。OpenCL的作用就是为通用计算领域提供一个跨平台的统一标准语言。
  OpenCL最早是由Apple公司提出,而KHRONOS Group通过协调各个厂商,从而使OpenCL的跨平台特性更加完善。简单的说,OpenCL是针对并行计算的API,它可以利用GPU进行并行计算方面的工作,OpenCL API是应用程序的编程接口,图形程序也有很多API,比如OpenGL和DirectX
 OpenCL是KHRONOS制定的多项开放标准中的并行计算和可视化的标准API。



API和C语言在开发技术上有所不同,NVIDIA表示对原有OPENGL开发人员来说一定会喜欢OPENCL,因为其中有很多类似之处;同时,NVIDIA也表示,由于都是基于CUDA架构,所以OPENCL与CUDA C之间如果真需要迁移也是相对方便的(似乎没有太大必要,总之都是基于同样硬件架构的)。NVIDIA认为,目前对于并行计算而言,开发语言和API并不是太多,而是太少,未来DirectX11 Compute Shader同样是基于CUDA架构的。

使用道具 举报

回复
论坛徽章:
0
25#
发表于 2010-1-4 22:06 | 只看该作者
CUDA的诞生,可以说是NVIDIA为GPGPU或者说显卡参与并行运算行业定制的一个新标准。同时,目前CUDA也成为了同行业当中的一个领袖。CUDA能够更好的让GPU资源得到利用,而CUDA这个新的类似于API的接口正是NVIDIA为其量身定制的新标准。
对于软件开发者来说,他们可以通过CUDA这个接口使用C语言便可轻松实现对GPU资源的调用。这个新的标准将会在未来更多的被软件开发人员所利用,从而为用户带来越来越多的基于CUDA技术而开发的应用程序软件。这些软件将会覆盖到多媒体、航空航天、建筑、医学、科学计算等等众多的应用领域。今天,我们就从GPGPU开始谈起,看看CUDA是如何实现大规模的并行计算的。

使用道具 举报

回复
论坛徽章:
0
26#
发表于 2010-1-4 22:07 | 只看该作者
众所周之,CPU与GPU之间虽然各司其职,但是内部关系却非常紧密,在一个完整的PC平台当中二者缺一不可。CPU就好像一个全能型选手,虽然各个领域都能够应对,但是没有一个非常专长的项目;而GPU则不同,虽然在技术方面不如CPU那样全能,但是在单一领域当中却是技术出众。两者在整个PC系统当中,各有所长、取长补短。不过在原有的PC系统中,GPU往往仅仅担当了3D图形处理的任务,而其出色的并行处理能力在非3D图形处理情况下则完全浪费掉了。

    究其原因在于,CPU的微架构是按照兼顾“指令并行执行”和“数据并行运算”的思路而设计,就是要兼顾程序执行和数据运算的并行性、通用性以及它们的平衡性;而GPU的设计初衷则完全不同,GPU为了能够达到同类型数据的更快速的密集运算,因此往往被设计有更多的重复计算单元。这就决定了CPU和GPU的运算方式以及运算能力的差别,CPU更加适合复杂的数据运算,而GPU则更加适合大量简单的并行运算。

使用道具 举报

回复
论坛徽章:
0
27#
发表于 2010-1-4 22:10 | 只看该作者
使用CUDA C并不总是能够编译到最优的指令。如果确实必要,可以用PTX优化程序中最关键的步骤。

除此以外,还要灵活采用宏和模版,动态分配内存和显存以及动态划分数据等手段提高程序的通用性,并在处理不同规模、不同数据类型的问题时选用不同的优化策略。

在2010年将要推出的新处理器中,各种存储器的带宽和延迟会有一定的调整,大部分指令的吞吐量也会有非常显著的提升。随着GPU架构的进一步改进和编译器性能的不断提高,下一代GPU上的CUDA程序优化工作会变得更加简单。

使用道具 举报

回复
论坛徽章:
1
2011新春纪念徽章
日期:2011-02-18 11:42:48
28#
发表于 2010-1-4 22:12 | 只看该作者
GPU的处理核心架构
NVIDIA的Shader核心是由若干个材质处理单元(TPC)的群组所构成的。例如一个8800GTX,它内部就有8个群组,而8800GTS内部就有6个群组。事实上,每一个群组都是由1个材质处理单元和2个流多重处理器构成的。而处理器又由一个前端的读取/解码单元,一个指令发送单元,一个由八个计算单元组成的组,和2个SFU超级功能单元所组成,他们在处理指令方面都属于SIMD单指令多数据流。同样这类指令也适用于所有warp中的线程。NVIDIA这种并行模式叫做SIMT单指令多线程执行单元。需要指出的是,后端的操作,比前端操作要高出2倍的时钟周期。在实际中,部分执行指令有可能有2倍长。16路的SIMD,就只能相当于8路的处理效能。

流多重处理器在运作模式下,允许每个时钟周期内,在流水线的前端,让一个warp处在准备执行的状态。在一个warp中的32个线程中的应用指令,在流水线的后端,需要用4个时钟周期来处理。但是这种操作在流水线的前端,仅仅需要1/2的时钟周期就可以完成,从这一点来看,仅仅需要2个时钟周期,就可以完成操作

使用道具 举报

回复
论坛徽章:
184
2014年世界杯参赛球队: 俄罗斯
日期:2014-07-17 17:21:42懒羊羊
日期:2015-03-04 14:48:162015年新春福章
日期:2015-03-06 11:57:31慢羊羊
日期:2015-03-30 13:10:55美羊羊
日期:2015-03-30 13:10:55暖羊羊
日期:2015-03-30 13:10:55射手座
日期:2015-09-17 12:20:48ITPUB14周年纪念章
日期:2015-10-26 17:23:44秀才
日期:2016-02-18 09:24:30摩羯座
日期:2016-03-03 22:55:30
29#
发表于 2010-1-4 22:16 | 只看该作者
问题:CUDA进入中国都有2个年头,你对CUDA的架构是否了解?他有软件架构,有硬件架构,大家是怎么认识CUDA架构的。还是把CUDA作为类似X86一样的平台来认识呢?


回答:CUDA都这么久了?看来自己真是out了。作为一个软件开发人员,硬件架构理解较少,认识CUDA也是从软件层面上,有开发环境,有类库,API调用等等,就像以前的软件开发平台,至于在硬件上怎么实现的,管的少,能完成功能就OK了。在大量数据计算和并行处理上还是更看好CUDA,比较和CPU之间是各司其职,各有所长的。
突然想到了,用CUDA开发游戏是不是更好呢?

使用道具 举报

回复
论坛徽章:
0
30#
发表于 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号
  
快速回复 返回顶部 返回列表