【问题标题】:How do Android programs make use of NEON SIMD?Android 程序如何使用 NEON SIMD?
【发布时间】:2012-07-15 22:31:55
【问题描述】:

我对 cpu 的特性有了一点了解,偶然发现了 NEON。

从我读到的内容来看,NEON 似乎需要特定的编程才能使用它,但这是完全正确的吗,或者具有此功能的 CPU 是否仍然找到方法来实现它并加速某些应用程序的媒体处理,即使没有具体的代码吗?

【问题讨论】:

  • 指令集扩展需要以something(驱动程序/内核/C库等)为目标。
  • 从某种意义上说,Android 编译器会在一定程度上做到这一点(因为并非所有 CPU 都具有该功能。) ?我看到这就像英特尔 CPU 的 MMX 扩展,我认为最初必须由程序员针对,然后编译器只是假设它存在,然后它就过时了..
  • 编译器可能会利用一些优化——但对于那些声称“60%-150% 数字”的人来说,它仍然需要手工编码和内在的使用知识..(不是那个你会用汇编编写整个程序,而不是编解码器或 3d 转换等繁重的部分)

标签: android neon


【解决方案1】:

有多种方法可以使用 NEON 指令。其中一些是:

  • 库。您的 memcpy 很有可能是使用 NEON 手工制作的。 API 中的音乐/视频播放库使用 NEON 和/或 GPU 进行加速。 Aso,有使用它的第三方库。高通公司的 FastCV 就是一个很好的例子
  • 编译器发布的指令。某些编译器在提供正确选项时会发出 NEON 指令。大多数编译器将使用 neon 进行浮点运算,但不会对其进行矢量化。他们会将该单元用作单一数据单元,只是因为它既快速又方便。 GCC 和 ARM 编译器中有一些矢量化功能,但它们的范围和结果确实有限。
  • 带有内在函数的手工编码 C http://gcc.gnu.org/onlinedocs/gcc/ARM-NEON-Intrinsics.html 这可能是开始使用 NEON 世界的最佳方式。
  • 手工编码的汇编器。如果您想获得最大性能,这似乎是最好的。它还需要大量的努力和 CS 知识。

  • 最后但同样重要的是,您只需下载使用 NEON 的应用程序即可使用它。您最喜欢的音乐播放器和相机应用让您的智能手机中的 NEON 装置得到充分利用。

结论:NEON的用法很多,但只有在代码中特别包含NEON指令的情况下才会用到。从技术上讲,正如@pst 所说,它必须由一段代码定位

【讨论】:

  • 谢谢。您提到音乐/视频播放是否意味着当我们使用 SoundPool 时 Android 会自动使用它(即为其编译)? (我注意到两部手机在启动音效的速度上存在很大差异,一部有,一部没有 cpu 功能中列出的霓虹灯。)
  • Android 很可能为其音频 API 提供了优化版本,用于支持 NEON 等的手机,以及用于不支持 NEON 的简单 C++ 版本。我没有检查Android源代码或驱动程序,但这是一个标准模型。
猜你喜欢
  • 1970-01-01
  • 2013-02-20
  • 2020-12-12
  • 2015-06-26
  • 2015-08-13
  • 2014-09-18
  • 2015-08-12
  • 2016-11-04
  • 1970-01-01
相关资源
最近更新 更多