我有一个32位的C++ DSP音频处理项目的模拟设备,夏克DSP处理器,并需要把它转移到64位处理,这已经有一段时间以来,嵌入式用例与ARM AArch64。
我正在考虑两个备选方案:
优化的库函数。
在64位精度的基础上,我有相当多的CPU密集型处理。我还需要获得更多的处理能力,因为当前Sharc性能也是一个瓶颈。IIR和FIR功能应该提供64位实时、基于块的信号处理.
我的目标平台是Raspberry,3B+可能是4。我需要的函数类型是提供的,例如在CMSIS库中作为arm_biquad_cascade_df2T_f64() (它实际上与一个辅助init函数一起工作,该函数实现了以基于块的方式处理数据所需的状态数组)。图书馆的运作似乎是64位的。但是我怀疑它们是否适合和优化AArch64,因为CMSIS通常被标记为32位,Ne10也是类似的。
我正在探索自定义代码路径,我的问题是:
possible
的性能提高的数量级的。
或者,当它留给编译器优化和使用Neon时,它就足够了?
发布于 2020-09-29 16:46:02
如果您有选择的话,为了性能,您肯定希望选择AArch64而不是32位Neon实现。AArch64有更多/更宽的矢量寄存器。CPU从无序执行中获利更多,因为AArch64放弃了普遍存在的32位指令集的条件执行,这很容易通过条件标志导致指令之间的额外依赖。
我最近从一项具体的优化任务中得出的个人结论:
impressive
-Rpass=loop-vectorize -Rpass-missed=loop-vectorize -Rpass-analysis=loop-vectorize
f 219请注意,这些经验不应泛化,这是一项具体的任务。
手动优化的实现所获得的性能取决于使用特定的普通C代码的自动向量器的成功与否。
我从一个简单的C实现开始,如果它是自动矢量化的,我研究了llvm-mca输出,发现了自动向量化代码的弱点,并从那里开始工作。
https://stackoverflow.com/questions/64115868
复制相似问题