OpenCL编程入门.pdfVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 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)

eorihgvj512 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档