POPPUR爱换

 找回密码
 注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

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

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

[复制链接]
41#
发表于 2009-7-8 17:35 | 只看该作者
当前是利益决定了技术。
回复

使用道具 举报

42#
发表于 2009-7-8 17:43 | 只看该作者
CUDA 是NV 一个抛砖引玉的“概念”,一个并行化的编程模型(软/硬件),在一些计算密度极高的编程问题时可以发挥出极大的优势,例如设计到矩阵方面的运算,将一个大问题分解成N个相互独立的子问题,分别解决,如矩阵的线性运算,初等变换等等。在图像处理,音频,力学模型,天气系统,金融系统等等都很好的成效。 不过在算法的设计上要求程序员有一定的造诣,譬如要将一个串行算法设计成一个并行算法等,这常常要求编程人员比较熟悉各种算法和较好的数学基础。在解决过程中往往还要建立数学模型,这个增加了编程的门槛。

在效率方面,如果分解后的子过程的有较强的相关性则会严重影响性能,最差的情况为完全串行执行。譬如在在内核代码中的子过程有相关的话可能要进行线程互斥和同步等,从而不能达到较高的并行度。在编程中所谓的隐藏延时,实际上是一种提高并发度的思想(并发区别于并行)。

在CUDA模型中可以很好地体现了宏观上的并发性和微观上的并行性,凭借这个优势在解决相应的问题中有很高的效率。其实我想说“CUDA”是NV一个 抛砖引玉的“概念”,它体现了多处理机+多线程的概念。
回复

使用道具 举报

43#
发表于 2009-7-8 18:17 | 只看该作者
INTEL 的Larrabee 像是个 多个X86处理器的集合,它主要化简了每个X86核心的结构,然后将多个化简后的核心组织系一起,呵呵这里提出了个比较有趣的问题,就是把每个核心化简到什么程度?因为越简单的核心就可以融合更多的核心,越复杂的话核心数量就会减少,然而核心数量越多他们的协调效率却越低,如果在一定的技术规模,成本约束,功耗约束等基础上设定核心规模为X,核心数量为N, 他们的约束关系是G(X,N),总体性能为F(X,N)的MAX就是一个值得探讨的问题。如Larrabee 在约束下可能只能容纳10到数十个化简后的X86,然而,结构更加简单的GPU流处理器/流处理单元却可以做到上百到数百个。
回复

使用道具 举报

44#
发表于 2009-7-9 07:24 | 只看该作者
135# weihua8206

即使最高支持32bit也可以 处理大位数,譬如CPU就可以处理就是,这不单单依赖于硬件的数据表示,还涉及到软件层的数据结构。
回复

使用道具 举报

45#
发表于 2009-7-9 07:29 | 只看该作者
135# weihua8206

CUDA的一个优势就 尽量降低编程难度,像用户屏蔽硬件级的复杂性。
回复

使用道具 举报

46#
发表于 2009-7-9 09:07 | 只看该作者
135# weihua8206  

CUDA的一个优势就 尽量降低编程难度,像用户屏蔽硬件级的复杂性。
tyro 发表于 2009-7-9 07:29


cuda目前最大的麻烦就是开发者需要很深刻的了解硬件级的复杂性才能写出一个比较通用的、高效的程序。

是很深刻了解,嗯。
回复

使用道具 举报

47#
发表于 2009-7-9 09:10 | 只看该作者
本帖最后由 arnew 于 2009-7-9 09:14 编辑
这位朋友显然对编程一无所知:

首先,目前的CPU是64位的(也许你在用奔四,但现在主流的CPU都已经是64位的)。而且并不是说64位的CPU最高只支持64位浮点数!CPU很灵活,程序员可以使用多个64位单元来表示一个 ...
weihua8206 发表于 2009-7-9 08:02


Intel里面还有几个128位的reg,应用于SSE指令,因此对很多运算SSE加速效果不错。

理论上说,GPU也可以用算法来达到高精度,但是相对CPU,带来的速度下降比较严重。特别是64位,因为64位计算单元少,效率是非常低的。
回复

使用道具 举报

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

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

使用道具 举报

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

使用道具 举报

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

使用道具 举报

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

使用道具 举报

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

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

使用道具 举报

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

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

使用道具 举报

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

使用道具 举报

55#
发表于 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位指令的加速效果是非常明显的。

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

使用道具 举报

56#
发表于 2009-7-10 08:51 | 只看该作者
本帖最后由 贵甲 于 2009-7-10 08:58 编辑
140# arnew  

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


mathlab,mathmaticas 我记得也说过要支持cuda 但后来看见个demo 就没有下文了

技术部分可行 但没有人支持
回复

使用道具 举报

57#
发表于 2009-7-10 10:56 | 只看该作者
160# 玉清

是啊, CUDA 适合计算密度很大的编程模型,而且子任务的相关性较低。你说的分支就是相关性当然会影响性能,时线程同步和互斥也会影响。

这个也是GPU和CPU在硬件上的区别,GPU以大多数的晶体管来实现运算单元。而CPU则有较多是逻辑电路用于控制单元和高速缓存。
回复

使用道具 举报

58#
发表于 2009-7-10 10:59 | 只看该作者
161# arnew

现在大位数的运算要用软件实现,如果要硬件实现那么可能在大型机上,这样成本太高,而且通用性一般
回复

使用道具 举报

59#
发表于 2009-7-10 11:35 | 只看该作者
CPU和GPU 不能互代替,两个在不同的方向上发展。不过近年人们对视觉计算,图形性能的要求 较高。

CPU在硬件方面的发展的确遇上了瓶颈,譬如intel的上代旗舰U的和现在I7综合性能相差不到50%(QX9770和i7 965/975),但是nv/AMD 近期GPU,每代的提升都差不多接近100%。CPU的频率较难提升,在系统结构层面上的改进的成效也不太大。这样只能“横向”发展,多核! i7的高端系列更回归了超线程技术。intel视乎也学amd的HT3.0那样可以通过QPI总线组成分布式系统,这也体现CPU也像“横”发展。 这和GPU类似,只不过GPU处理的是更轻量级线程。
回复

使用道具 举报

60#
发表于 2009-7-10 16:43 | 只看该作者
显示芯片的运算单元数量很多,因此对于不能高度并行化的工作,所能带来的帮助就不大。

显示芯片通常不具有分支预测等复杂的流程控制单元,因此对于具有高度分支的程序,效率会比较差。

因此,最适合利用 CUD ...
weihua8206 发表于 2009-7-10 12:49


GPU里面好像是有线程派分处理器的,不过好像没详细地说过,记得PS3的CELL好像是也是有个处理器专门做派分任务的。而一般的操作系统的CPU调度算法是软件实现的(当然某些算法要有一定的硬件支持)。

其实CUDA 不是单单GPU在“动”,而是依靠一起的,不恰当地说其实也是一种CPU+GPU的模型(不过是CUDA做桥梁)。 CPU可以执行串行的代码,而核心部分的并行代码则由GPU执行。编译器把CUDA代码编译成PTX代码(GPU执行)和CPU代码(CPU执行)。

举个例子,例如一个待解决的问题的一个模型为G(f(1),f(2),f(3),f(4),f(5),.....f(n)),且f(i)的相关性不大,因此可以用GPU多线程去实现f(i)子任务,而且G功能则由CPU实现。如果子任务f(i)可以再分割成更轻量级的q(i)(t1,t2,t3,t4...tn),则G.f功能可以由CPU实现,t功能由GPU实现。或者G由CPU实现,f.t功能由GPU并行化实现。这就是CPU+GPU协作的一个体现。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-29 01:27

Powered by Discuz! X3.4

© 2001-2017 POPPUR.

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