`
iwebcode
  • 浏览: 1997559 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

OpenCL之我心得

 
阅读更多

OpenCL之我心得

http://bbs.hpctech.com

http://blog.csdn.net/openhero

http://www.comp.hkbu.edu.hk/~kyzhao/

博客 开勇

2009/11/20

或许是为了最求片刻的宁静,选择了宁静的夜,或许在这个时候,只有实验室桌之上几台电脑嗡嗡的蜂鸣声能时刻的提醒我周围的存在。09年算是忙碌的一年,已经快到年底了,反观这一年自己做的事情,对于技术,或许更多的时间都和技术无关吧……追求片刻的宁静,寻求心灵的归属。最近几天黑白颠倒,每天只能睡4-5个小时,在安静的夜,或许能找到自己的真正的位置……

这两天在看OpenCL的一些特性,在反思这个过程,现在计算机技术的发展我想分为两个层面,一个是高层的,云;一个是底层的核心,纵核;在于云这个层面,我们可以采用集群,分布式的一系列的管理软件,任务控制软件来维护整个系统,而对于纵核系统,我们才刚刚起步,OpenCL作为一个纵核的标准,或许才算是一个起步,从OpenCL一出来就开始关注,到现在,OpenCL的特性里面学习了大型集群的思路,也体现了纵核的特点。我比较喜欢OpenCL里面的这个编程模型图:

clip_image002[3]

OpenCL的一些概念我比较看好,例如在高层的多任务的配合,这里避开了在CUDA层面的时候,需要自己写一个多GPU管理的尴尬。

例如Nvidia提供的OpenCL的demo里面,oclMatrixMul的例子,我们可以看到在处理多卡这个环节,OpenCL可以直接利用多卡来分配各自的任务,然后再合起来,这样在一个节点上面,就可以同时利用所有的OpenCL的资源,可以把所有的GPU,CPU都可以利用起来,这样针对一个节点来说,就可以不用程序员人为的做太多的事情,就当成一个节点就可以了。

这个模型也体现了之前我在很多场合说的现在计算机集群的三个层面,

第一个是多机器的层面,我们可以用MPI这样的编程模型来理解这个层面,有多个计算机组成,可能包括同构和异构的集群,这个层面是在多个机器层面来说的。

第二个层面是针对每一个机器节点,我们可以理解为CPU,GPU多个处理器在一个运行系统中的,这个节点可以由系统统一管理。

第三个层面,针对于CPU和GPU本身,也是纵核的载体,这个层面。

我现在把OpenCL归并到第二个层面里面,OpenCL可以起到承上启下的作用。当然,如果OpenCL的底层支持库变换一下,也可以成为第一个层面,或者也可以成为第三个层面。但是现在我只把他归为第二个层面。

其实我们可以想象一个树的结构,一棵树,一棵草,一片树林,一片森林,这样的结构,或许也就是大自然的结构,所以我很喜欢上面的那个图。比较美妙:)ps:分形也十分的美妙……我很喜欢图形……或许是因为小学的时候,学过几年绘画吧……

在看OpenCL的时候,我们不能直接把它和CUDA来做比较,因为两者不是一个层面的东西。往往现在对CUDA的理解也是比较模糊的,用Nvidia自己的话来说,CUDA是一个平台,一个平台而已,它是一套ISA架构,就像X86一样的一套架构,我们现在用只不过是CUDA C,将来也可以是CUDA C++,CUDA java…不应该把CUDA和OpenCL用来做比较,两者是不一样的,OpenCL是一个更高的层面。

………………………………………………分割线

但是现在OpenCL还是在初步阶段,我这里有AMD的平台,有Nvidia的平台,各自都支持OpenCL,但是使用的底层库不一样,效果也不一样。IBM也有自己的OpenCL库,对于统一的支持,OpenCL还有一段路要走,一年,两年,还是三年?不得而知。

至少现在对于OpenCL编程,还是很痛苦的,大家的东西都不一样,而且是运行时编译执行的,这个速度肯定比原生态的要慢很多,在统一这个路上,OpenCL还有很长一段路要走。

……………………………………………………

对于OpenCL的使用,我更喜欢把它作为第二层来使用,作为一个多卡任务的管理者来使用,不过现在同一台机器上,还不能同时支持AMD和Nvidia同时使用OpenCL,所以,还需要等待。虽然我的机器上同时有AMD的卡,也有Nvidia的卡,但是两者都提供了各自的OpenCL,所以这块很麻烦~需要跑各自的程序的时候,还需要把DLL改成对应的才行。

很希望将来OpenCL组委会自己提供统一的OpenCL,让后各自厂商提供各自的运行库比如NVOpenCL.dll AMDOpenCL.dll然后由OpenCL组委会提供的OpenCL.dll来管理这些厂商的DLL,这样对于开发人员来说,就会方便很多。我想,将来他们也会这样做。只是形式不一样而已。

OpenCL的特性今天说了一个,这个算是我对于OpenCL而言,最喜欢的一个特性吧。

以后有时间了,会继续分析OpenCL的一些特性,也喜欢随时欢迎大家一起讨论。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics