0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何使用OpenCL架构工具实现嵌入式任务并行模式的开发

电子设计 来源:电子工程网 作者:MARK BENSON 2020-10-13 10:39 次阅读

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

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

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

OpenCL对现有处理器的一致性实现主要适用于芯片供应商(AlteraAMDARM, 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创建数据结构。主机通过命令队列安排内核在器件上运行。

如何使用OpenCL架构工具实现嵌入式任务并行模式的开发

图 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被坚持定位为开放、自由、成熟的标准,得到行业支持,并将拥有光明的未来。

责任编辑:gt

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 处理器
    +关注

    关注

    68

    文章

    18297

    浏览量

    222205
  • 芯片
    +关注

    关注

    447

    文章

    47821

    浏览量

    409193
  • 嵌入式
    +关注

    关注

    4983

    文章

    18295

    浏览量

    288575
  • OpenGL
    +关注

    关注

    1

    文章

    84

    浏览量

    29026
  • OpenCL
    +关注

    关注

    2

    文章

    47

    浏览量

    33128
收藏 人收藏

    评论

    相关推荐

    嵌入式软件开发应该掌握哪些知识?

    和 Thumb 模式的区别,以及 ARM Cortex 系列处理器的特性。 嵌入式 ARM 开发:学习如何在嵌入式系统中使用 ARM 处理器进行开发
    发表于 02-19 11:23

    诚聘嵌入式软件架构

    ,本科以上学历;2、三年以上嵌入式软件系统架构设计经验,同时有通信行业软件开发经验;3、精通C/C++语言,精通数据结构;熟悉QT\linux\android嵌入式软件
    发表于 03-01 10:20

    嵌入式开发教程之程序设计与开发维护

    、汇编语言、面向过程的语言、面向对象的语言、汇编/编译与解释程序的基本原理。  3、嵌入式软件开发环境:宿主机、目标机、嵌入式软件开发工具、集成开发
    发表于 05-26 14:59

    【招聘】算法、图像检索、嵌入式、测试、架构等职位(bj/sh)

    【招聘】算法、图像检索、嵌入式、测试、架构等职位(bj/sh) 人脸识别算法工程师职责1、负责人脸识别深度学习算法的调研和研究。2、负责人脸识别模型的优化和移植。 大规模图像检索工程师职责1、负责
    发表于 03-06 15:26

    基于LabView的嵌入式系统开发

    的挑战。嵌入式系统开发工具的发展趋势随着嵌入式系统的快速发展和复杂性的不断增加,基于文本的编程方式所面临的挑战愈发严峻,这种编程模式在将来不可能彻底解决问题。加州大学伯克利分校
    发表于 05-14 06:12

    嵌入式开发需掌握的技能有哪些

    的使用,Linux操作系统使用。具体包括以太网驱动,SPI驱动,I2C驱动,文件系统驱动,CAN驱动等。12、系统软件设计面向对象,设计模式,UML,嵌入式任务开发,重构,多核
    发表于 12-17 10:44

    [嵌入式linux] 嵌入式学习分享:那些绕不开的技术点

    接口这一块儿就会让很多新手摸不到头脑吧。2. 嵌入式绕不开交叉编译工具嵌入式一般都需要自己搭建交叉编译工具链,当然MCU类的开发也会有成熟的
    发表于 04-16 09:51

    嵌入式开发技能大全

    ,I2C驱动,文件系统驱动,CAN驱动等。12、系统软件设计面向对象,设计模式,UML,嵌入式任务开发,重构,多核开发等。了解常用的
    发表于 05-07 08:01

    嵌入式软件开发中的程序架构

    嵌入式软件开发,包括单片机开发中,软件架构对于开发人员是一个必须认真考虑的问题。软件架构对于系
    发表于 02-02 06:58

    嵌入式系统设计具有什么特点

    嵌入式系统开发设计嵌入式系统设计的主要任务是定义系统的功能、决定系统的架构,并将功能映射到系统实现
    发表于 11-08 06:02

    什么是嵌入式编程

    《C嵌入式编程设计模式》第一章 什么是嵌入式编程嵌入式系统的基本知识面向对象编程与结构化编程使用C语言实现类、继承、状态机 第二章
    发表于 11-08 06:15

    嵌入式系统设计的主要任务是什么

    嵌入式系统设计的主要任务是定义系统的功能 、 决定系统的架构,并将功能映射到系统实现架构上。这里,系统
    发表于 11-09 08:27

    嵌入式系统的开发过程

    一、嵌入式系统的开发过程嵌入式系统的开发过程一般包括需求分析、系统设计、系统实现、系统设计、系统发布5个阶段。需求分析阶段是通过与用户反复沟
    发表于 12-22 06:34

    嵌入式Linux开发工具

    嵌入式系统课堂小结3.24嵌入式Linux开发工具-gcc、gdb、make学习目标:了解gdb学习目标:编写makefile(.c–.o)–Linux内核 – makefile自动生成
    发表于 12-22 07:42

    常见嵌入式开发程序架构是什么

    前言在嵌入式软件开发,包括单片机开发中,软件架构对于开发人员是一个必须认真考虑的问题。软件架构
    发表于 02-14 06:37