【发布时间】:2011-07-02 15:58:21
【问题描述】:
我有一些适用于 Android 的 C 代码,用于处理大量低级数字运算。我想知道我应该使用哪些设置(例如,对于我的 Android.mk 和 Application.mk)文件,以便生成的代码可以在所有当前的 Android 设备上运行,而且还可以利用针对特定芯片组的优化。我正在寻找好的默认 Android.mk 和 Application.mk 设置来使用,并且我想避免在我的 C 代码中乱扔#ifdef 分支。
例如,我知道 ARMv7 具有浮点指令,并且一些 ARMv7 芯片支持 NEON 指令,而默认的 ARM 都不支持这些指令。是否可以设置标志以便我可以使用 NEON 构建 ARMv7、没有 NEON 的 ARMv7 和默认的 ARM 构建?我知道如何做后两个,但不是全部 3。我对我使用的设置持谨慎态度,因为我认为当前的默认设置是最安全的设置以及其他选项有什么风险。
对于 GCC 特定的优化,我使用以下标志:
LOCAL_CFLAGS=-ffast-math -O3 -funroll-loops
我已经检查了所有这 3 个可以加快我的代码的速度。还有其他常见的我可以添加吗?
我的另一个技巧是在 Android.mk 中添加“LOCAL_ARM_MODE := arm”,以加快较新的 arm 芯片的速度(尽管我对这到底是做什么的以及在旧芯片上会发生什么感到困惑)。
【问题讨论】:
-
根据android.googlesource.com/platform/ndk/+/ics-mr0/docs/…,您应该将
CFLAGS=-march=armv7-a -mfloat-abi=softfp -mfpu=neon用于Neon。
标签: android c gcc java-native-interface android-ndk