建议使用哪些软件包在 Android 平台上执行复杂的数学运算,如向量乘法、向量转换(int 到 FP)等。看起来 java.lang.math 不够粗壮。有人建议我研究 NDK 和一个好的 c/c++ lib 或 siglib。还有其他建议吗?谢谢...
1 回答
去年,我正在阅读一本包含 SIMD 数学主题的书。您可能知道,SIMD 数学用于加速向量乘法和向量转换过程,我查看了 Sony 的 VectorMath 库。
它既方便又易于使用,尽管我无意构建处理器昂贵的应用程序。我认为问题在于它实际上是为索尼 PS3 处理器架构设计的,我不确定它是否适用于 ARM 芯片组。
以下是链接: Bullet SIMDMath 库:http ://bullet.svn.sourceforge.net/viewvc/bullet/trunk/Extras/simdmathlibrary/
Bullet VectorMath 库:http ://bullet.svn.sourceforge.net/viewvc/bullet/trunk/Extras/vectormathlibrary/
编辑
直接引用维基百科 ARM 架构页面:
高级 SIMD (NEON) 高级 SIMD 扩展(又名 NEON 或“MPE”媒体处理引擎)是一个组合的 64 位和 128 位单指令多数据 (SIMD) 指令集,可为媒体和信号处理应用程序提供标准化加速。NEON 包含在所有 Cortex-A8 设备中,但在 Cortex-A9 设备中是可选的。 [33] NEON 可以在运行频率为 10 MHz 的 CPU 上执行 MP3 音频解码,并且可以运行不超过 13 MHz 的 GSM 自适应多速率 (AMR) 语音编解码器。它具有全面的指令集、独立的寄存器文件和独立的执行硬件。 [34] NEON 支持 8 位、16 位、32 位和 64 位整数和单精度(32 位)浮点数据,并在 SIMD 操作中运行,以处理音频和视频处理以及图形和游戏处理。在霓虹灯中,SIMD 最多同时支持 16 个操作。NEON 硬件共享与 VFP 中使用的相同的浮点寄存器。ARM Cortex-A8 和 Cortex-A9 等设备支持 128 位向量,但一次只能执行 64 位,[32] 而较新的 Cortex-A15 设备可以一次执行 128 位。
这意味着即使 SIMD 指令没有保修,它们也可能有。
和 Tegra 家族:
与 Tegra 2 相比,Tegra 3 中的 ARM Cortex-A9s 现在支持 ARM 的 SIMD 扩展 - NEON。