Android程序如何利用NEON SIMD?

Android程序如何利用NEON SIMD?,android,neon,Android,Neon,我一直在学习cpu的一些特性,偶然发现了霓虹灯 据我所知,霓虹灯似乎需要特定的编程来使用它,但这完全是真的吗,或者,即使没有特定的代码,具有此功能的CPU是否仍能找到方法对某些应用程序解除限制并加快媒体进程?使用霓虹灯指令有多种方法。其中包括: 图书馆。这是一个很好的机会,你的memcpy是手工制作使用霓虹灯。API中的音乐/视频播放库使用NEON和/或GPU进行加速。麻生太郎,有第三方图书馆使用它。高通公司的FastCV就是一个很好的例子 编译器发出指令。某些编译器在提供正确选项时会发出霓虹

我一直在学习cpu的一些特性,偶然发现了霓虹灯


据我所知,霓虹灯似乎需要特定的编程来使用它,但这完全是真的吗,或者,即使没有特定的代码,具有此功能的CPU是否仍能找到方法对某些应用程序解除限制并加快媒体进程?

使用霓虹灯指令有多种方法。其中包括:

  • 图书馆。这是一个很好的机会,你的memcpy是手工制作使用霓虹灯。API中的音乐/视频播放库使用NEON和/或GPU进行加速。麻生太郎,有第三方图书馆使用它。高通公司的FastCV就是一个很好的例子
  • 编译器发出指令。某些编译器在提供正确选项时会发出霓虹灯指令。大多数编译器将使用neon进行浮点运算,但不会将其矢量化。他们将把这个单元作为一个单一的数据单元来使用,只是因为它既快捷又方便。GCC和ARM编译器中有一些矢量化功能,但它们的范围和结果都非常有限
  • 手工编码的C语言,带有内部函数,这可能是在霓虹灯世界中开始学习的最好方法
  • 手工编码汇编程序。这似乎是最好的,如果你想达到最高性能。它还需要大量的努力和CS知识

  • 最后但并非最不重要的一点是,您可以通过下载使用NEON的应用程序来使用NEON。您最喜爱的音乐播放器和照相机应用程序可以很好地使用智能手机中的霓虹灯


结论:NEON有很多用法,但只有在代码中特别包含NEON指令时才使用它。更严格地说,正如@pst所说,它必须以一段代码为目标。

指令集扩展需要以某些东西(驱动程序/内核/C库等)为目标。从某种意义上说,Android编译器将在一定程度上做到这一点(因为并非所有CPU都有此功能)?我觉得这就像英特尔CPU的MMX扩展一样,我认为它最初是程序员的目标,然后编译器假设它存在,然后它就过时了。编译器可能可以利用一些优化——但对于那些声称的“60%-150%的数字”,它仍然需要手工编码和内在的使用知识。。(并不是说你会用汇编语言编写整个程序,而是编解码器或3d转换等繁重的部分)谢谢。你提到的音乐/视频播放是否意味着当我们使用SoundPool时Android会自动使用它(即为它编译)?(我注意到两个手机的声音效果有很大的不同,一个是在CPU的特性中列出的霓虹灯,另一个是在CPU特性中列出的霓虹灯。)Android最有可能为它的音频API提供一个优化版本,用于支持霓虹灯的手机,以及那些没有霓虹灯的简单的C++版本。我没有检查Android源代码或驱动程序,但这是一个标准模型。