我正在为游戏制作矢量/矩阵库,该库利用iPhone上的SIMD单元(3GS或更高版本)。我怎样才能做到这一点?我搜索了这一点,现在我知道了几个选择:

  • Apple(iPhone OS 4)的加速框架(Blas+Lapack+...)
  • ARM的OpenMax实施库
  • GCC自动矢量化功能

矢量/矩阵库最适合游戏的方法是什么?

有帮助吗?

解决方案

为了做得很好,您可能需要编写自己的SIMD例程。使用GCC中的霓虹灯C固有,而不是汇编器来减轻这样做的痛苦。

其他提示

您应该假设GCC不会自动化您的代码,因为听起来这不太可能发生!

就像保罗所说的那样,要从iPhone获得最多的性能,您应该使用霓虹灯SIMD说明为自己的武器组装代码编写自己的手臂装配代码。但这假设您了解手臂组装语言以及霓虹灯,时机延迟等。因此,如果您不想学习ARM组装语言,那么Apple的加速框架和Arm的OpenMax库都具有许多已经在Arm Assembly中写成的功能带有霓虹灯SIMD说明的语言。

因此,如果您可以使用它们,则加速或OpenMax应该非常好。我还没有比较2个实际上更快的速度,但是我认为Arm的OpenMax比Apple的实现速度稍快,因为ARM设计了霓虹灯规格!但是他们都应该非常快。

随着时间的流逝,新答案:

现在,Bullet Physics引擎已由Apple优化为NEON SIMD。 http://bulletphysics.org/bullet/phpbb3/viewtopic.php?t=8490

我使用Inline ASM创建了几个霓虹灯优化的垫子*MAT*MAT*VEC例程。它们是Oolong Engine的一部分,但它们属于MIT许可证,因此您可以根据自己的方式使用它们:

http://code.google.com/p/oolongengine/source/browse/trunk/oolong%20engine2/math/neonmath/neon_matrix_impl.cpp

苹果现在有 <simd/simd.h> 这是您提到的加速框架的一部分,包括针对小型矢量,矩阵和四元组的优化数学例程库。似乎这可能是当今最简单的方法。https://developer.apple.com/documentation/accelerate/simd?language=Objc

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top