OpenCL系列讲座(一) 概览

1 Star2 Stars3 Stars4 Stars5 Stars
Loading ... Loading ...

OpenCL(Open Computing Language)是由Apple发起,由Khronos负责起草的用于跨平台并行计算的工业标准。基于该标准,我们可以使用任何系统中支持该标准的计算资源。由于该标准支持不同的编程语言、不同的硬件设备并且高效,因此可能成为软件、中间件乃至使用高性能计算设备厂商的有效解决方案。

frame work sl_opencl_architecture

OpenCL包含了四种模型:系统模型(Platform Model),执行模型(Execution Model),内存模型(Memory Model)和编程模型(Programming Model)。其中前三个模型与CUDA及其相似,几乎就是CUDA的翻版,只不过改了一些专有名词的称呼。而在编程模型中,分为数据并行(Data Parallel)和任务并行(Task Parallel)模型两种。数据并行是和CUDA执行类似,所有线程中执行的内核(kernel)是相同的,只是处理的数据会根据内核代码分支等原因而不同。任务并行则在每个线程中执行不同的代码,类似于目前CPU中的多线程编程模型,估计这是和Intel博弈的结果,因为Larrabee将来是个多CPU的结构。具体的信息可参考OpenCL设计说明

在程序中使用OpenCL编程大致可分为6个步骤:

  1. 查找支持OpenCL的硬件设备(Device),并创建上下文(Context)
  2. 创建命令队列(Command Queue)及包含了内核的程序(Program);如果该程序是源代码,则还需进行在线编译。
  3. 创建程序执行过程中需要的内存对象(Buffer)及图像对象(Image Object),并初始化
  4. 创建内核对象(可理解为Kernel中的函数)并设置其所需参数
  5. 设置内核的索引空间(NDRange)并执行内核。其中NDRange通过全局尺寸(GlobalSize)和工作包尺寸(WorkGroup)来进行管理。
  6. 将运行的结果拷贝回主机(Host)内存。

当然,还有重要的步骤是内核设计,OpenCL的内核代码是C语言,只是增加了一些扩展和限制。

Framework

OpenCL VS. CUDA Drv.

OpenCL CUDA Drv.
Platform

Layer

clCreateContext cuCtxCreate
Program clCreateProgramWithSource

clBuildProgram

cuModuleLoad
Kernel Function clCreateKernel cuModuleGetFunction
Parameter clSetKernelArg cuParamSet
Command Queue clCreateCommandQueue
Grid clEnqueueNDRangeKernel cuFuncSetBlockShape cuLaunchGrid
Memory clEnqueueReadBuffer cuMemcpyDtoH

可见,所有OpenCL的操作,在CUDA中都可以找到它的影子。为什么?估计是因为OpenCL的WorkGroup主席是NVIDIA的副总裁Neil Trevett. :) 所以如果你熟悉cuda,那么很容易上手OpenCL. 并且从目前已经发布的NVIDIAAMD的sdk中也有例子,可以用来学习。

OpenCL中相对于CUDA增加了几个新的概念:
1、命令队列:内存管理命令,内核执行命令,强制同步命令(Synchronization)等命令将被按照调用的顺序先后放入该队列中。命令队列有两种执行方式:
a.同步执行(In-order):所有命令均等待前面的命令执行完毕返回后才执行。
b.异步执行(Out-of-order):所有的命令均直接执行,并不等待前序命令执行完毕。该模式需要程序员自己管理同步。
2、事件(Events):内核和内存命令在加载到命令队列时,会产生一个事件对象(Event Object),可以用来管理队列的执行。
3、图像对象(Image Object):特殊的内存对象,可以为1、2、3维度。它类似于GPU中的纹理对象(Texture Object),但是OpenCL的图像对象可以选择性支持写操作(clEnqueueWriteImage),这取决于硬件厂家的实现。

另外,类似于OpenGL,OpenCL支持扩展功能(clGetExtensionFunctionAddress),各个厂家可用此提供专有的扩展功能,以保持其先进性。

本文简单介绍了OpenCL的框架结构,有兴趣的读者可以到相关网站做进一步的了解.

标签: , , | Print Print | 1,008 views

一条评论 发表在“OpenCL系列讲座(一) 概览”上

  1. GPGPU 说:

    Opencl教程系列…

    一,概述
    二,基本概念
    三,简单的demo
    四,存储模型
    ……

留下回复