iPhone开发:苹果OpenCL技术概述-IT168 技术开发专区

来源:百度文库 编辑:神马文学网 时间:2024/04/29 23:19:22

iPhone开发:苹果OpenCL技术概述

2010年11月01日10:41 来源:cocoachina  作者:cocoachina  编辑:景保玉 评论:0 本文Tag: 苹果移动 iphone

  【IT168技术】OpenCL即:Open Computing Language,是由苹果公司起草设计的用于大规模并行计算的计算编程语言,并于2008年6月提交给KHRONOS开放标准组织,并在当年的12月由该组织release了第一版。下面将简单地为大家介绍OpenCL的特征以及一些基本概念和术语。

  OpenCL的设计要求:

  一、使用系统中所有计算资源:

  1、将CPU、GPU以及其它处理器进行统一编程

  2、同时支持数据以及任务并行计算模型

  二、基于高效C的并行编程模型:

  抽象了底层硬件的细节

  三、在嵌入式、桌面、服务器系统范围内的可实现性

  四、驱动未来硬件要求:

  1、浮点精度要求

  2、可同时应用于消费者以及HPC(高性能计算)应用

  模型层级:

  OpenCL分为四个模型层级:平台模型、存储器模型、执行模型以及编程模型。

  OpenCL平台模型:一台主机+一台或多台计算设备

  - 每个计算设备由一个或多个“计算单元”组成

  - 每个计算单元被进一步划分为一个或多个“处理元素”

  OpenCL执行模型:

  1、OpenCL程序:

  - 内核:可执行代码的基本单元——类似于一个C函数; 数据并行或任务并行

  - 主机程序:计算内核及内部函数的集合; 类似于一个动态库

  2、内核执行:

  - 主机程序在一个被称为NDRange的一个索引空间调用内核

  - NDRange = “N维范围”

  - NDRange可以是1,2或3维空间

  - 在索引空间中一个点上的一单个内核实例被称为一个“工作项”

  - 工作项具有来自索引空间唯一的全局ID

  - 工作项被进一步组成“工作组”

  - 工作组有一个唯一的工作组ID

  - 工作项在一个工作组内有一个唯一的局部ID

  3、上下文和队列:

  上下文被用于包含并管理“世界”的状态,内核在所定义的上下文中执行,并被主机操作。

  - 设备

  - 内核——OpenCL函数

  - 程序对象——内核源代码以及可执行代码

  - 存储器对象

  命令队列——协调内核执行

  - 内核执行命令

  - 存储器命令——存储器对象数据的传输或映射

  - 同步命令——限制命令的次序

  应用程序队列计算内核执行实例

  - 被顺序排队

  - 被有序或无序执行

  - 事件被用于实现执行实例的适当的同步

  OpenCL存储器模型

  共享的存储器模型

  - 松弛的一致性

  多个不同的地址空间

  - 地址空间可以被分割,根据设备的存储器子系统

  地址空间

  - 私有——对一个工作项私有

  - 局部——对一个工作组局部

  - 全局——可被所有工作组中的所有工作项访问

  - 常量——只读全局空间

  实现映射该层级

  - 对可用的物理存储器

  存储器一致性:

  “OpenCL使用了一个松弛的一致性存储器模型;即对一个工作项可见的存储器的状态不能保证一直对工作项集的一致性”;

  在一个工作项内,存储器有加载/存储一致性;

  在一个工作组内,一个栅栏上,局部存储器具有对该工作组中的工作项的一致性;

  全局存储器在一个工作组内具有一致性,在一个栅栏上,但不能保证跨不同工作组;

  在命令之间共享的存储器的一致性通过同步被强制。

  数据并行编程模型

  定义N维计算域

  - 在一个N维域中的每个独立的执行元素被称为一个工作项

  - N维域定义了并行执行的工作项的总数,即等于全局工作大小

  工作项可以被组合在一起——工作组

  - 一个工作组中的所有工作项可以相互通信

  - 可以在工作组中的工作项之间进行同步以协调存储器访问

  并行执行多个工作组

  将全局工作大小映射到工作组可以是隐式或显式的。

  任务并行编程模型

  数据并行执行模型必须被所有OpenCL计算设备实现

  一些计算设备,诸如CPU也可以执行任务并行计算内核

  -作为一单个工作项执行

  - 用OpenCL写的一个计算内核

  - 一个本地C/C++函数

  OpenCL的官方网站:http://www.khronos.org/opencl/

  另外,各位也可以参考Apple的OpenCL资料

  需要注意的是,OpenCL目前只能在Snow Leopard系统上跑,Leopard没有OpenCL驱动。

  下面附上一个OpenCL设备查询程序。偶花了两个晚上的时间整理出来的,呵呵。

  这个工具也能大致体现你当前CPU以及GPU的处理能力。

iPhone开发:苹果OpenCL技术概述-IT168 技术开发专区 编写iPhone应用程序有何不同 -IT168 技术开发专区 iPhone OS概述 - iPhone OS开发专区 - CCO 适用于软件开发中的11个系统思维定律-IT168 技术开发专区 软件天才与技术民工 天才是训练出来的?-IT168 技术开发专区 李轶楠细数数据库性能诊断兵器谱 - IT168 技术开发专区 四步让项目管理走上正轨 - IT168 技术开发专区 DB2的隔离级别和性能-IT168 技术开发专区 史上最强女游戏程序员|IT168 技术开发专区 项目经理修炼必备秘笈:实践才是硬道理-IT168 技术开发专区 iPhone OS开发工具 - iPhone OS开发专区 - CCO 担忧成真 网友热议Android开源还是封闭|IT168 技术开发专区 高级程序员:你不可不知的20条编程经验-IT168 技术开发专区 对DB2故障处理及最佳实践的浅析 - IT168 技术开发专区 实现DB2 SQL语句的优化的方法和意义-IT168 技术开发专区 如何在AIX平台上把DB2V8升级到DB2V95-IT168 技术开发专区 深度解析DB2数据统计与分析系统优化-IT168 技术开发专区 商业智能成热门 惠普SAP联盟直指Oracle - IT168 技术开发专区 Gartner:IBM微软SAP甲骨文在BI创新放缓 - IT168 技术开发专区 伟大的程序员是怎样炼成的? - IT168 技术开发专区 C# 5.0大胆预言:async/await最给力-IT168 技术开发专区 每个程序员应该知道的12件事情-IT168 技术开发专区 决定成为程序员之前应考虑的十件事-IT168 技术开发专区 过程组件模型 - 技术开发 | IT168