充分发挥异构多内核设计的优势
作者:Bruce Lee,德州仪器软件与开发工具工程师
从消费类通信产品到多媒体产品,各种数字信号处理应用都要求具备高性能与高集成度的片上系统 (SoC) ,这无疑向开发人员提出了新的挑战。其中众多挑战源自异构架构(包含多种处理器、协处理器、加速器和外设)的集成、开发、测试以及验证的内在复杂性。不过,SoC 架构的整体系统方案才能够使其提供当今主要应用所需的高性能。
典型异构 SoC 由许多子系统和处理器组成。例如,一个多媒体处理器可能包括一个通用处理器 (GPP)、多个 DSP、音频/视频接口、编解码器、加速器、WI-FI 等无线接口、闪存、高速通信链路、传感器以及显示控制器等。开发人员凭借整套多内核感知工具 (multi-core aware tool) 不仅能够解决共享资源争用问题,基于实际应用环境进行性能优化,而且还能跨多内核实现电源管理,从而使他们能够轻松释放 SoC 器件的强大功能并对市场快速做出响应。另外,通过对这些子系统的适当调整可以针对具体应用情况实现功能、功耗和性能的优化,开发人员无需像使用集成度较低的架构那样彻头彻尾地重新设计产品。
各自为政
过去,异构架构(如 GPP+DSP)设计小组一般至少分为三个组。一个小组为 GPP 编写代码,主要负责控制处理;第二个小组为 DSP 和片上协处理器编写代码,负责大部分数据处理;第三个小组负责系统集成,将其他两个小组的设计整合在一起,并且根据新的约束和限制条件动态地重新划分系统。
大部分编程人员在特定代码块方面都会有诸多担心,如代码密度、内存占用、功耗以及高速缓存的效率。但是,离开完整的系统,我们无法精确地对这些参数进行单独测量。代码的运行效率取决于多个代码块之间对处理周期、存储器以及外设的争用。
系统级设计小组能够看清独立编程小组无法察觉的利弊。例如,将某项功能分配给 GPP 还是 DSP 的决定一般情况下取决于在该处理器上编程该功能的复杂性。GPP 更适合控制及 UI 功能,因此一般会将这些功能划分给 GPP,而数据处理功能划分给 DSP。不过,有时候上述显而易见的划分并不具有较高的效率。
我们可以看一下数码相机的自动聚焦功能,其是一种非常适合 DSP 处理的功能。与 GPP 相比,编程人员更易于为 DSP 编写自动聚焦功能,而且代码更简短,运行速度也更快。考虑到 DSP 的功耗也低于 GPP,这一决策显然不言而喻。
但是,如果考虑到典型的摄像应用模式,相关选择并非那么简单。用户往往在相机打开并且开始聚焦时并不取景或准备拍摄,这意味着并不使用 DSP。如果在 DSP 上实施自动聚焦功能,那么在上述过程中必须同时为 GPP 和 DSP 供电。如果在 GPP 上实施自动聚焦功能(假设有足够的开销),则可以使 DSP 保持断电状态。在用户实际拍照时,DSP 可以迅速进入工作状态,并且以较低时延捕获图像。
这方面的利弊是:如果在 GPP 上实施,自动聚焦功能可能效率较低,需要更多 CPU 周期而且反应速度较慢;但是,由于能够使 DSP 断电而提高整体电池使用寿命,所带来的节电优势会超过上述不足。
动态分组
在权衡系统级的分组优势时,编程人员必须将使用环境纳入考虑范围。例如,用户有时候会连续拍摄许多张照片。如果完全利用 GPP,则系统的瓶颈可能在于写入闪存或硬盘驱动器,其既限制相机排队的较大照片数量,又会限制连续拍照的速度。通过减轻 GPP 的任务处理负担可以加快图像保存速度,从而提高相机的性能。在上述情况下,在 DSP 上实施自动聚焦功能可以实现较高的系统性能。那么,编程人员应该将自动聚焦功能分配在何处呢?
答案是动态分组,这种方法使编程人员能够同时在两种处理器上实现某种功能,从而可以在两种情况下都能够达到较佳性能。如果照片队列为空,GPP 会负责自动聚焦,而 DSP 断电。在拍下第一张照片后,GPP 唤醒 DSP 以采集图像。同时,它将自动聚焦功能的执行转移至 DSP。在 DSP 出于工作状态时负责自动聚焦。在不需要 DSP 时,即用户在等待拍摄另一张照片时,则 DSP 向 GPP 发送消息,通知准备好再次断电。GPP 继续执行自动聚焦功能并通知 DSP 断电。
可以利用现成的商业实时内核管理自动聚焦功能,如:DSP/BIOS 或其他嵌入式 RTOS。如果功能可以同时在两种处理器上执行,则可以为 GPP 或 DSP 无缝地创建自动聚焦任务 (AutoFocusTask)。
两套代码总比一套好
在实施动态分组时,首要担心的是编程人员必须为不同的处理器分两次编写相同的代码。在大多情况下,此类代码均采用 C 语言编写;因此,在处理器之间移植代码仅需稍微调整一下相应编译程序生成的优化代码即可。需要注意的是,在同时具备两套代码的情况下,我们还可以获得其他优势。例如,自动聚焦功能在DSP 上会比在 GPP 上运行速度更快而且功耗更低。当今的开发环境为配置存储器使用(包括高速缓存可视化)、监控功耗以及分析总线流量提供了高级的工具,从而使开发人员确定同时在 GPP 和 DSP 上进行执行功能配置是否合理。
利用两套代码,您还可以测试在其他情况下无法评估的、更复杂的分组方案。系统的实际性能并不等于各个部件的总和。它主要取决于具体使用环境和其他工作代码。对于在 DSP 中产生高负载的视频等算法,自动聚焦功能可以返回至 GPP。您可以在多种功能之间测试不同的分组情形,以确定哪种能够提供较低的功耗以及较高的性能。您可以在开发环境中自动执行此类测试,利用各种组合并根据性能和/或功耗要求寻找较佳的配置。采用两套代码使系统集成人员能够测试新配置,而无需要求编程小组进行意外更改。但是,如果必须在一个处理器上运行代码,则无法实现上述目标。
两步调试
在异构架构中需要注意的一个系统要素是对电路系统进行调试或仿真。处理器的此类内部电路可以减少代码的调试工作量,从而使您能够更准确了解系统的运行时曲线。另外,您还可以更好地设计如何使用存储器,并且如何能够更好地优化快速内存的使用。例如,高性能 DSP 包含的高级电路可用于支持无干扰的电路内仿真 (ICE)、管理 JTAG 扫描、监控电源、提高跟踪能力、监视总线动态、执行高速数据交互、实现系统触发,以及支持在调试会话过程中提供高系统可视化的其他重要功能。
另一个重要的成分是调试程序以及开发环境中的多内核感知度。您需要能够同时停止多个处理器,以便解决某些调试问题。由于能够了解叠加的地方,并且当代码在叠加部分内部或者处理器之间转移时能够更新变量地址和观察点,因此此类工具可以加快您的开发进程。另外,您可能还需要偶然禁用调试程序。您可能希望测试某个内核退出睡眠模式的反应速度(在提供跟踪信息时不能处于睡眠状态)或者需要通信栈连续处理(即使在系统遇到断点情况下也如此),以便不丢失信息。
需要记住的是,USB 或 IEEE 1394 等协议栈可以在应用不使用它们时用于传输有用的调试信息。通过在其中一个内核上实施的协议栈,您可以更轻松地同时调试多个内核。另外,您还可以在不影响整个系统情况下控制如何传输和格式化调试数据。例如,如果您只是在调试代码中使用 printf,那么就有可能造成连接器输入不属于系统组成部分的大型库元素。
仅对该过程某一方面熟悉的开发人员(即,GPP 或 DSP)很难在设计过程前期评估权衡决策。另外,他们也无法为了优化性能或者实现动态分组而重新划分某个功能,而且在移植代码方面走进死胡同的小组也无法充分利用在编写代码过程中积累的丰富经验。不过,利用正确的代码与工具组合,您可以在系统级、而非按照独立的处理单元来检查自己的应用。您可以站在更高的层面(“我在调试 MP3 组件”),而非仅考虑 GPP 或 DSP 编程。
渴求效率
节省异构系统的一种方法是按照主/从配置运行多个处理器。主处理器在负责管理系统事件和用户界面时从处理器处于断电状态;在低利用率或者空闲期间不必要让两个处理器都耗费电源。一般情况下,GPP 或控制处理器担当主处理器,因为系统管理和用户界面功能一般在该处理器上实施。时钟更新或键盘响应等简单事件的处理无需唤醒 DSP。如果 DSP 是主处理器,则任何事件都会唤醒 GPP 进行处理。这是选择 GPP 用作主处理器的主要原因,虽然它的功耗一般高于 DSP。
在发生事件处理时,主处理器唤醒从处理器必须执行的功能。对于多功能器件而言,唤醒 DS
相关阅读:
- ...· Efinix® 全力驱动AI边缘计算,成功推出Trion™ T20 FPGA样品, 同时将产品扩展到二十万逻辑单元的T200 FPGA
- ...· 英飞凌亮相进博会,引领智慧新生活
- ...· 三电产品开发及测试研讨会北汽新能源专场成功举行
- ...· Manz亚智科技跨入半导体领域 为面板级扇出型封装提供化学湿制程、涂布及激光应用等生产设备解决方案
- ...· 中电瑞华BITRODE动力电池测试系统顺利交付北汽新能源
- ...· 中电瑞华FTF系列电池测试系统中标北京新能源汽车股份有限公司
- ...· 中电瑞华大功率高压能源反馈式负载系统成功交付中电熊猫
- ...· 中电瑞华国际在电动汽车及关键部件测评研讨会上演绎先进测评技术