我目前正在JNI和OpenCV的帮助下使用C ++编写一个简单的Android程序。 输入是存储为Mat的图像。 我希望在C ++中编写自己的规范化函数,而不是使用OpenCV的规范化函数。 据我所知,有支持NEON。 但是,查看NDK文件夹中的HelloNeon示例,我意识到代码是用NEON instrinsics编写的。
问题: 有没有办法直接将我的C ++代码编译成NEON代码? 即我希望避免在NEON内在函数中编写函数。
谢谢。
答案 0 :(得分:1)
很大程度上取决于编译器。 gcc和clang都支持"自动矢量化"在最近的版本中,但生成的代码的质量变化很大 - 主要取决于实际的源代码。与往常一样,编译器首先负责生成正确的代码,其次是生成快速/高效的代码。如果有疑问,请选择" safe"选项。
然而,应该使用-mfpu=neon -ftree-vectorize
。
我确实希望你需要按摩"然而,这使得它矢量化的代码 - 至少是我在x86上的经验,编译器将在向量化时尝试构建SSE指令。它在相当简单的情况下取得了成功,但又回归到常规代码"当代码更复杂时。后来的编译器通常比旧版本更好地工作。
如果你真的需要获得良好的矢量化结果,你可能最终需要使用Neon内在函数。