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

    文章

    19259

    浏览量

    229652
  • 芯片
    +关注

    关注

    455

    文章

    50714

    浏览量

    423147
  • 嵌入式
    +关注

    关注

    5082

    文章

    19104

    浏览量

    304815
  • OpenGL
    +关注

    关注

    1

    文章

    85

    浏览量

    29243
  • OpenCL
    +关注

    关注

    2

    文章

    48

    浏览量

    33298
收藏 人收藏

    评论

    相关推荐

    诚聘嵌入式软件架构

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

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

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

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

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

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

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

    嵌入式Linux开发基础知识

     嵌入式系统开发模式嵌入式Linux系统的构成主要任务与流程利用Skyeye仿真开发
    发表于 09-10 11:07 39次下载
    <b class='flag-5'>嵌入式</b>Linux<b class='flag-5'>开发</b>基础知识

    嵌入式并行光学应用

    Avago Technologies 嵌入式并行光学应用
    发表于 05-24 16:45 0次下载

    ARM嵌入式应用程序架构设计工具

    电子专业单片机相关知识学习教材资料——ARM嵌入式应用程序架构设计工具
    发表于 09-13 17:23 0次下载

    实时多任务嵌入式软件的架构方式的设计应用

    分享到:标签:软总线 嵌入式软件 实时多任务 1.引言 随着大型嵌入式系统向着集成化和多元化方向的发展,嵌入式软件系统的复杂度也日益增大。在集成多个硬件工作模块组成的复杂系统中,要求软
    发表于 10-25 14:46 1次下载
    实时多<b class='flag-5'>任务</b><b class='flag-5'>嵌入式</b>软件的<b class='flag-5'>架构</b>方式的设计应用

    嵌入式linux开发工具总结

    1.嵌入式linux开发工具-编译器gcc(静态库 动态库的制作)可以制作库 库的使用2.嵌入式linux开发工具-调试器gdb(调试方法)目标:可以调试简单的错误以及内存错误3.
    发表于 11-01 16:32 12次下载
    <b class='flag-5'>嵌入式</b>linux<b class='flag-5'>开发工具</b>总结

    嵌入式linux c语言,嵌入式LinuxC语言开发工具.pdf

    2 章 嵌入式Linux C 语言开发工具本章目标任何应用程序的开发都离不开编辑器、编译器及调试器,嵌入式Linux 的C 语言开发也一样,
    发表于 11-01 17:38 12次下载
    <b class='flag-5'>嵌入式</b>linux c语言,<b class='flag-5'>嵌入式</b>LinuxC语言<b class='flag-5'>开发工具</b>.pdf

    视频教程-嵌入式Linux多任务编程-嵌入式

    嵌入式Linux多任务编程 嵌入式工程师、嵌入式讲师、10多年
    发表于 11-02 11:21 22次下载
    视频教程-<b class='flag-5'>嵌入式</b>Linux多<b class='flag-5'>任务</b>编程-<b class='flag-5'>嵌入式</b>

    嵌入式系统开发设计

    嵌入式系统开发设计嵌入式系统设计的主要任务是定义系统的功能、决定系统的架构,并将功能映射到系统实现
    发表于 11-03 11:06 19次下载
    <b class='flag-5'>嵌入式</b>系统<b class='flag-5'>开发</b>设计

    《C嵌入式编程设计模式》读书笔记

    《C嵌入式编程设计模式》第一章 什么是嵌入式编程嵌入式系统的基本知识面向对象编程与结构化编程使用C语言实现类、继承、状态机 第二章
    发表于 11-03 16:06 13次下载
    《C<b class='flag-5'>嵌入式</b>编程设计<b class='flag-5'>模式</b>》读书笔记

    嵌入式软件架构设计之任务调度

    嵌入式MCU软件开发过程中,程序任务调度架构的搭建尤为重要,直接关系到该程序能支持多少功能(随着功能越多系统响应能力越弱,好的任务调度
    的头像 发表于 02-15 14:44 2208次阅读
    <b class='flag-5'>嵌入式</b>软件<b class='flag-5'>架构</b>设计之<b class='flag-5'>任务</b>调度

    嵌入式软件最常见的架构模式

    : ① **分层架构** ② 多层架构③ **管道 - 过滤器架构** ④ 客户端 - 服务器架构⑤ 模型 - 视图 - 控制器架构⑥ **
    的头像 发表于 06-22 10:32 2547次阅读
    <b class='flag-5'>嵌入式</b>软件最常见的<b class='flag-5'>架构模式</b>