我目前正在使用 vDSP 框架中的一些函数,尤其是 vDSP_conv,我想知道是否有任何方法可以检查该函数是否调用标量模式或在霓虹处理器上处理 SIMD。
该函数的文档提到了一些必须满足或调用标量模式的 power-pc-architecture 标准。现在我既不知道这些标准是否也适用于 iphone,也不知道如何检查我的函数是否调用标量模式或在霓虹灯上正常运行。
有没有办法检查这个?
谢谢!
NEON 代码用于 vDSP_conv 实现。它在某些情况下使用,而在其他情况下不使用。
我们(产生 vDSP 的 Vector and Numerics Group)没有公布关于哪些函数使用 NEON 的标准,部分原因是有许多复杂的因素:每个调用的细节(跨度、长度和多个参数的对齐方式)、处理器模型执行代码和软件版本。
如果您对特定案例有疑问,我也许可以进行调查。
您是出于好奇而询问,还是表现不符合您的预期?一般来说,潜在的问题是实现的执行速度有多快以及它是否会更好。SIMD 可能是其中的一部分,但它不是实际目标。
更新以解决以下评论:
调查最近 iOS 的源代码,看起来在进行关联时获取 SIMD 代码所需的只是在具有 NEON 的处理器上执行并将所有步幅设置为 1。但是,如果地址是,该代码专门用于使用对齐提示对齐,因此如果您将信号、滤波器和输出地址安排为 16 字节的倍数,您可能会在某些处理器型号上获得更好的性能。如果可以,请使用 8 的倍数作为滤芯数量,但也可以使用 4 的倍数。
不幸的是,代码不是 O(n•log(n)); 它使用直接算术而不是 FFT 实现,所以它是 O(n 2 )。通常,它设计用于较短的长度,适合直接算术。如果相关的 FFT 算法对您有帮助,请在https://bugreport.apple.com提交功能请求。
无论使用哪种算法,如果您想要与长度无关的相同信息,则较短的长度并不是更好。这是因为,如果您处理较短的长度,则必须以各种组合处理更多的长度,以获得相同的信息。我希望设计是找出您需要的长度,以便相关性产生您需要的信息,然后使用该长度而不细分它。