3

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

  • Apple (iPhone OS 4) 的加速框架 (BLAS+LAPACK+...)
  • 来自 ARM 的 OpenMAX 实现库
  • GCC 自动矢量化功能

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

4

5 回答 5

2

随着时间的推移,会有新的答案:

子弹物理引擎现已针对 Apple 的 NEON SIMD 进行了优化。http://bulletphysics.org/Bullet/phpBB3/viewtopic.php?t=8490

于 2012-10-17T13:28:21.130 回答
2

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

就像 Paul 说的那样,为了让 iPhone 发挥最大性能,您应该尽可能多地使用 NEON SIMD 指令编写自己的 ARM 汇编代码。但这假设您了解 ARM 汇编语言以及 NEON、时序延迟等。因此,如果您不想学习 ARM 汇编语言,那么 Apple 的 Accelerate 框架和 ARM 的 OpenMAX 库都有许多已经用 ARM 汇编编写的函数带有 NEON SIMD 指令的语言。

因此,如果可以使用 Accelerate 或 OpenMAX,它们都应该非常好。我没有比较 2 来查看哪个实际上更快,但我认为 ARM 的 OpenMAX 比 Apple 的实现稍快,因为 ARM 设计了 ​​NEON 规格!但是它们都应该运行得非常快。

于 2010-10-13T11:47:49.753 回答
1

I created a couple of NEON optimized Mat*Mat and Mat*Vec routine using inline ASM. They are part of the Oolong Engine, but they are under the MIT license, so you can use them as you like:

http://code.google.com/p/oolongengine/source/browse/trunk/Oolong%20Engine2/Math/neonmath/neon_matrix_impl.cpp

于 2011-04-21T19:02:00.730 回答
1

要做好它,您可能需要编写自己的 SIMD 例程。在 gcc 而不是汇编程序中使用 Neon C 内在函数来减轻这样做的痛苦。

于 2010-05-01T09:33:44.790 回答
0

Apple 现在拥有<simd/simd.h>一个针对小型向量、矩阵和四元数的优化数学例程库,作为您提到的 Accelerate 框架的一部分。似乎这可能是今天最简单的方法。 https://developer.apple.com/documentation/accelerate/simd?language=objc

于 2018-07-12T17:01:46.613 回答