我正在为iPhone制作一个矢量/矩阵库,它使用iPhone上的SIMD单元(3GS或更高版本)。 我怎样才能做到这一点? 我搜索了这个,现在我知道几个选项:
游戏中矢量/矩阵库最适合的方式是什么?
答案 0 :(得分:2)
您应该假设GCC不会自动对您的代码进行矢量化,因为这听起来不太可能发生!
就像保罗所说,为了从iPhone获得最佳性能,你应该尽可能多地使用NEON SIMD指令编写自己的ARM汇编代码。但这假设您了解ARM汇编语言以及NEON,时序延迟等。因此,如果您不想学习ARM汇编语言,那么Apple的Accelerate框架和ARM的OpenMAX库都有许多已经用ARM汇编编写的函数语言与NEON SIMD指令。
因此,如果您可以使用Accelerate或OpenMAX,那么它们应该非常好。我没有比较2,看看哪一个实际上更快,但我认为ARM的OpenMAX比Apple设计NEON规格的实施略快!但他们都应该跑得非常快。
答案 1 :(得分:2)
随着时间的推移,新答案:
现在,子弹物理引擎已针对NEON SIMD进行了优化。 http://bulletphysics.org/Bullet/phpBB3/viewtopic.php?t=8490
答案 2 :(得分:1)
为了做得好,您可能需要编写自己的SIMD例程。在gcc而不是汇编程序中使用Neon C内在函数来减轻这样做的痛苦。
答案 3 :(得分:1)
我使用内联ASM创建了几个NEON优化的Mat * Mat和Mat * Vec例程。它们是乌龙引擎的一部分,但它们属于MIT许可证,因此您可以随意使用它们:
答案 4 :(得分:0)
Apple现在拥有<simd/simd.h>
,它是针对小向量,矩阵和四元数进行优化的数学例程库,是您提到的Accelerate框架的一部分。
似乎这可能是当今最简单的方法。
https://developer.apple.com/documentation/accelerate/simd?language=objc