当前位置:首页 > 嵌入式 > 嵌入式教程
[导读]用OpenCL开发嵌入式混合代码

近几年来,处理器从最求高性能转向追求多内核。这种改变主要是由于量子效应(quantum effects)的作用难以实现高性能和低功耗的兼得,因而需要加速开发新的软件技术。这些技术属于通用运算块,不但可应用于异构多核CPU,还可以应用于图形加速器、数字信号处理器(DSP)以及现场可编程门阵列(FPGA),以加速算法,应对日益提高的运算性能要求。

OpenCL由苹果公司提议开发,得到Khronos Group的维护,其开发目的是提供便携式开放编程架构,这使得软件可并行利用多核CPU和专用处理内核,特别是图形处理器可实现并行处理非图形处理。

OpenCL与OpenGL类似,也就是都可实现利用不可知设备开放标准以创建自定义实现。在设计上OpenCL可与OpenGL一同工作,也就是可共享架构数据,使用OpenCL完成的数据,接着可使用OpenGL显示。OpenCL标准由2008年成立的工作组开发,Nvidia主持工作,Apple参与编辑。从那以后,OpenCL标准向后兼容的修订版本经过一系列可用于验证一致性的一致性测试完成发布。

OpenCL对现有处理器的一致性实现主要适用于芯片供应商(Altera, AMD, ARM, Freescale, Imagination Technologies, Intel, Nvidia, 德州仪器,赛灵思等)。 为加速运行OpenCL架构,需要使用针对这些供应商的OpenCL驱动器。

OpenCL与Nvidia的CUDA,Stanford的Brookand和微软DirectCompute类似。 与这些语言相比,OpenCL具有开放、便携、低端、与硬件较适应的特点,但在一定程度上较难使用。这主要是因为OpenCL用于支持异构内核并行处理的便携式硬件抽象层。

OpenCL还形成基于带有其他功能的C99子集的语言,可支持两种不同的并行处理模式,即任务并行和数据并行。

任务并行是嵌入式模式,最为工程师所熟悉。任务并行一般利用多线程OS实现,以便于不同的线程可同时运行。在线程需要访问共享资源时,可利用互斥器、信号或其他各类的锁定机制。 OpenCL支持这种程序模式,但这并不是其强大功能。

数据并行可应用于使用跨数据集进行同一操作的算法。在数据并行模式中,一种运行如框过滤器具有并行性,这样同一微算法可并行运行多次,但这种算法的各项实例化可在其自身的数据子集上运行——这样实现了数据并行。这是最适于OpenCL支持的程序模式。OpenCL的五种兼容交叉模式有助于解释这些概念。这些模式是架构、平台、执行、内存和程序。

OpenCL架构包括平台层、运行时间和编译器。平台允许主程序查询可用设备,创建前后关系。运行时间允许主程序操纵前后关系。编译器创建可执行程序并基于带有一些其他语言功能的C99子集以支持并行程序。为向芯片供应商提供OpenCL一致性,需要提供启动架构运行的OpenCL驱动器。

通过连接一个或多个器件的主机定义平台,如GPU。各器件被分为一个或多个的运算单元,如内核。各运算单元被分为一个或多个处理元件。

OpenCL程序执行发生在两处:在器件上执行的内核,最常见的是GPU,以及在主机器件上执行的主机程序,最常见的是CPU。

要了解执行模式,最好先了解内核如何运行。主机计划执行内核时,需要定义索引空间。内核实例(工作项)执行这个索引空间的各个项目。

在OpenCL中,索引空间被表示为NDRange。NDRange是一维、二维、或三维索引空间。NDRange的图形表示如图1。主机定义内核使用的前后关系。前后关系包括器件表、内核、源代码和内存对象。通过主机产生和维护前后关系。另外,主机利用叫作命令队列的OpenCL API创建数据结构。主机通过命令队列安排内核在器件上运行。


图 1 NDRange的图形表示

可在命令队列上放置的命令包括内核执行命令、内存管理命令和同步命令。同步命令用于限制其他命令的执行顺序。通过在OpenCL命令队列放置命令,运行时间可在系统内处理在器件并行完成的命令。

执行内核的工作项目可访问下列内存:

• 全局内存——适用于所有工作组的所有工作项目。
• 常量内存——由主机初始化,在整个内核寿命中内存保持为常量。
• 本地内存——由工作组共享的内存。
• 私有内存——单个工作项目私有的内存。

正如上文所述,OpenCL主要支持两种程序模式:数据并行,即各处理器在分布式数据的不同条目上执行同一任务;任务并行,即在共同的数据集上执行多个任务。在各类并行程序中,运行中并行线程同步被视为首选。OpenCL为并行处理间的同步控制提供三种方式。第一种方式是在索引空间内创建以限制某个工作项目以便使工作项目按顺序运行。第二种方式是在命令队列内建障碍以限制命令顺序。第三种方式是在命令队列内创建由命令生成的事件。这些事件的运行可强制顺序操作。

例如使用工具OpenCL特别适用于图像/视频编辑应用程序, AI 系统,模型架构,游戏物理,电影渲染,和增强现实。但主要在嵌入式移动器件中还设置了为OpenCL标准定义的嵌入式配置文件,包括整个OpenCL标准的子集。OpenCL嵌入式配置文件包括以下几个亮点:

• 64位整数(可选)
3D图形支持(可选)
• 为浮点计算放宽估算规则
• 提高嵌入式器件转换的准确度
• 内置原子函数(可选)

展望未来,OpenCL路线图包括几项计划,以提高OpenCL至下一个相关程度。
高级模式(OpenCL-HLM):OpenCL目前正探索通过语言构件整合器件和主机执行环境,以便提高OpenCL的易用性。如果实现这项计划,OpenCL的应用将更加广泛。

长期重要路线图:OpenCL正不断探索加强内存和执行模式的方式,以利用不断更新的硬件功能。另外,OpenCL正不断努力利用经优化的同步工具,使并行程序模式在 OpenCL 运行得更加强健。
WebCL: OpenCL的愿景是通过Java脚本绑定件进行并行运算。

标准并行中间表示(OpenCL-SPIR):OpenCL计划摆脱创建编译器和语言绑定件的业务。创建标准化中间表示,可通过不属于OpenCL内核团队的工程师将OpenCL绑定至新语言,这样可扩大OpenCL的应用范围,并使得OpenCL中间表示成为现在乃至未来编译器的目标。

OpenCL前景光明,但仍面临着许多问题亟待解决,工作组的当前计划已经解决了其中的很多问题。在下一个运算阶段,我们预测处理内核将会剧增,包括异构CPU和异构CPU/GPU,我们仍将需要成熟软件架构,这有助于使我们利用所有硬件运算功能,将其应用于我们的系统。在这种大趋势下,OpenCL被坚持定位为开放、自由、成熟的标准,得到行业支持,并将拥有光明的未来。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: 驱动电源

在工业自动化蓬勃发展的当下,工业电机作为核心动力设备,其驱动电源的性能直接关系到整个系统的稳定性和可靠性。其中,反电动势抑制与过流保护是驱动电源设计中至关重要的两个环节,集成化方案的设计成为提升电机驱动性能的关键。

关键字: 工业电机 驱动电源

LED 驱动电源作为 LED 照明系统的 “心脏”,其稳定性直接决定了整个照明设备的使用寿命。然而,在实际应用中,LED 驱动电源易损坏的问题却十分常见,不仅增加了维护成本,还影响了用户体验。要解决这一问题,需从设计、生...

关键字: 驱动电源 照明系统 散热

根据LED驱动电源的公式,电感内电流波动大小和电感值成反比,输出纹波和输出电容值成反比。所以加大电感值和输出电容值可以减小纹波。

关键字: LED 设计 驱动电源

电动汽车(EV)作为新能源汽车的重要代表,正逐渐成为全球汽车产业的重要发展方向。电动汽车的核心技术之一是电机驱动控制系统,而绝缘栅双极型晶体管(IGBT)作为电机驱动系统中的关键元件,其性能直接影响到电动汽车的动力性能和...

关键字: 电动汽车 新能源 驱动电源

在现代城市建设中,街道及停车场照明作为基础设施的重要组成部分,其质量和效率直接关系到城市的公共安全、居民生活质量和能源利用效率。随着科技的进步,高亮度白光发光二极管(LED)因其独特的优势逐渐取代传统光源,成为大功率区域...

关键字: 发光二极管 驱动电源 LED

LED通用照明设计工程师会遇到许多挑战,如功率密度、功率因数校正(PFC)、空间受限和可靠性等。

关键字: LED 驱动电源 功率因数校正

在LED照明技术日益普及的今天,LED驱动电源的电磁干扰(EMI)问题成为了一个不可忽视的挑战。电磁干扰不仅会影响LED灯具的正常工作,还可能对周围电子设备造成不利影响,甚至引发系统故障。因此,采取有效的硬件措施来解决L...

关键字: LED照明技术 电磁干扰 驱动电源

开关电源具有效率高的特性,而且开关电源的变压器体积比串联稳压型电源的要小得多,电源电路比较整洁,整机重量也有所下降,所以,现在的LED驱动电源

关键字: LED 驱动电源 开关电源

LED驱动电源是把电源供应转换为特定的电压电流以驱动LED发光的电压转换器,通常情况下:LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: LED 隧道灯 驱动电源
关闭