首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于Neon/RPi的64位DSP滤波性能优化

基于Neon/RPi的64位DSP滤波性能优化
EN

Stack Overflow用户
提问于 2020-09-29 08:36:40
回答 1查看 287关注 0票数 4

我有一个32位的C++ DSP音频处理项目的模拟设备,夏克DSP处理器,并需要把它转移到64位处理,这已经有一段时间以来,嵌入式用例与ARM AArch64。

我正在考虑两个备选方案:

  • 可以使用我自己定制的FIR和IIR过滤实现,也可以使用
  • 进行一些为AArch64和Neon.

优化的库函数。

在64位精度的基础上,我有相当多的CPU密集型处理。我还需要获得更多的处理能力,因为当前Sharc性能也是一个瓶颈。IIR和FIR功能应该提供64位实时、基于块的信号处理.

我的目标平台是Raspberry,3B+可能是4。我需要的函数类型是提供的,例如在CMSIS库中作为arm_biquad_cascade_df2T_f64() (它实际上与一个辅助init函数一起工作,该函数实现了以基于块的方式处理数据所需的状态数组)。图书馆的运作似乎是64位的。但是我怀疑它们是否适合和优化AArch64,因为CMSIS通常被标记为32位,Ne10也是类似的。

我正在探索自定义代码路径,我的问题是:

possible

  • which
  • 哪种霓虹灯和AArch64的特定优化是相对于普通C实现的基于块的双四叉函数

的性能提高的数量级的。

或者,当它留给编译器优化和使用Neon时,它就足够了?

EN

回答 1

Stack Overflow用户

发布于 2020-09-29 16:46:02

如果您有选择的话,为了性能,您肯定希望选择AArch64而不是32位Neon实现。AArch64有更多/更宽的矢量寄存器。CPU从无序执行中获利更多,因为AArch64放弃了普遍存在的32位指令集的条件执行,这很容易通过条件标志导致指令之间的额外依赖。

我最近从一项具体的优化任务中得出的个人结论:

impressive

  • helpful

  • clang比gcc

  • clang 10更好地实现了自矢量化,比clang 8

  • clang对特定皮质核心的调整更好:-Rpass=loop-vectorize -Rpass-missed=loop-vectorize -Rpass-analysis=loop-vectorize

  • neither编译器设法克服了AArch64向量gather-loads

  • manually矢量代码的不足,使用ARM矢量本质的2x

  • programming自动矢量化仍然受到索引不足的阻碍,并且ARM将从ARMv7到AArch64

  • 的所有向量指令重新命名为AArch64

请注意,这些经验不应泛化,这是一项具体的任务。

手动优化的实现所获得的性能取决于使用特定的普通C代码的自动向量器的成功与否。

我从一个简单的C实现开始,如果它是自动矢量化的,我研究了llvm-mca输出,发现了自动向量化代码的弱点,并从那里开始工作。

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

https://stackoverflow.com/questions/64115868

复制
相关文章

相似问题

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