- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
--(完美WORD文档DOC格式,可在线免费浏览全文和下载)值得下载!
OpenCL 编程入门
日期: 2014/11/6
OpenCL 编程入门
1. 概述
1.1 引言
OpenCL 的文章网络上有很多,从入门到各种精通都有。本文的目的,是用尽量简洁的
叙述,建立对OpenCL 相对全面的概念。本文适合刚开始接触异构计算和OpenCL 的编程人
员,或想要了解OpenCL 的人。
如果只是想知道如何写一个Hello World,可以直接跳到:2.3 节。
1.2 OpenCL 概念
OpenCL 是由 Khronos Group 针对异构计算设备 (heterogeneous device )进行并行运算
所设计的标准 API 以及程式语言。
OpenCL 程序分成成两部分:一部分是在设备上执行的(例如GPU ),另一部分是在主
机上运行的。在设备上执行的程序就是实现“异构”和“并行计算”的部分。为了能在设备
上执行代码,程序员需要写一个特殊的函数(kernel 函数)。这个函数需要使用OpenCL 语
言编写。OpenCL 语言采用了C 语言的一部分加上一些约束、关键字和数据类型。在主机上
运行的程序用OpenCL 的API 管理设备上运行的程序。主机程序的API 用C 语言编写,也
有C++、Java 、Python 等高级语言接口。
2. OpenCL 使用和编程
2.1 OpenCL 的使用模型
网上找到下面这张图,比较简洁地说明了OpenCL 的使用。
1
OpenCL 编程入门
从图中可以看出:
1. 异构计算设备,可以是CPU 或GPU 。现在也有支持OpenCL 的FPGA 设备和至强
融核协处理设备(MIC )。
2. OpenCL 的API 通过Context (环境上下文)联系在一起。
3. 运行设备端的程序,经过了编译-设置参数-运行等步骤。
2.2 OpenCL 的一些基本概念
要理解OpenCL 编程,首先需要理解一些基本概念。当然不喜欢阅读概念定义的同学可
以先跳过这一节,直接看编程的内容 (2.3 节)。
Platform (平台) :主机加上OpenCL 框架管理下的若干设备构成了这个平台,通过这个
平台,应用程序可以与设备共享资源并在设备上执行kernel 。实际使用中基本上一个厂商对
应一个Platform,比如Intel, AMD 都是这样。
Device (设备):官方的解释是计算单元(Compute Units )的集合。举例来说,GPU 是
典型的device 。Intel 和AMD 的多核CPU 也提供OpenCL 接口,所以也可以作为Device 。
Context (上下文):OpenCL 的Platform 上共享和使用资源的环境,包括kernel 、device、
memory objects 、command queue 等。使用中一般一个Platform 对应一个Context 。
Program :OpenCL 程序,由kernel 函数、其他函数和声明等组成。
Kernel (核函数):可以从主机端调用,运行在设备端的函数。
2
OpenCL 编程入门
Memory Object (内存对象):在主机和设备之间传递数据的对象,一般映射到OpenCL
程序中的global memory 。有两种具体的类型:Buffer Object (缓存对象)和Image Object (图
像对象)。
Command Queue (指令队列):在指定设备上管理多个指令(Command )。队列里指令
执行可以顺序也可以乱序。一个设备可以对应多个指令队列。
NDRange :主机端运行设备端kernel 函数的主要接口。
注:Platform, Device 和Context 的对应关系在实际使用中
原创力文档


文档评论(0)