首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >优化多体系结构c代码的最佳过程

优化多体系结构c代码的最佳过程
EN

Stack Overflow用户
提问于 2022-11-04 14:37:24
回答 2查看 49关注 0票数 -1

我目前正在优化一段C代码,有很多循环,并添加/乘二维浮点向量。代码太慢了,我无法在ARM Cortex-M甚至ARM Cortex-A上以低CPU模式实时处理我的数据。我在Cortex-A上几乎够快了。但在皮质-M.我需要在许多不同的架构环境中运行这段代码。

这是我第一次需要对算法进行深入的优化,以达到实时的目的.我发现了很多关于循环优化和矢量化的论文/文章来帮助我完成这个任务。我还在探索作为库OpenBlas的多体系结构解决方案。

问题是我的双臂环境很痛苦。迭代、重建、部署代码和测量性能是一个非常缓慢的过程。

有什么建议可以帮我加速这个过程吗?

  • 我必须首先针对交叉目标优化吗?具体目标优化?
  • 在我的x86主机上迭代并在我的目标上测试我的优化是个好主意吗?恐怕最好的优化只适用于特定的体系结构。
  • 我可以使用像QEMU这样的仿真器来更快地迭代吗?说得通吗?
  • 在不运行汇编程序代码的情况下分析汇编程序代码是否是检查优化和性能改进结果的最佳方法?我尝试运行一些小的修改,并比较GCC -S的结果。产量变化很大。
EN

回答 2

Stack Overflow用户

发布于 2022-11-04 15:05:42

因为这是关于浮点向量的处理,所以可能值得检查是否可以用布拉斯或甚至LAPACK原语重写算法。

这不仅将删除循环,而且还使您能够使用许多CPU体系结构可用的高度优化的BLAS库。

对于ARM,有一个Arm性能库,它包括BLAS例程(以及其他数学例程)。

因此,要回答您的问题:最好使用标准接口中的函数,并部署这些函数的优化实现。

票数 1
EN

Stack Overflow用户

发布于 2022-11-04 19:52:30

QEMU根本不是一个循环精确的模拟器.它甚至没有尝试模拟性能,只是为了尽可能快地模仿。

也许你最好读一些你关心的最慢的目标上的主要瓶颈。就像Cortex-M,特别是如果您使用的是没有缓存或SIMD的,尽管如果您需要做一些FP繁重的工作,这将是一个问题。如果您的工作负载需要更多的FP吞吐量,而不是目标芯片上的最大理论值,那么在进行基准测试之前,您需要对算法进行更改。或者你需要选择一个功能更强的微控制器;IIRC,一些高端的Cortex-M有霓虹灯和代码/数据缓存。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74318721

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档