私は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より遅すぎます。
したがって、これは最適化されていないと結論付けました。要約する
、
- は、Iフラグと、それなしでの速度を比較しました。
- このプログラムをPCで実行すると、プリコンパイルされたモジュールAは Bより高速ですが、Androidではまったく反対です。
私のプログラムの問題は何ですか?前もって感謝します。
コンパイルされたコードが最適化されていないことをどのように伝えることができますか? – krsteeve
下記の回答に詳細を追加しました。 (加えて...) – user2642459
あなたの質問をより詳細に編集することができますが、実際には答えではない回答をするべきではありません。 – krsteeve