Как оптимизировать нативный код с помощью android-ndk (Speed ​​Optimization)

Я компилирую нативный код, используя 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.

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

В итоге,

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

Вы думаете, в чем проблема моей программы? Заранее спасибо.

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 оптимизация.

Другие вопросы по тегам