Как оптимизировать собственный код с помощью 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
.