Как оптимизировать собственный код с помощью android-ndk (Оптимизация скорости)

Я компилирую собственный код, используя cygwin и Windows7. У меня есть много советов по оптимизации в Интернете.

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

Но я не могу точно понять, как их установить на Application.mk и Android.mk. Я пробовал много случаев, применяя приведенные выше советы. но, я не думаю, что оптимизация применяется в моем собственном коде.

Application.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)

Надеюсь, много комментариев.


Кроме того,

Сначала я попытался сравнить случаи между указанным выше флагом и без него. (например, я скомпилировал свою программу с помощью APP_OPTIM: = release в Application.mk, а затем я скомпилировал ее без нее или с APP_OPTIM: = debug, снова.) Но я не вижу никакого изменения скорости работы.

Во-вторых, это самое важное, моя программа сравнивает скорость двух модулей. (Для удобства я называю их модулем A, B) Модуль A предварительно создан (это libcrypto.so в Android.mk). И я хочу применить оптимизацию в модуле B. Прежде всего, я сравнил тест скорости модулей A и B на ПК (Visual Studio 2010). Когда я пробовал модули A и B на ПК, модуль B был быстрее, чем A. (Конечно, я предварительно скомпилировал модуль A, и я использую его, позвонив в библиотеку.) Теперь я портирую свою программу для ПК в нее для Android. Но в Android модуль B слишком медленнее, чем A.

Поэтому я пришел к выводу, что это не оптимизировано.

Таким образом,

  • Я сравнивал скорость между флагом и без него.
  • При запуске этой программы на ПК предварительно скомпилированный модуль A работает быстрее, чем B, но в Android это совершенно противоположно.

Вы пытаетесь решить мою проблему? Заранее благодарю вас.

Ответ 1

APP_OPTIM: = release

Поместите строку APP_OPTIM := release в файл Application.mk

ndk-build NDK_DEBUG = 0

Просто передайте NDK_DEBUG=0 в качестве параметра в ndk-build script. Это вам не нужно, если вы определяете APP_OPTIM := release.

-DNDEBUG

Это должно войти в ваш LOCAL_CFLAGS:

LOCAL_CFLAGS += -DNDEBUG

LOCAL_CFLAGS + = -O2

Это не требуется на самом деле, так как Android NDK уже определяет оптимизацию -O2.