OPENCL带来了些什么?

OPENCL的SDK现在还没有公开,但总算有相对完整的手册了,可以具体看到OPENCL将给我们带来些什么功能,而不只是听厂家的宣传。

 

好不容易看完了300多页的手册,多少有些失望,原来以为会有对未来构架的突破性的定义,但实际看到的更多是现有各厂家的构架的一个混合体。不过,OPENCL能尽可能把现有的不同的GPU构架统一到一个平台下已经算不容易了。下面,就让我们看看OPENCL中的一些特点,并猜猜是那个厂家的特色吧。

 1)内核执行由多个线程构成,并且若干个线程可以构成一个group,线程可以在group中同步,而在group间不能同步。这个特点大家都熟悉吧,N卡和A卡的特征味道很浓。但要注意,warp块的特点在整个手册中压根没找到,这意味着有关的细节交给编译器和运行库了,要"保险"的话,不能利用相关特性来"优化"你的OPENCL程序。

2)内核启动有两个方式:数据并行方式和任务并行方式。两种方式由不同的函数启动,并且执行特性也不一样。
在数据并行方式下,更像我们所理解的GPU编程,程序以SIMD或SPMD方式运行。(SIMD是N卡和A卡的特性,SPMD--执行同样的程序,但各线程<组>有其独立的程序计数器--估计是为CELL准备的)
在任务并行方式下,每个group中只有一个线程!(当然group可以有多个),各线程可以同时执行不同的程序(任务)。这个模式看上去是为CPU和Larrabee准备的。只是想不通要这样强行把CPU设备拉进来有何意义,也许是为将来的单片(CPU+GPU)作准备吧。现在算是开个头。

3)一个上下文(主机程序)可以控制多个内核(指令流),各内核(指令流)间可以同时执行。看上去是为Larrabee准备的,毕竟Larrabee看上去更像是一个多核的"主板"卡。CELL估计也能自然地支持这个特性,而N卡和A卡估计就比较吃力了,很可能是"软"支持。

4)从主机函数库中抽出的函数代码可以直接在内核中调用。这个特性的I的味道太浓了,所以只得到了一个可选特性。

5)原子操作也是可选特性。N卡的优势,被其他人排挤是必然的。

6)DOUBLE也是可选特性!猜不到这次说NO的是哪一家啦,毕竟DOUBLE是N卡A卡和Cell都支持的呀。

7)直接的向量计算。这个在A卡和Cell中得到了支持,而N卡则该通过编译和运行库来支持了。

 

通过上面的一小部分特性介绍可以看到,要图省事,让自己的程序可以到处运行,用OPENCL是个不错的选择(还是要注意query平台特性,防止你想要的特性不被支持!)。如要得到较好的性能,还是要深入了解你的运行平台的架构才行。

 

接下来,让我们来简单看一下OPENCL和CUDA的关系:
以前一直被N的宣传资料搞得很糊涂,一方面说OPENCL是GPU上的细节开发接口平台,程序员要自己对内存什么加以控制等等,CUDA的抽象层次比OPENCL高;另一方面说OPENCL就和C一样在CUDA架构之上,CUDA可以对其很好地支持。到底谁在谁的层次上?习惯了结构化层次化体系的我往往看到这里就被绕晕了。呵呵。

看到了OPENCL的手册后,算是恍然大悟。不知道是故意还是翻译的缘故,N的介绍中往往没有说清楚关键的一点:CUDA其实分两个独立的层次!cuda层和cu层。最早的cuda的sdk是一个个C函数,构成了cuda的cu层。后来,也许为了更方便程序员开发,把cu层的函数用C++加以封装,构成了我们现在更多时候所说的CUDA程序层(cuda层)。这两个层次就如同windows下的SDK API和MFC一样,后者是建立在前者的基础之上,可以完成基本相同的功能。OPENCL就对应cu层,OPENCL的函数基本上在cu层的CUDA函数中可以找到对应的东西。所以,可以说CUDA的抽象层次比OPENCL高,这时,CUDA指的是cuda层。也可以说,OPENCL在CUDA架构之上运行,这时,CUDA指的又是cu层啦。

不过,如果你对cuda中的概念很熟悉的话,确实很容易理解OPENCL。

 

最后,有关OPENCL的官方资料如下,感兴趣的朋友可以自己去看看:
介绍:
http://www.khronos.org/developers/library/overview/opencl_overview.pdf
手册:
http://www.khronos.org/registry/cl/specs/opencl-1.0.33.pdf
快速手册:
http://www.khronos.org/files/opencl-quick-reference-card.pdf

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值