POPPUR爱换

 找回密码
 注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

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

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

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

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

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


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

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

使用道具 举报

202#
发表于 2009-7-16 17:28 | 只看该作者
不要转换概念 用了gpgpu也不等于用了cuda

cuda其实就是一c的.h 头文件而已 
贵甲 发表于 2009-7-16 17:04


泪流满面...
回复

使用道具 举报

203#
发表于 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硬件,而是整个体系所形成的支持。
回复

使用道具 举报

204#
发表于 2009-7-16 18:06 | 只看该作者
203# 贵甲 就CUDA 环境而言,包括几部分,lib,include,CUDA tools其中包括编译器等内容,支持CUDA 的显卡驱动。基本四部分,缺一不可。
至于VC 或者一些项目模板,都没有什么意义。
回复

使用道具 举报

205#
发表于 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这项技术有什么特别的关联. 所以我对这个观点本身还是理解,中国话,博大精深啊!哈哈!
回复

使用道具 举报

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

使用道具 举报

207#
发表于 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。
回复

使用道具 举报

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

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

使用道具 举报

209#
发表于 2009-7-16 18:55 | 只看该作者
本帖最后由 weihua8206 于 2009-7-16 19:15 编辑
我是中立的,对标题我只赞成一半

很有道理,我了解的程序员都是很勤奋的


没错,这点我很赞成,使用CUDA C的程序是在VC下面挂CUDA的库来编写的,所以其本体是个能够将部分功能转移至GPU的VC程序。
从某种意义 ...
Mehus 发表于 2009-7-16 00:35


这位朋友很有想法,但很多方面显然不够专业。

首先,程序员的职业道德是使用最合适的工具去编写最高效的程序,并不是您所说的什么“勤奋”,倘若让一个人从天津去北京,他开上飞机围着地球倒转一圈才到达,那不叫勤奋,叫愚蠢。typedef本来就比查找替换更简便,“查找替换”是一种非常业余的做法,通常只有文员喜欢这样做。

其次:CUDA C是基于硬件的,使用起来难度较大,程序员必须熟悉GPU的硬件构造才能使用。一个兼容X86的浮点处理器对于程序员来说是透明的,直接输入“(fp32)fa*fb ”,编译时就会自动调用处理器去计算浮点数,而CUDA所谓的接口却需要调用抽象的硬件指令才能实现,这种难以维护的程序是广大程序员不愿意使用的,并不是因为他们“不勤奋”,而是出于职业道德:编写这样的代码,等于把自己的老板往火坑里推,不仅开发进度大受影响,BUG出现的可能也会大大增加,当竞争对手用2个月就能大规模升级软件的时候,你的老板却需要做个5年计划来重新开发下个版本的软件!这不是找着让自己公司破产么?
回复

使用道具 举报

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

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

使用道具 举报

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

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

使用道具 举报

212#
发表于 2009-7-16 19:14 | 只看该作者
不是的,我不太喜欢你说话的语气,我没有说这些语言只能运行在CUDA构架上,而是CUDA架构上支持这些语言“CUDA C,或者CUDA Fortran,CUDA C++,以及今后的CUDA JAVA等等”,也就是说CUDA专门为这些语言提供了开发支 ...
Mehus 发表于 2009-7-16 18:01


呵呵,请这位朋友注意,语言是软件层面的!只要投入精力去开发,任何架构的东西都可以用C++、JAVA之类的语言来封装并提供支持!而CUDA已经包含了软件层面的接口!用这个接口去二次开发做CUDA C,相当于一栋100层的高层建筑,从1到80楼只有楼梯,你修了个只能从80楼到100楼的电梯,这能改变从一楼上到100楼会累死人的现状么?

“豪华高层公寓,内有电梯”:看了这句广告词,估计业主都只有哭的份了
回复

使用道具 举报

213#
发表于 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的硬件层次和之前两代相似的话代码可能不需重写。
回复

使用道具 举报

214#
发表于 2009-7-16 19:29 | 只看该作者
CUDA C 编写的时候根本不存在所谓的调用抽象的硬件指令才能实现,它就是一个高级语言的扩展而已,使用 CUDA 完全不需要接触底层,只需要了解一些 CUDA 并行要素的层次即可,GPU 更新的时候,根本不需要重新编写代码也 ...
天魔 发表于 2009-7-16 19:05


请这位朋友不要用空洞的言语攻击说明问题,请举出实例证明:如何用CUDA计算下列传递函数的离散曲线?G(s)=exp^(-0.005s)*400/(s^2+50s);给出你的“完全不需要接触底层”的代码来让大家看看最有说服力。

不使用CUDA时只需要一行代码就实现,那么请您演示一下高超的编程技巧,体现CUDA的优越性吧
回复

使用道具 举报

215#
发表于 2009-7-16 19:37 | 只看该作者
G80和G200 在一些资料的介绍中他们的硬件层次结构比较相似,由8个SP组成一个SM(好像叫流式多核处理机),而G80/G9X的TPC纹理处理簇由2组SM组成,G200则是3组SM组成一个TPC。其中在编程中的一个BLOCK里面的线程是实际 ...
tyro 发表于 2009-7-16 19:29


G80和G200是存在严重缺陷的架构(对于GPGPU来说),其最多只能提供32位浮点数的支持,单这一点缺陷,就足以使其在图形以外的应用场合无人问津。
回复

使用道具 举报

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

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

使用道具 举报

217#
发表于 2009-7-16 19:48 | 只看该作者
CUDA  目前优化工作还是蛮难做的.
比如一个CUDA程式,即使在低端的8400 GS和在高端的Tesla C1060上面都能正确运行,但是优化效果却是不一样的.
在C1060中,可能程式要预先设置称非常多的BLOCK数量,这样才能获得较好的优化效果,但是相同程式和相同数量的BLOCK放到8400GS显卡上面,却不是最好的优化,因为8400GS的SM数量实在太少.
对于8400GS,或许BLOCK数量不应该太多(这意味着Thread宽度可能会增大)才能获得比较好的优化效果,但是对于C1060则是另外的情况.

这让程式有点不知所措.
回复

使用道具 举报

218#
发表于 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,既然你考了我一题,我也可以考你一下吧?
回复

使用道具 举报

219#
发表于 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以外的平台讨论对比,让“让”字清晰出来,最后请版主再来个总结帖
回复

使用道具 举报

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

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-27 19:23

Powered by Discuz! X3.4

© 2001-2017 POPPUR.

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