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

描述

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

  移植到便携式标准

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

  分而治之

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

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

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

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

  利用这些工具

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

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

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

  进行过渡

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

  审核编辑:郭婷

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

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分