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

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

3天内不再提示

将旧版应用程序迁移到多核并没有那么可怕

星星科技指导员 来源:嵌入式计算设计 作者:BILL GRAHAM 2022-11-07 14:41 次阅读

多核处理器嵌入式系统带来了显著的性能和功耗优势,但它们也增加了传统迁移工作负载的多处理复杂性。尽管如此,开发团队可以通过遵循一些简单的技术来成功管理向多核的过渡。

移植到便携式标准

通常,迁移到多核不仅仅涉及迁移到新处理器。在许多情况下,开发人员必须首先将旧代码移植到新的编程语言、编译器或操作系统。 强烈建议使用 POSIX 等开放标准,因为它支持许多通用和实时操作系统。这样做将有助于确保应用程序的大部分内容(包括其与操作系统的接口)是可移植的。同样重要的是,POSIX标准在多处理系统中有着悠久的历史,而多核处理器只是多处理片上系统(SoC)。

分而治之

支持对称多处理 (SMP) 的操作系统是同构多核处理器的最佳选择。SMP 将分配 CPU 资源的复杂细节留给操作系统,而不是应用程序。从应用程序的角度来看,与操作系统的接口保持不变,无论内核数量如何,从 1 到 N。因此,随着更多内核的添加,应用程序可以轻松扩展。

在 SMP 模式下运行的多核系统提供了真正的并行性,但一些传统应用程序从未设计为并行执行。通常,大部分代码不使用线程,这将允许应用程序的不同部分并行运行,或者仅使用线程来隔离阻塞系统调用,例如文件或网络 I/O。

另一个典型的陷阱发生在代码使用优先级方案来控制对共享内存的访问时。例如,在单处理器嵌入式系统中,软件开发人员通常可以假设高优先级线程和低优先级线程不会同时访问内存,因为高优先级线程将始终抢占低优先级线程。因此,许多程序无法使用互斥锁(互斥锁)来正确同步对内存的访问。但是,在 SMP 多核系统中,这两个线程可以并行运行,因此会同时访问内存,从而产生不可预测的结果。由于同步错误,可能存在其他隐蔽问题,这些错误在单处理器系统上完美运行,但仅在多处理器执行中出现。

为了解决这样的问题,开发人员可以分而治之:将问题代码隔离在多核芯片的单个内核上,直到代码可以修复。为此,开发人员可以使用绑定多处理 (BMP),这是 SMP 的扩展,允许选定的进程仅在指定的内核或 CPU 上运行。实际上,BMP 为遗留代码提供了一个单核、非并行执行环境,同时允许其他代码利用 SMP 的完全并行性。开发团队在修改旧代码以在其新的并行环境中正常运行后,可以随后删除 CPU 绑定。

利用这些工具

开发团队还必须使用正确的工具。特别是,他们需要可视化工具来帮助他们查明并行环境中代码行为异常的区域。大多数情况下,这项工作涉及检测和纠正前面提到的同步错误。

一旦应用程序正常运行,它仍然可能无法利用多核芯片的所有 CPU 容量。可视化工具在这方面也可以提供帮助,它允许开发人员减少对共享资源(热点)的争用,消除过多的线程迁移或内核之间的通信,并找到并行化代码的机会。随着多核平台内核数量的增加,可视化工具将是成功利用多核提供的性能优势的关键。

为了提供这样的分析,多核可视化工具必须超越传统调试工具的范围。例如,它们必须在线程从一个内核迁移到另一个内核时跟踪线程,并诊断在内核之间流动的消息。他们还必须灵活控制记录哪些事件以及何时记录,以便开发人员可以专注于关注的领域。

进行过渡

“多核”不需要是一个坏词,也不需要为传统迁移添加另一个障碍。采用POSIX等可移植编程标准,使用专为多核平台设计的操作系统,隔离遗留代码以在单个内核上运行,以及使用可视化工具,所有这些都使过渡变得不那么令人生畏。

审核编辑:郭婷

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

    关注

    68

    文章

    18606

    浏览量

    224484
  • 嵌入式
    +关注

    关注

    5017

    文章

    18496

    浏览量

    293170
收藏 人收藏

    评论

    相关推荐

    在进行ad9626的配置后,测试DCO并没有时钟的输出的原因?

    在进行ad9626的配置后,测试DCO并没有时钟的输出,然后进行寄存器ID数据的读出,读出了ID地址的数据,然后再次进行了配置寄存器,DCO还是没有时钟的输出。
    发表于 02-27 07:25

    DFU PSOC4 Bootloader无法启动应用程序怎么解决?

    基于这个 DFU 快速入门,我想从 DFU 开始将我的项目从 moduStoolBox 2.4 迁移到 3.1。 由于我的项目目前正在运行,因此我有一个可以运行的引导加载程序,可以引导加载,由
    发表于 01-30 07:43

    AD7685用示波器抓取DEMO板的SDO,CONV,SLK三线的电平情况,发现CONV并没有一段转换时间的原因?

    依据AD7685的数据手册,三线SPI通信,SDI拉高,SPI通信前有一段转换时间,Tconv。 但是,我用示波器抓取DEMO板的SDO,CONV,SLK三线的电平情况,发现CONV并没有一段转换时间。 请问是否需要这段转换时间。
    发表于 12-04 08:10

    AD5421BREZ接入24V电源后,并没有报警电流输出的原因?

    你好,我使用芯片为AD5421BREZ,接入24V电源后,并没有报警电流输出,测得REGIN和LOOP-之间电压为12V,DVDD输出只有1.5V左右,REGOUT配置应该输出5V但只有0.8V左右,REFOUT2输出0.5V左右,REFOUT1没有输出。下面是电路图,请
    发表于 12-04 07:00

    如何让STM32WB在没有LSE时运行BLE应用程序

    如何让STM32WB在没有LSE时运行BLE应用程序
    的头像 发表于 10-24 16:41 302次阅读
    如何让STM32WB在<b class='flag-5'>没有</b>LSE时运行BLE<b class='flag-5'>应用程序</b>

    用于FICON SAN结构的大型机从Brocade第5代迁移到第6/7代

    电子发烧友网站提供《用于FICON SAN结构的大型机从Brocade第5代迁移到第6/7代.pdf》资料免费下载
    发表于 09-01 14:42 0次下载
    用于FICON SAN结构的大型机从Brocade第5代<b class='flag-5'>迁移到</b>第6/7代

    STM32标准外设库迁移至STM32Cube底层库

    本应用笔记介绍了从现有使用STM32 SPL开发的基于STM32的应用程序迁移到使用STM32Cube LL驱动程序的任何其他类型的微控制器的步骤。本应用笔记汇总了将基于STM32 SPL的
    发表于 08-31 10:25 0次下载

    171从ADS迁移到RVDS 3.0的应用笔记

    并不是一个要求。 某些ARM工具特定功能已更改或已过时,需要更改这些功能。 内联汇编程序(__ASM)C编译器有一个内置的内联汇编程序。 然而,ARM体系结构6和更高版本的指令集不会保持这一点。 建议用户所有内联汇编代码
    发表于 08-30 08:17

    如何软件应用程序从ARMv5迁移到ARMv7-A/R

    本文档旨在帮助您将软件应用程序从ARMv5迁移到ARMv7。 它描述了ARMv5和ARMv7之间的区别,并解释了现有软件应用程序从ARMv5迁移到
    发表于 08-29 06:51

    从电源架构迁移到ARM的应用说明

    本文档的目的是强调那些参与软件应用程序从Power架构迁移到ARM平台的人员感兴趣的领域。 本文并不试图一种体系结构提升到另一种体系结构之上,只是为了清楚地解释
    发表于 08-22 06:09

    如何将LPC84x迁移到LPC86x

    电子发烧友网站提供《如何将LPC84x迁移到LPC86x.pdf》资料免费下载
    发表于 08-16 16:56 0次下载
    如何将LPC84x<b class='flag-5'>迁移到</b>LPC86x

    c语言中并没有变量zero的定义是怎么回事?

    中的内嵌汇编语言。 目前的问题是第一句汇编指令不能完全理解, 以及在c语言中并没有变量zero的定义是怎么回事
    发表于 08-16 07:58

    Arm编译器迁移和兼容性指南

    Arm®编译器迁移和兼容性指南为从旧版本的Arm编译器迁移到Arm编译器6的用户提供迁移和兼容性信息。
    发表于 08-10 06:57

    如何项目从Arm Compiler 5迁移到Arm Compiler 6

    按照本教程中的步骤,现有的Arm Compiler 5裸机项目迁移到Arm Compiler 6裸机项目。完成迁移后,就可以重新构建您的可执行并在DS-5提供的固定虚拟平台(FVP)模型上运行。
    发表于 08-02 14:42

    如何使用Neon intrinsic的矢量处理代码迁移到氦intrinsic

    本指南旨在帮助任何将使用霓虹灯内部函数的现有矢量处理代码迁移到氦内部函数的人。我们研究不同复杂度的霓虹灯代码示例,并研究如何将该霓虹灯代码迁移到氦。通过研究这些示例,您将了解一些通用的迁移
    发表于 08-02 07:39