2013-08-25 30 views
5

私はcygwinとWindows7を使ってネイティブコードをコンパイルしています。 私はインターネット上で多くの最適化のヒントを得ました。android-ndk(速度最適化)でネイティブコードを最適化する方法

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) 

私は多くのコメントを願っています。また


まず、私は上記のフラグをそれ無しとの間の場合を比較してみました。 (たとえば、私は自分のプログラムをApplication_OPTIM:= Application.mkのリリースでコンパイルしましたが、それを使わずに、またはAPP_OPTIM:= debugでコンパイルしました)しかし、実行速度の変更はありません。

次に、これが最も重要なMyプログラムで、2つのモジュールの速度を比較します。 (便宜上、モジュールA、Bと呼んでいます)モジュールAはあらかじめビルドされています(これはAndroid.mkのlibcrypto.soです)。そして、モジュールBに最適化を適用したいと思います。まず、モジュールAとBの速度テストをPC(Visual Studio 2010)で比較しました。私はモジュールAとBをPCで試してみましたが、モジュールBはAより速いです(もちろん、モジュールAをプリコンパイルしてライブラリを呼び出すことで使用しました)。アンドロイド用。しかし、Androidでは、モジュールBはAより遅すぎます。

したがって、これは最適化されていないと結論付けました。要約する

  1. は、Iフラグと、それなしでの速度を比較しました。
  2. このプログラムをPCで実行すると、プリコンパイルされたモジュールAは Bより高速ですが、Androidではまったく反対です。

私のプログラムの問題は何ですか?前もって感謝します。

+1

コンパイルされたコードが最適化されていないことをどのように伝えることができますか? – krsteeve

+0

下記の回答に詳細を追加しました。 (加えて...) – user2642459

+0

あなたの質問をより詳細に編集することができますが、実際には答えではない回答をするべきではありません。 – krsteeve

答えて

11

APP_OPTIMは:=ジャストndk-buildスクリプトにパラメータとしてNDK_DEBUG=0を渡すNDK-構築NDK_DEBUG = 0

を提出あなたのApplication.mkにラインAPP_OPTIM := releaseを入れ

をリリース。一度あなたがAPP_OPTIM := releaseを定義すると、それを必要としません。

-DNDEBUG

これはあなたのLOCAL_CFLAGSに入る必要があります。

LOCAL_CFLAGS += -DNDEBUG 

LOCAL_CFLAGS + = -O2

のAndroid NDKが既に-O2を定義するので、これは、実際に必要とされていません最適化。

+0

何も速度には影響しません。参考に、Application.mkとAndroid.mkは/jni /に置かれます。 – user2642459

+2

'-O3'について – xdevs23