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里面的这个编程模型图:
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的一些特性,也喜欢随时欢迎大家一起讨论。
分享到:
相关推荐
OpenCL领域公认的权威著作,由OpenCL核心设计人员亲自执笔,不仅全面而深刻地解读了OpenCL规范和编程模型,而且通过大量案例和代码演示了 基于OpenCL编写并行程序和实现各种并行算法的原理、方法、流程和最佳实 践,...
opencl-z的原版apk,可以检测当前的手机是否支持opencl
这个教程是引导我opencl入门的教程,挺有帮助的。介绍了opencl内存对象,kernel编写,GPU架构,线程调度,性能优化,都有具体例子。
AMD大学 OpenCL 中文版教程 OpenCL全称Open Computing Language即开放计算语言。OpenCL为异构平台提供了一个编写程 序,尤其是并行程序的开放的框架标准。...展了GPU 的应用范围,使之不再局限于图形领域。
"Heterogenous Computing with OpenCL" covers all the bases well in helping a programmer become comfortable with OpenCL programming. If I have any reservations, its that the book is a short 284 page ...
OpenCL学习资料合辑包括OpenCL编程指南,OpenCL中文教程(AMD),OpenCL编程入门
windows下的GPU的OpenCL-SVM特性测试。opencv灰度模板匹配在CPU和GPU之间的执行速度对比的测试软件!
提供opencl的第一手资料,详尽阐述了如何在异构环境下进行并行编程。第1章首先介绍如何在并行系统下编程,定义异构编程需要理解的概念。第2~4章循序渐进地介绍opencl的基本架构。第5章和第6章对这些概念加以扩展,...
opencl c opencl c
OpenCL加速读取图片
Debugging OpenCL Kernels on GPU Debugging OpenCL Kernels on GPU
该资料主要介绍用opencl在fpga平台开发,实现并行加速
Opencl在vs2015上的一个简单例子
AMD OPENCL 大学教程,详细的介绍了GPU的并行计算
OpenCL Programming Guide/OpenCL Programming Guide/OpenCL Programming Guide
详细的API函数原型,对OPENCL开发很有帮助
赠送jar包:opencl-3.0-1.5.7.jar; 赠送原API文档:opencl-3.0-1.5.7-javadoc.jar; 赠送源代码:opencl-3.0-1.5.7-sources.jar; 赠送Maven依赖信息文件:opencl-3.0-1.5.7.pom; 包含翻译后的API文档:opencl-3.0...
Deploy OpenCL™ Runtimes 18.1 Obtain runtimes to execute OpenCL™ applications on Intel® Processors 1.Intel® Graphics Technology (Intel® GEN Compute Architectures only) 2.Intel® Xeon® ...