2013-08-25 9 views
5

के साथ मूल कोड को अनुकूलित करने के लिए मैं साइगविन और विंडोज 7 का उपयोग कर मूल कोड संकलित कर रहा हूं। मुझे इंटरनेट पर कई अनुकूलन युक्तियां मिलीं।एंड्रॉइड-एनडीके (स्पीड ऑप्टिमाइज़ेशन)

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

लेकिन मुझे यह समझ में नहीं आता कि एप्लिकेशन.एमके और एंड्रॉइड.एमके पर इन्हें कैसे सेट किया जाए। मैंने उपरोक्त युक्तियों को लागू करके कई मामलों की कोशिश की। लेकिन, मुझे नहीं लगता कि अनुकूलन मेरे मूल कोड में लागू होता है।

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 के साथ अपना प्रोग्राम संकलित किया: = application.mk में रिलीज़ करें, और उसके बाद मैं इसके बिना या APP_OPTIM: = डीबग, फिर से संकलित करता हूं।) लेकिन, मुझे चलती गति का कोई भी परिवर्तन दिखाई नहीं दे रहा है।

दूसरा, यह सबसे महत्वपूर्ण है, मेरा प्रोग्राम दो मॉड्यूल की गति की तुलना करता है। (सुविधा के लिए, मैं उन्हें मॉड्यूल ए, बी कहते हैं) मॉड्यूल ए प्रीबिल्ट (जो एंड्रॉइड.एमके में libcrypto.so है) है। और मैं मॉड्यूल बी में अनुकूलन लागू करना चाहता हूं। सबसे पहले, मैंने पीसी में मॉड्यूल ए और बी की गति परीक्षण (विजुअल स्टूडियो 2010) की तुलना की। जब मैंने पीसी में मॉड्यूल ए और बी की कोशिश की, तो मॉड्यूल बी ए से तेज है (बेशक, मैंने मॉड्यूल ए का प्रीकंपल किया और मैं पुस्तकालय को कॉल करके इसका उपयोग करता हूं।) अब मैं पीसी के लिए अपना प्रोग्राम पोर्ट कर रहा हूं एंड्रॉयड के लिए। लेकिन एंड्रॉइड में, मॉड्यूल बी ए

से बहुत धीमी है इसलिए मैंने निष्कर्ष निकाला कि यह अनुकूलित नहीं है।

सारांश में,

  1. मैं ध्वज के साथ और इसके बिना के बीच गति की तुलना में।
  2. पीसी में इस प्रोग्राम को चलाने पर, precompiled मॉड्यूल ए बी से तेज़ है, लेकिन एंड्रॉइड में, यह बिल्कुल विपरीत है।

क्या आपको पता है कि मेरे प्रोग्राम की समस्या क्या है? पहले ही, आपका बहुत धन्यवाद।

+1

आप कैसे बता सकते हैं कि आपके संकलित कोड को अनुकूलित नहीं किया गया है? – krsteeve

+0

मैंने नीचे दिए गए उत्तर में विवरण जोड़ा। (जोड़ में ...) – user2642459

+0

आप अधिक जानकारी के साथ अपने प्रश्न को संपादित कर सकते हैं, आपको ऐसा उत्तर नहीं देना चाहिए जो वास्तव में एक उत्तर नहीं है। – krsteeve

उत्तर

11

APP_OPTIM: = रिलीज

फ़ाइल

NDK-निर्माण अपने Application.mk में लाइन APP_OPTIM := release रखो NDK_DEBUG = 0

बस ndk-build स्क्रिप्ट को पैरामीटर के रूप NDK_DEBUG=0 पारित । APP_OPTIM := release को परिभाषित करने के बाद आपको इसकी आवश्यकता नहीं है।

-DNDEBUG

यह आपके LOCAL_CFLAGS में जाने चाहिए:

LOCAL_CFLAGS += -DNDEBUG 

LOCAL_CFLAGS + = -O2

के बाद से पहले से ही एंड्रॉयड NDK -O2 को परिभाषित करता है यह, वास्तव में आवश्यक नहीं है अनुकूलन।

+0

कुछ भी गति को प्रभावित नहीं करता है। संदर्भ रूप से, application.mk और Android.mk दोनों को /jni/में रखा जाता है। – user2642459

+2

'-O3' के बारे में क्या – xdevs23

संबंधित मुद्दे