五千年(敝帚自珍)

主题:独立显卡业的明天 -- songcla

共:💬16 🌺22
全看分页树展 · 主题 跟帖
家园 关于CUDA的一点愚见

窃以为,NV目前狂吹CUDA,其着眼点放在了并行上面。

游戏里的并行是比较容易实现的。比如游戏里面有两棵树A和B,在串行的时代,需要先渲染好A,然后再去渲染B,而后整合画面。而在并行时代,渲染时可以让一个核心去渲染A,同时让另外一个核心去渲染B,然后再把A和B整合到画面里就可以了。很明显,这样效率就提高了很多。这里面有个前提,就是A和B是相互“独立”的,彼此没有影响,因此并行就容易实现一些。

但是在科学计算方面恐怕就没有那么简单,鄙人也看过一些并行计算方面的书,书里面介绍的算法也只是在某些特定的场合下才能用,换句话说,不是所有的程序都能并行化。

例如下面一段程序:

1 INPUT A;

2 INPUT B;

3 C = A * B;

4 D = C ^ 2;

5 E = D * A;

6 OUTPUT E;

7 END

抛开输入输出不谈,只看第4、5这两行代码。

第4行:要得到D,就必须等到第3行计算完成。

第5行,要得到E,就必须等到第4行计算完成。

这样的话,要并行就比较麻烦。假设有两个计算核心甲、乙,我让甲计算第4行,乙计算第5行,这样貌似“并行”了,但是如果没有甲算出来的D的结果,乙只有等待;甲计算完毕,把D传给乙,乙才能开始计算。如此看来,并行的优势(也就是同时计算的优势)根本发挥不出来。如果再算上甲和乙通信的时间(也就是计算结果传递的时间),这样的“并行”反而没有串行快。

还有一点要说明的是,NV图形芯片里的“流处理器”是单精度的,这可能是NV的一大硬伤。

一点愚见,欢迎方家斧正

全看分页树展 · 主题 跟帖


有趣有益,互惠互利;开阔视野,博采众长。
虚拟的网络,真实的人。天南地北客,相逢皆朋友

Copyright © cchere 西西河