上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
--.--.-- -- l スポンサー広告 l top

今回は、Android NDKにおけるAndroid.mkとApplication.mkに書くべき最適化オプションの考察です。

まず手始めにndk-buildコマンドには「NDK_DEBUG=0」は必須オプションです。
これを付けることによってデバッグシンボルが付与されなくなりますので、
デバッグはしずらくなりますが、libのサイズが小さくなり処理のオーバーヘッドもなくなります。

それでは本題のAndroid.mkとApplication.mkに入ります。
・Android.mk
Android.mkでは基本的な設定を行っていきます。
注意点としては、CPUの動作モードをarmモードにするかかthumbモードにするかです。
基本的に整数のみの計算の場合はthumbモードが高速に動作してくれます。
float系の演算が入った場合はFPUを利用したほうが高速になりますのでarmモードで動作させるようにします。
これは作成したプログラムを確認してみてください。

armモードの設定:

LOCAL_ARM_MODE := arm
LOCAL_ARM_NEON := true
TARGET_ARCH_ABI := armeabi-v7a



thumbモードの設定:

LOCAL_ARM_MODE := thumb
LOCAL_ARM_NEON := true
TARGET_ARCH_ABI := armeabi-v7a



・Application.mk
Application.mkはgccのオプションとしてはかなり後ろのほうに定義してくれます。

「-NDK_DEBUG=0」を付けると[-O2」が定義されるのですが、Application.mkにて「-O3」を定義すると
こちらが後ろになるため「-O3」オプションが有効になります。
Android.mkでは効かないオプションを付けていくと良さそうです。

FPUを利用する前提で最適化オプションを設定しています。

APP_CFLAGS := -O3 -mcpu=cortex-a8 -mfpu=neon -mfloat-abi=softfp -fPIC -march=armv7-a -ffunction-sections -funwind-tables -fstack-protector -fno-short-enums -fno-exceptions -fno-rtti



上記はC++のときの最適化オプションですので、C言語のみの場合は「-fno-rtti」を外します。

APP_CFLAGS := -O3 -mcpu=cortex-a8 -mfpu=neon -mfloat-abi=softfp -fPIC -march=armv7-a -ffunction-sections -funwind-tables -fstack-protector -fno-short-enums -fno-exceptions



今のところの最適化オプションはこんな感じです。
ARMv7以前のコアを搭載しているAndroidではFPUにneonが使えないので、別の定義が必要になりますが、
今のところXperiaX10まで遡っても問題なく動作してますので、これでOKかと。

またアップデートがありましたら公開していきます。
スポンサーサイト
2012.04.01 Sun l Android l コメント (0) トラックバック (0) l top

コメント

コメントの投稿












トラックバック

トラックバック URL
http://cbrmovistar.blog137.fc2.com/tb.php/6-d1eacad3
この記事にトラックバックする(FC2ブログユーザー)
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。