版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
http://hirose.blogbus.com/logs/61884993.html
这是我道听途说的一些东西,后面有主要原文网址,主要是关于GPGPU是怎么被炒热的。
Nvidia可能有%99.999....的钱不是从GPGPU赚来。科研领域Make Sense的东西不一定在商业领域成功,比如现在有一款协处理器,就和GPU一样,插上去能做所有的事情,无比厉害。但如果是没有足够的人用,马上就会消失。GPU现在最大的商业优势之一,居然是每个电脑上都有一块这玩意儿。这块芯片当然是为了图形加速用的,但就是因为大家都有一块,所有的热情都被投射在其上。
好吧,我们回到历史年代去找找GPGPU的前身。正所谓,历史无新事,在GPU上做一些通用计算早就开始了。当时的主要问题是没有标准的API。所以,开发者就必须把自己领域的程序用OpenGL或者DirectX的API写出来,非常痛苦。为了解决这个问题,一些人开始在原始的图形API上加了一层API来帮助编程。
斯坦福的BrookGPU和Waterloo Computer Graphic Lab的Lib Sh是最重要的两个工作。
先说说BrookGPU。这是Stanford University Graphics Group的工作。他们当时提出了Stream Programming的概念。数据被打包成Set,形成一个stream,而不是individual的。执行数据的是kernel,可以是一个单独的kernel,或者是一个kernel链,就好像一般的pipeline一样。并行过程被kernel所隐藏,你不用指定一个循环什么的,而是告诉kernel一个保存数据的纹理。Brook后面的主要科研人员是Ian Buck,这是他的PhD毕业论文内容。2004年开始,其间中断过,2007年停止。
Nvidia决定进入GPGPU战场是在2005年。他们当时雇了Ian Buck,Brook后面的推手,让他来负责设计Cuda语言。CUDA是Compute Unified Device Architecture的缩写,是Nvidia为通用计算提供的方案。籍此,Nvidia能够更加有底气的设计自己的GPU架构来适应未来的通用计算。Nvidia还提供了一些并非建立在图形API上的接口,让整个计算模型更加好用。当然Nvidia还做了很多其他的事情,比如把一直由CPU做的物理也弄到GPU里面去了。
这个时候,我要是CPU供应商,我一定会非常紧张。通用计算本来就是CPU的天下,这样下去大家都跑过去用GPU了,岂不是末日不远了。特别是摩尔定律失效的这几年,每次大家讲个什么,都会把CPU和GPU的Peak Performance的图拿出来对比一下。最新的CPU比GPU慢了已经100倍了。
当这些都在进行的如火如荼的时候,Apple公司为了让MacOS更好的支持未来的多核体系结构,搞出了一套叫做Grand Central的东西。Apple未雨绸缪,是有道理的,因为自从CPU撞墙之后,唯一靠谱的大大提高程序运行速度的方法就是并行了。而Grand Central就是要让程序员从各种多线程编程任务中解脱出来。Apple的某人碰巧就发现,这个东西也符合GPGPU领域的需求。于是Apple就把这套东西包装成了一个API标准,叫做OpenCL(Open Compute Language)。
然后呢?Intel的目的是想让自己X86的基因到处存在。Nvidia的目的是让GPU吞噬CPU。。。大家都不想死。