POPPUR爱换

 找回密码
 注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

搜索
楼主: Elvis
打印 上一主题 下一主题

您认为CUDA技术最终能让我们电脑发展走向GPGPU计算时代吗?[NVIDIA达人挑选赛]

[复制链接]
头像被屏蔽
81#
发表于 2009-7-16 12:43 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

82#
发表于 2009-7-16 15:55 | 只看该作者
本帖最后由 Mehus 于 2009-7-16 16:02 编辑
额,首先我不知道typedef和程式员的勤奋有什么联系.
区别几个概念性问题.
CUDA C,DX11不是一门语言.
DX11,OpenCL是不可能 运行在CUDA 架构上面的.

VC不是语言,只是一个IDE....
玉清 发表于 2009-7-16 11:38


这是NV发布支持OpenCL时的资料图片,连带的两段话是复制过来的,不是我写的
下面这张图也许是在此次OPENCL发布后较为常见的一个,不过其中意义大家不一定能够完全领会,我们在这里做一个说明。这是一张能够解释大家对OPENCL与CUDA关系疑问的重要“结构”图。NVIDIA第一次明确了两个重要名词“CUDA架构”与“CUDA C语言”。在以往理解中,我们常默认CUDA就是指基于NVIDIA GPU或并行处理器的编译器、C语言、库和相关软件开发环境;而硬件方面,则是指所有支持CUDA的GPU。今天,NVIDIA明确了包括硬件支持和软件环境一起,我们称之为CUDA架构,而常用的基于C语言的开发环境则是CUDA C,或者CUDA Fortran,CUDA C++,以及今后的CUDA JAVA等等。而OPENCL,也与之并列。


实际上CUDA C语言是一种C语言的扩展,这扩展的一部分主要是进行并行运算编程的方面,这些是通过C的扩展来获得的。基本上认为CUDA的程序也是一种标准的C语言的程序,然后使用一些关键字然后来对并行这方面计算,最后做一些区分。CUDA C语言最终编译会成为PTX的代码,然后在GPU上执行。OpenCL是一个API,就是应用程序的编程接口,OpenCL和OpenGL很像,这种API可以调用API最底层的数据,通过程序开发调用各种各样的函数,实现各种各样的功能。对于API来说一般它对硬件设备有比较完整的访问权,以访问硬件的设备,可以对内存进行管理,这是由开发人员通过编程来做的这些事情。最后OpenCL通过编译、通过驱动程序可以生成PTX代码在GPU上进行执行。


VC是语言还是IDE,就有点钻牛角尖了,对于标题内容不重要
回复

使用道具 举报

83#
发表于 2009-7-16 17:04 | 只看该作者
我只是请教...提问...请注意 后面的那个问号......

对方辩友称“CS4  使用用 OPENGL 做加速的,没用上CUDA。”

所以我请教 是否采用了GPGPU技术.
玉清 发表于 2009-7-15 23:14


不要转换概念 用了gpgpu也不等于用了cuda

cuda其实就是一c的.h 头文件而已 
回复

使用道具 举报

84#
发表于 2009-7-16 18:01 | 只看该作者
本帖最后由 Mehus 于 2009-7-16 18:17 编辑
恕我眼拙,我没有看到这段文字的任何一个地方写着DX11 CS和OpenCL是运行在CUDA架构之上.
那幅图片显示着:第一层是CUDA,第二层是C,C++,DX11,OpenCL,Fortan..................第三层 显示的是应用程式.
难 ...
玉清 发表于 2009-7-16 16:38

不是的,我不太喜欢你说话的语气,我没有说这些语言只能运行在CUDA构架上,而是CUDA架构上支持这些语言“CUDA C,或者CUDA Fortran,CUDA C++,以及今后的CUDA JAVA等等”,也就是说CUDA专门为这些语言提供了开发支持,使得它们能够在CUDA构架上运行,这应该很好理解吧。构架——不是狭义的CUDA C 或者GPU硬件,而是整个体系所形成的支持。
回复

使用道具 举报

85#
发表于 2009-7-16 18:08 | 只看该作者
本帖最后由 kaa 于 2009-7-16 18:11 编辑

1# Elvis

您认为CUDA技术最终能让我们电脑发展走向GPGPU计算时代吗?  
名词解释:
CUDA(Compute Unified Device Architecture,计算统一设备架构
GPGPU(General Purpose Graphic Process Unit),所以GPGPU也被称为通用图形处理器或通用GPU。GPGPU其实就是具备通用计算能力的GPU, 无论是AMD的Stream Processor还是NV的CUDA,以及将来INTEL 的Larrabee都属于这个范畴.

为什么会出现GPU,GPU比CPU有什么特点呢?
1.CPU的浮点运算能力严重不足
2.GPU的输入/输出带宽远超CPU
这些特点都奠定了GPU在通用科学计算上的优势,随着NV的CUDA技术推出,GPGPU时代已经来临.
将来无论是哪个厂商的GPU占上风,毫无疑问GPU作为通用科学与工程计算的协处理器已经成为一种趋势.并且势不可挡.
不过这个论题有些歧义,GPGPU的诞生毫无悬念,但是GPGPU可不能完全取代CPU.我个人观点还是术业有专攻. 而且GPGPU计算时代也和CUDA这项技术有什么特别的关联. 所以我对这个观点本身还是理解,中国话,博大精深啊!哈哈!
回复

使用道具 举报

86#
发表于 2009-7-16 18:27 | 只看该作者
207# kaa
所以看出坛子的老大出题是很有艺术的,“您认为CUDA技术最终能让我们电脑发展走向GPGPU计算时代吗?”,“CUDA技术”是一个体系又包含应用,如果在技术枝节上都开始辩论,会论很多出来,“让”字是一个模糊的动词,是“领导”、“引导”或是“助力”都可以,到底是在哪个层次,也值得讨论。
我还是中立的观点:CUDA技术打开了并行计算推广的大门,通用并行计算技术的整合让我们电脑发展走向GPGPU计算时代,好像倾向于正方。
回复

使用道具 举报

87#
发表于 2009-7-16 18:41 | 只看该作者
本帖最后由 天魔 于 2009-7-16 18:42 编辑

这里的问题提的是CUDA能否最终能让我们的电脑发展走向GPGPU计算时代,首先要看看能与CUDA相提并论的东西有哪些,就CUDA本身而言,是一个非常大的概念,包括了硬件和软件两部分。

如此看来,能与CUDA同等级的东西实际上是AMD Stream和Intel的Larrabee Native,而不是OpenCL或者Compute Shader这两个低阶的API。

就这三者而言,CUDA有以下的优势和不足:

优势:

1、硬件实物在06年发布距今已经是两年半,软件支持方案在07年年初发布,距今有两年的时间,具有时间上众所公认的优势。

2、相对AMD Stream来说,CUDA的软件工具、文档要比Stream更强大、更丰富、更清晰明了,Stream发布至今其实也有一年时间,但是应用软件和业界研究成果方面就相距甚远,Brook+编译器也是最近才提供了Local Data Store的支持。

3、Intel Larrabee目前其实在ISV方面还没有实际的硬件提供,实际运行的效果外界根本无法得知,唯一明了的是Ct由于有 Intel 提供的各种基本功能库,所以在使用上比白手写CUDA C更容易,加上Larrabee本身其实是一个真正的x86多核处理器,对LRBni的并行化支持,可以透过编译器得以解决一部分问题,所以Larrabee应该是在前期软件支持力度上比目前的CUDA更好,问题是Larrabee的实际规格我们目前无法得知,估计连Intel自己都还没最终拍板,简单地说就是不尽现实,还没出来的东西总是最好的。

5、NVIDIA对CUDA有比较明确的roadmap,对开发人员来说是一定的保证,不至于出现CTM那样半途而废的问题,而且可以了解到大致的工具软件更新进度。

CUDA目前存在的不足:
1、硬件方面受制于TSMC制程以及内存技术,目前的产品未能充分发挥GPGPU的理论性能,Thread Block之间无法实现片上数据共享,而在Larrabee上是没有这个问题的。
2、目前虽然已经有工具可以直接把CPU代码编译为CUDA代码,但是性能方面应该是不怎么样,当然这个问题在Intel Larrabee Native上也是一样存在。

在某种角度上而言,CUDA已经让我们踏入GPGPU计算时代,但是CUDA能否在后续的竞争中大获全胜就是另一回事情,这取决于英特尔在GPU上的成熟度和持久力,而不是微软,因为CUDA完全不是Compute Shader、OpenCL级别上的概念,能真正撼动CUDA地位的只有Intel Larrabee。
回复

使用道具 举报

88#
发表于 2009-7-16 18:54 | 只看该作者
CUDA 可以说是化简了GPGPU 编程模型,之前的GPGPU编程的是依靠用户比较有技巧地用3D函数来做通用计算,要求编程者有较好的3D编程能力,而CUDA可以说是屏蔽了低层的操作,让开发人员不需要了解太多3D方面的技术和编程规范,降低了难度。现在CUDA编程只是C语言的小小扩展而已(超集),而且将来还应该有C++等等面向对象编程的版本。

依CUDA是C语言扩展来说,编程难度对于熟悉C语言的人来说的确不大,其中最大的难度就是性能的优化。
回复

使用道具 举报

89#
发表于 2009-7-16 19:05 | 只看该作者
CUDA C 编写的时候根本不存在所谓的调用抽象的硬件指令才能实现,它就是一个高级语言的扩展而已,使用 CUDA 完全不需要接触底层,只需要了解一些 CUDA 并行要素的层次即可,GPU 更新的时候,根本不需要重新编写代码也能直接编译运行,当然它也和CPU一样,在新的指令扩展出来后,透过编译器开关实现对新扩展的支持,例如 Intel 的编译器提供的 Qx 开关,在 CUDA C 编译器上也提供了诸如 -arch 的类似开关。

楼上对编程的了解可以说是张冠李戴,大量论点是完全错误套用。
回复

使用道具 举报

90#
发表于 2009-7-16 19:09 | 只看该作者
211# weihua8206

代码在GF8X,GF9X,GF2XX不用重新写过,不过GT300就不知道了,我想GT300应该加入新特性,但是也向下兼容吧
回复

使用道具 举报

91#
发表于 2009-7-16 19:29 | 只看该作者
G80和G200 在一些资料的介绍中他们的硬件层次结构比较相似,由8个SP组成一个SM(好像叫流式多核处理机),而G80/G9X的TPC纹理处理簇由2组SM组成,G200则是3组SM组成一个TPC。其中在编程中的一个BLOCK里面的线程是实际由硬件派分到一个SM中实现,一个BLOCK中的线程可以协作,而且可以共享 share memory。一个SP是实际执行一个线程的基本单元。里面实际的具体线程的怎样组织由硬件调度。一般的并行问题可以分成多个块(BLOCK),而每个块中可以执行多个线程。他们的组织可以是1,2,3维的。  如果GT300的硬件层次和之前两代相似的话代码可能不需重写。
回复

使用道具 举报

92#
发表于 2009-7-16 19:41 | 只看该作者
216# weihua8206

关注CUDA方面没多久,还没写过CUDA代码不好意思!  上面的函数可能可以用泰勒展开式分解(可能有其他分解方法收敛得更快),然后用每个线程计算每个分解式,然后求和。这个函数的计算密度不大,这样的效率可能不高,
回复

使用道具 举报

93#
发表于 2009-7-16 19:50 | 只看该作者
本帖最后由 天魔 于 2009-7-16 19:57 编辑

我不清楚你说的什么不使用 CUDA 只需要一行代码是啥意思,如果仅仅是指表达式我在 CUDA 上就是这样的:

  1.      exp(-0.005 * s) * 400 / (s * s + 50 * s)
复制代码


只要你有很多 s 要跑,这个算式就能在 CUDA 上实现高度的并行。

btw,既然你考了我一题,我也可以考你一下吧?
回复

使用道具 举报

94#
发表于 2009-7-16 19:51 | 只看该作者
本帖最后由 Mehus 于 2009-7-16 20:05 编辑
呵呵,请这位朋友注意,语言是软件层面的!只要投入精力去开发,任何架构的东西都可以用C++、JAVA之类的语言来封装并提供支持!而CUDA已经包含了软件层面的接口!用这个接口去二次开发做CUDA C,相当于一栋100层 ...
weihua8206 发表于 2009-7-16 19:14

你的比喻很有意思,所以我也觉得CUDA 应该提高他的易用性,我在前面的帖子已经提到了这点,这篇帖子也应该将“让”字的层次清晰出来,应该在相关的技术、平台上多做一些对比。CUDA技术是“领导”“引导”还是“助力”GPGPU时代,需要从技术构架甚至是枝节上去做对比,但各平台有长有短,我还是发在208楼的观点,继续中立...

我确实不是计算机专业的,所以希望正反方都能够更加深入的交换意见(不要太尖刻,大家都可以学习),最好能扩展到CUDA以外的平台讨论对比,让“让”字清晰出来,最后请版主再来个总结帖
回复

使用道具 举报

95#
发表于 2009-7-16 19:51 | 只看该作者
214# weihua8206

CUDA的一些资料也说了一些在矩阵运算方面的算法,这些计算模型的密度比较大可以体现到轻量级线程运算的优势,矩阵的线性运每个矩阵元素可以由一个线程实现。还有矩阵变换,和矩阵乘法等等。例如在图像处理方面在空间领的算法 就相当于对一个巨大矩阵的运算,以往由CPU串行每个空间域逐次处理,如果用GPU就可以平行执行,达到提升速度。
回复

使用道具 举报

96#
发表于 2009-7-16 19:56 | 只看该作者
220# 天魔


上述函数涉及到到超越函数运算,NV的GPU中每个SM好像有8个标量单元和两个超越函数运算,可能可以用硬件加速。也可以通用软件实现,就把超越函数通过变换成为有限次的4则运算,由乘法单元和加法单元实现。
回复

使用道具 举报

97#
发表于 2009-7-16 20:20 | 只看该作者
本帖最后由 天魔 于 2009-7-16 20:22 编辑

这不重要,那基本上是编译器如何使用SP和SFU的问题
回复

使用道具 举报

4DCGDEMO 该用户已被删除
98#
发表于 2009-7-16 21:33 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

99#
发表于 2009-7-16 21:55 | 只看该作者
CUDA 是NV 一个抛砖引玉的“概念”,一个并行化的编程模型(软/硬件),在一些计算密度极高的编程问题时可以发挥出极大的优势,例如设计到矩阵方面的运算,将一个大问题分解成N个相互独立的子问题,分别解决,如矩阵的 ...
tyro 发表于 2009-7-8 17:43


就像前面的XD说的Delphi一样,NV要维护起一个庞大的算法模型库,做到通用计算领域的4GL才有可能真正拥有话语权,但就是Delphi也...........这是一个相对高利润的领域,也是一个高投入的领域,作为通用计算,通用这二字就决定了开发效率是第一位的.
回复

使用道具 举报

100#
发表于 2009-7-17 13:36 | 只看该作者
G80和G200是存在严重缺陷的架构(对于GPGPU来说),其最多只能提供32位浮点数的支持,单这一点缺陷,就足以使其在图形以外的应用场合无人问津。
weihua8206 发表于 2009-7-16 19:37


你还是再看看CUDA的文档再说吧:

http://developer.download.nvidia ... mming_Guide_2.0.pdf

A.1.4 Specifications for Compute Capability 1.3
Support for double-precision floating-point numbers.

基于GT200或者说Tesla 10系列的NVIDIA 产品以及 AMD RV670、RV770、RV740都提供了对应IEEE 754标准的硬件双精度运算能力。
回复

使用道具 举报

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

本版积分规则

广告投放或合作|网站地图|处罚通告|

GMT+8, 2024-4-29 02:04

Powered by Discuz! X3.4

© 2001-2017 POPPUR.

快速回复 返回顶部 返回列表