【问题标题】:How to optimize a native code with android-ndk (Speed Optimization)如何使用 android-ndk 优化原生代码(速度优化)
【发布时间】:2013-08-27 21:57:09
【问题描述】:

我正在使用 cygwin 和 Windows7 编译本机代码。 我在网上得到了很多优化技巧。

APP_OPTIM := release
ndk-build NDK_DEBUG=0
-DNDEBUG
LOCAL_CFLAGS += -O2

但我不明白如何在 Application.mk 和 Android.mk 上设置这些。 我通过应用上述提示尝试了很多案例。 但是,我不认为优化应用在我的本机代码中。

应用程序.mk

APP_PROJECT_PATH := $(shell pwd)
APP_MODULES := native_lib
APP_OPTIM := release
APP_BUILD_SCRIPT := Android.mk
APP_ABI := armeabi

Android.mk

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)
LOCAL_MODULE := crypto
LOCAL_SRC_FILES := lib/libcrypto.so
include $(PREBUILT_SHARED_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE := native_lib
LOCAL_SRC_FILES := nativeC.c \
                   AES/main.c \
                   AES/aes.c \  

LOCAL_C_INCLUDES := ./lib                  
LOCAL_SHARED_LIBRARIES := crypto
LOCAL_CFLAGS += -O2
LOCAL_CFLAGS += -march=armv6 -marm -mfloat-abi=softfp -mfpu=vfp
LOCAL_LDLIBS += -ldl
include $(BUILD_SHARED_LIBRARY)

我希望很多cmets。


此外,

首先,我尝试比较使用上述标志和不使用上述标志的情况。 (例如,我在 Application.mk 中使用 APP_OPTIM := release 编译了我的程序,然后在没有它或使用 APP_OPTIM := debug 的情况下再次编译。)但是,我看不到运行速度的任何变化。

其次,这是最重要的,我的程序比较两个模块的速度。 (为方便起见,我称它们为模块 A、B) 模块 A 是预构建的(即 Android.mk 中的 libcrypto.so)。并且我想对模块B进行优化。首先,我比较了模块A和B在PC(Visual Studio 2010)中的速度测试。当我在PC中尝试模块A和B时,模块B比A快。(当然,我预编译了模块A并通过调用库来使用它。)现在我正在将我的PC程序移植到它里面对于安卓。但是在Android中,模块B比A慢。

因此,我得出结论,这是没有优化的。

总之,

  1. 我比较了有标志和没有标志的速度。
  2. 在PC上运行这个程序时,预编译模块A比 B, 但在 Android 中,则完全相反。

你觉得我的程序有什么问题吗?提前谢谢你。

【问题讨论】:

  • 你怎么知道你编译的代码没有优化?
  • 我在下面的答案中添加了详细信息。 (另外...)
  • 您可以编辑您的问题并提供更多详细信息,您不应做出实际上不是答案的答案。
  • 我编辑了我的问题。
  • 您的电脑是Intel 机器,而手机是ARM。如果您没有编写该代码,如果您不知道详细信息,则无法像Therefore, I concluded that this is not optimized. 这样提出声明。

标签: c++ optimization gcc android-ndk clang


【解决方案1】:

APP_OPTIM := 发布

APP_OPTIM := release 行放入Application.mk 文件中

ndk-build NDK_DEBUG=0

只需将NDK_DEBUG=0 作为参数传递给ndk-build 脚本。一旦你定义了APP_OPTIM := release,你就不需要它了。

-DNDEBUG

这应该进入你的LOCAL_CFLAGS:

LOCAL_CFLAGS += -DNDEBUG

LOCAL_CFLAGS += -O2

这实际上不是必需的,因为 Android NDK 已经定义了-O2 优化。

【讨论】:

  • 任何东西都不会影响速度。作为参考,Application.mk 和 Android.mk 都放在 /jni/.
猜你喜欢
  • 2012-05-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-23
  • 2016-03-07
相关资源
最近更新 更多