一 学习OpenCL开发架构( 三 )


3.3软件层面的组成
这些在SDK中都有对应的数据类型
setup相关:
:对应一个硬件(标准中特别说明多core的CPU是一个整个)
:环境上下文,一个包含几个(单个Cpu或GPU),一个就是这些的一个联系纽带,只有在一个上的那些才能彼此交流工作,你的机器上可以同时存在很多 。你可以用一个CPu创建,也可以用一个CPU和一个GPU创建一个 。
queue:这是个给每个提交的指令序列
内存相关:
:这个好理解,一块内存
:毕竟并行计算大多数的应用前景在图形图像上,所以原生带有几个类型,表示各种维度的图像 。
gpu代码执行相关:
:这是所有代码的集合,可能包含是和其他库,是一个动态编译的语言,代码编译后生成一个中间文件(可实现为虚拟机代码或者汇编代码,看不同实现),在使用时连接进入程序读入处理器 。
:这是在跑的核函数及其参数组和,如果把计算设备看做好多人同时为你做一个事情,那么就是他们每个人做的那个事情,这个事情每个人都是同样的做,但是参数可能是不同的,这就是所谓的单指令多数据体系 。
WorkI tem:这就是代表硬件上的一个,最基本的计算单元 。
同步相关:
:在这样一个分布式计算的环境中,不同单元之间的同步是一个大问题,event是用来同步的
他们的关系如下图

一  学习OpenCL开发架构

文章插图
上面就是的入门介绍,其实说实话在10年左右就跟踪过GPGPU相关的东西,那时很多相关技术还存在于实验室,后来的CUDA出现后,也激动过,学习过一阵,不过CUDA过度依赖于特定硬件,产业应用前景并不好,只能做做工程试验,你总不能让用户装个游戏的同时,让他顺便换个高配的N卡吧 。所以一度也对这个领域不太感兴趣,最近看到的出现,发现可能这个架构还是有很好的应用前景的,也是众多厂商目前合力力推的一个东西 。想想一下一个迭代10000次的for循环一遍过,还是很激动的一件事 。
在游戏领域,已经有了很多成功的实践,好像EA的F1就已经应用了,还有一些做海洋的lib应用(海面水波的FFT运算在过去是非常慢的),另外还有的库干脆利用去直接修改现有的C代码,加速for循环等,甚至还有版本的C++ STL,叫,所以我觉得可能会真正的给我们带来些什么~
以下是一些关于比较重要的资源:
组织的主页
N家的主页
A家的主页
标准的
必看 最新的1.2版本标准
必看,入门的
【一学习OpenCL开发架构】一个教学网站