POPPUR爱换

 找回密码
 注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

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

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

[复制链接]
Christ2002 该用户已被删除
141#
发表于 2009-7-9 10:17 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

142#
发表于 2009-7-9 10:51 | 只看该作者
阁下在说反话么?CUDA编程难度远远高于x86!
weihua8206 发表于 2009-7-9 07:51


CUDA编程难度起码比GeForce 6/7时代的GPGPU低吧.

这位仁兄的这句话的意思是否定全部的GPGPU了?
回复

使用道具 举报

143#
发表于 2009-7-9 10:53 | 只看该作者
反观CUDA,其架构最多支持32位浮点数(请注意,并不是说GPU是32位的),这个精度远远不够。
weihua8206 发表于 2009-7-9 08:02


从CUDA 1.2版本开始已经支持了double ,不过性能很低.

之前我已经说过:

目前CUDA的环境来说,只有GT200芯片才能支持double数据类型,其他所有芯片G9X和G8X系列都不支持double数据类型,仍然在32 位,这对一些高精度的数据类型来说是一个很糟糕的事情,而且GT200芯片对于double的运算性能非常差(64bit运算单元在每个SM中只有一个,因此运算速度只有32bit数据的八分之一到十二分之一左右.),不过NVIDIA已经在GT300中大幅加强了双精度的计算性能.
回复

使用道具 举报

144#
发表于 2009-7-9 12:35 | 只看该作者
本帖最后由 weihua8206 于 2009-7-9 12:38 编辑
从CUDA 1.2版本开始已经支持了double ,不过性能很低.

之前我已经说过:


玉清 发表于 2009-7-9 10:53


。。。。这个,对方辩友,既然这个double性能很低(我没试验过,不敢妄言有多低,不过用起来已经比不上直接用CPU了吧?),那么它又有什么用呢?而且由于硬件局限,想提高其性能并不是继续升级就能做到的。
回复

使用道具 举报

145#
发表于 2009-7-9 12:45 | 只看该作者
目前CUDA的环境来说,只有GT200芯片才能支持double数据类型,其他所有芯片G9X和G8X系列都不支持double数据类型,仍然在32 位,这对一些高精度的数据类型来说是一个很糟糕的事情,而且GT200芯片对于double的运算性能非常差(64bit运算单元在每个SM中只有一个,因此运算速度只有32bit数据的八分之一到十二分之一左右.),不过NVIDIA已经在GT300中大幅加强了双精度的计算性能.
玉清 发表于 2009-7-9 10:53


在精密运算中,long double也已经广泛应用(CPU灵活的指令架构可以很方便的调用多个逻辑单元来实现长浮点型),按cuda的架构,岂不是只有128位的GPU才能支持这种数据类型?128位的GPU可不是一两代的升级就能做出来的。
回复

使用道具 举报

146#
发表于 2009-7-9 12:54 | 只看该作者
CUDA目前的缺陷不足以成为否定其存在意义的理由,但CUDA能存在多久,还得看CUDA能否弥补、克服这些缺陷。不管怎样,CUDA在它所走的路上,目前是绝对领先的,LRB也许出来以后会远超CUDA架构的GPGPU,但就在目前这个阶段,还没出来。

不过,作为一个外行,我对LRB出来后NV的GPGPU,挺悲观的~~~~~~
回复

使用道具 举报

147#
发表于 2009-7-9 12:58 | 只看该作者
LRB面世后,NV的GPGPU的市场状况恐怕还得看LRB做得如何,如果LRB像Intel宣称的那样,有着足够的显示性能和超强的通用计算能力,以及合适的价格,NV还真是会挺难的。
回复

使用道具 举报

148#
发表于 2009-7-9 13:00 | 只看该作者
另外,CUDA的编程环境,也许还比不了X86的,但比起以前已经有了巨大进步了吧。
回复

使用道具 举报

149#
发表于 2009-7-9 15:42 | 只看该作者
与其辩论现阶段具体技术能够为我们提供怎样的未来,还不如对比一下几样最基础的东西吧。
一是体积。单单从cpu来说,近的能够想到的是486的四四方方那一块,如今的cpu只需要婴儿指甲盖般的体积就能实现功能类似性能强数百倍。
二是功能。不是是否还有人记得,电脑上看vcd需要一种叫做“影霸卡”的东西才能流畅,随着技术的进步,现在的显卡已经具备多种硬解码的能力了。
以上两种都是最简单的例子,在我看来,我们现在的主板、南北桥、声卡、显卡这些区分称呼的名词,都将变成一块芯片的功能延伸,你看苹果的mini mac也就一个光驱大小。
现在眼前被我们称之为机箱的东西,今后会变得更小,更强,基本上一块芯片解决问题
其实看看现在的cpu/gpu他们的内部,也是这样的趋势,划分越来越多,功能越来越延展
由于芯片所支持的指令集越来越丰富,差异将由软件来体现
电脑走向并不是简单的gpgpu计算时代,而是xpu时代。
回复

使用道具 举报

150#
发表于 2009-7-9 15:47 | 只看该作者
电脑发展走向一是嵌入,融入生活中的每个细节
二是专门的高端运算
而不是让普通电脑来干什么大事
回复

使用道具 举报

151#
发表于 2009-7-9 16:06 | 只看该作者
与其辩论现阶段具体技术能够为我们提供怎样的未来,还不如对比一下几样最基础的东西吧。
一是体积。单单从cpu来说,近的能够想到的是486的四四方方那一块,如今的cpu只需要婴儿指甲盖般的体积就能实现功能类似性能强 ...
vvisher 发表于 2009-7-9 15:42


这位朋友应该是选错阵营了,呵呵。论XPU时代的话,AMD和英特尔都有能力让CPU集成上GPU,而英伟达的CUDA对CPU的兼容性为零。如果XPu时代是未来发展方向的话,那么CUDA就没有什么未来可言了
回复

使用道具 举报

152#
发表于 2009-7-9 16:24 | 只看该作者
这位朋友应该是选错阵营了,呵呵。论XPU时代的话,AMD和英特尔都有能力让CPU集成上GPU,而英伟达的CUDA对CPU的兼容性为零。如果XPu时代是未来发展方向的话,那么CUDA就没有什么未来可言了
weihua8206 发表于 2009-7-9 16:06

大概我点错了
回复

使用道具 举报

153#
发表于 2009-7-9 16:51 | 只看该作者
。。。。这个,对方辩友,既然这个double性能很低(我没试验过,不敢妄言有多低,不过用起来已经比不上直接用CPU了吧?),那么它又有什么用呢?而且由于硬件局限,想提高其性能并不是继续升级就能做到的。
weihua8206 发表于 2009-7-9 12:35


但是毫无疑问 CUDA是在进步过程中的,而且已经明显走到了GPGPU领域的前列.
一个新事物的出现,总是不能做到什么都齐全的.
CUDA毕竟是刚刚出现的东西,而不能要求太多了.
从CUDA规范1.x进步到2.x信息很多人都能看到变化是巨大的.

毕竟GPGPU这属于新兴的学科.
回复

使用道具 举报

154#
发表于 2009-7-9 19:49 | 只看该作者
154# 玉清
GPGPU 大致是从00年有人提,03年有初步的设想和原型,最初是Stanford 的Brook 和ATI 的CTM 配合,形成完整的产品,目前nVidia 的首席科学家,Bill Dally 曾经就是Brook 的支持者,当然现在他会说Brook 如何如何不如CUDA。
CUDA 暂时是领先的,不过CUDA 是没有能力让GPGPU 成为重要的计算力量的,保持现有代码的兼容性,将给未来的CUDA 有越来越多的负担,这是为什么nVidia 投入了这么多钱给开发商,成功还非常有限的主要原因。
回复

使用道具 举报

155#
发表于 2009-7-9 21:05 | 只看该作者
140# arnew

32位 和 64 位 等等只系硬件的数据表示, 在高级语言上(软件层)可以实现128位甚至更高位的数据类型,譬如mathlab,mathmaticas 等数学软件的编程上。
回复

使用道具 举报

156#
发表于 2009-7-9 21:14 | 只看该作者
140# arnew  

32位 和 64 位 等等只系硬件的数据表示, 在高级语言上(软件层)可以实现128位甚至更高位的数据类型,譬如mathlab,mathmaticas 等数学软件的编程上。
tyro 发表于 2009-7-9 21:05


对于CUDA来说,通过软件层实现会有比较大性能损失.
回复

使用道具 举报

157#
发表于 2009-7-9 21:17 | 只看该作者
157# 玉清

没错,是有损失, 就像你用高级语言写的程序 执行效率没有 汇编写的这么高,
回复

使用道具 举报

158#
发表于 2009-7-9 21:18 | 只看该作者
编程难度和 执行效率之间有个比较微妙的权衡。
回复

使用道具 举报

159#
发表于 2009-7-9 21:27 | 只看该作者
157# 玉清  

没错,是有损失, 就像你用高级语言写的程序 执行效率没有 汇编写的这么高,
tyro 发表于 2009-7-9 21:17


用软件层实现的话,恐怕性能损失很多时候是比较明显的.

CUDA并不适合具有复杂的数据结构和预测分支很多的程式.

关于分支预测:

NVIDIA的SM没有预测执行机制(分支预测单元(BranchPredicator))。这是与CPU一个重大区别的地方。GPU的任务是处理不需要预测的任务,因此也就可以省掉预测相关的电路,降低功耗。在需要分支时,只有当warp中所有的thread都计算出各自的分支的地址,并且完成取指以后,warp才能继续往下执行。一个warp内的线程是由同一个SM执行的,而一个SM只有一组取指、译码单元。如果一个warp中需要进行分支(即warp内的线程执行的指令指针指向不同的位置),性能将急剧的降低。

关于复杂的数据结构:

大家知道CUDA并行架构中的一个thread宽度是非常小的,但是却具有非常多的thread来实现大量计算,这和x86的CPU并行架构是一个明显区分的地方,在CPU的并行架构中,thread的数量往往远远少于CUDA的thread的数量,假如x86 CPU的thread过多的话则管理thread的时间开销将会很大,所以x86 CPU的thread宽度往往远远大于CUDA的thread。由于CUDA的thread宽度比较小,而且缺乏分支预测单元,假如有复杂的数据结构用于CUDA的话,恐怕反而会得不偿失。


小白观点,欢迎大家批评指正,谢谢.
回复

使用道具 举报

160#
发表于 2009-7-9 21:40 | 只看该作者
本帖最后由 arnew 于 2009-7-9 21:58 编辑
140# arnew  

32位 和 64 位 等等只系硬件的数据表示, 在高级语言上(软件层)可以实现128位甚至更高位的数据类型,譬如mathlab,mathmaticas 等数学软件的编程上。
tyro 发表于 2009-7-9 21:05

我已经很明确说了,从理论上,你可以用数组来实现任何长度的大数运算,这个没问题。

不过不知道你是否做过大数运算的实现?大数加法问题不大,但是大数乘法和除法的实现,你知道算法复杂度多少吗?

远远不是你说的汇编和程序的差别!针对一些运算,当然不是所有,SSE128位指令的加速效果是非常明显的。

另外提一下,现在的编译器优化能力还是很强的,对很多普通人,如果没有深入了解指令,用汇编写的东西,综合开发成本,还不如直接用高级语言。
回复

使用道具 举报

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

本版积分规则

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

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

Powered by Discuz! X3.4

© 2001-2017 POPPUR.

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