如何检查vDSP功能是否在氖上运行标量或SIMD

时间:2012-12-10 21:27:37

标签: iphone ios neon accelerate-framework vdsp

我目前正在使用vDSP框架中的一些功能,特别是vDSP_conv,我想知道是否有办法检查该功能是否在霓虹灯处理器上调用标量模式或处理SIMD。 该函数的documentation提到了一些必须满足的power-pc-architecture的标准或者调用了标量模式。现在我既不知道这些标准是否适用于iphone,也不知道如何检查我的函数是否调用标量模式或在霓虹灯上正常运行。

有没有办法检查这个?
谢谢!

1 个答案:

答案 0 :(得分:8)

在vDSP_conv实现中使用NEON代码。它在某些情况下使用而在其他情况下使用。

我们(产生vDSP的Vector和Numerics Group)没有公布关于哪些函数使用NEON的标准,因为存在许多复杂因素:每个调用的细节(多个参数的步幅,长度和对齐) ,执行代码的处理器模型,以及软件版本。

如果您对特定案例有疑问,我可能会对其进行调查。

您是出于好奇,还是表现不符合您的预期?通常,潜在的问题是实现执行的速度以及它是否可以更好。 SIMD可能是其中一些代理,但它不是实际目标。

更新以解决以下评论:

调查最近iOS的源代码,看起来在进行关联时获取SIMD代码所需要的只是在具有NEON的处理器上执行并将所有步幅设置为1.但是,代码专门用于使用对齐提示如果地址对齐,那么如果您将信号,滤波器和输出地址安排为16字节的倍数,则可以在某些处理器型号上获得更好的性能。如果可以的话,使用八的倍数作为滤波器元素的数量,但是四的倍数也是好的。

不幸的是,代码不是O(n•log(n));它使用直接算术而不是FFT实现,因此它是O(n 2 )。通常,它设计用于较短的长度,其中直接算术是合适的。如果用于关联的FFT算法对您有帮助,请在https://bugreport.apple.com提交功能请求。

无论使用何种算法,如果您希望获得与长度无关的相同信息,则较短的长度不会更好。这是因为,如果您处理较短的长度,则必须以各种组合处理更多长度,以获得相同的信息。我希望设计的目的是找出你需要的长度,以便相关产生你需要的信息,然后使用那个长度而不用细分它。