スポンサード リンク

T.Ishii's Software Library

HTML5 レトロ風ゲーム館

無料ブログはココログ

« JNIも試してみる | トップページ | 格好がついてきた »

JITよりもJNIが優秀

昨日書いたように、今日はJITコンパイラが動作するAndroid2.2以降のアプリがJNIで高速化できるか試してみたのだが、配列に入れたデータを単純操作する分には、6倍も高速化された。なので、早速、AGMPlayerのJNI化も始めた。多分、2倍は高速化できるだろう。

今日、初めに試してみたのは、65536個の要素がある入力用の配列と、同じ要素数の出力用の配列をJava側で用意し、入力データを1000倍して出力用配列に出力する、という単純なプログラムだった。

上記の処理を1万回行うと、Tegra2-1GHzのPHOTONでは、Javaでコードを組んだ場合には、37秒、JNIを使ってCで組んだ場合には、6秒かかった。なので、JNIを使うと、普通にJavaでコードを書いた場合に比べて、6倍も高速化された訳だ。

何故これほど高速化されるのか、というのは、昨日書いた通りだと思うのだが、Javaでは配列の要素にアクセスすると、必ず、アクセスしているインデックス値が要素数内にあるかどうかのチェックが入る筈なので、そんなチェックを一切しないネイティブコードと比べると、結構なオーバーヘッドが発生する事になるのだろう。

と、いう事で、Tegra2-1GHzのPHOTONでも、Javaが邪魔をしなければ、それなりの速度でデータ処理が行えるようなのだが、Corei7 2600の開発マシンで普通にC++で記述して確認してみた所では、同様の処理を10万回行っても、2秒しかかからなかった。

なので、Tegra2は、JNIを使ったとしても、Corei7 2600よりも、30倍は遅い、という事になる。まあ、同一クロックに換算すれば、10倍程度なのだが、それでも結構遅い。

遅い理由は、Tegra2が遅い、という事もあるのだろうが、JNIを使うと、JavaとCとのデータの受け渡し時にオーバーヘッドが発生するため、その影響もそれなりにある筈だ。

このため、あまり頻繁にJavaとCとの間でデータ交換が行われるのはマズイので、AGMPlayerのJNI化では、それなりの処理を一括して行わせるようにしている。

今の所、DCT逆変換とYV12逆変換をJNIでC側で処理させるようにしたのだが、元々、全体で50秒程度かかっていた処理時間が35秒程度にまで高速化されている。

その他の処理としては、圧縮データの展開処理もJNIでC側で処理させようと思っているので、多分、Javaオンリーの時に比べて、全体処理で2倍程度の高速化は行えるだろう。

更に、今の所、メモリの使い方は殆ど考慮せずに、Javaで確保したメモリ内容をC側で書き換えるような形になっているため、この辺を細工すれば、もう少し高速化できるかもしれない。

ちなみに、JNI化はEclipseのプロジェクトフォルダーにlibs/armeabiというフォルダーを作成して、その中に共有ライブラリを入れておけば、Eclipseがapkファイルを作成する時に自動的にパッケージングしてくれるので、全然、楽だ。

ただし、JNIで定義するC側の関数名にはパッケージ名も含まなければならないのだが、AGMPlayerのパッケージ名はメールアドレスから、jp.ne.so_net.js2.t_ishii.agmplayerにしてあるので、最初は、トラぶってしまった。

何故、トラぶったのか、というと、パッケージ名にアンダーバーが含まれる場合には、関数名では、そのアンダーバーは「_1」としなければならない、というのを知らなかったからだ。

つまり、AGMPlayerJNIというクラスでネイティブメソッドを定義する場合には、例えば、testという関数は、Java_jp_ne_so_1net_js2_t_1ishii_agmplayer_AGMPlayerJNI_test、という関数名にしなければならない。

と、いう事で、ちょっとトラぶったのだが、予想に反して、Androidでも、JNI化は大して難しい作業では無いようだ。

= この記事に関連する公開中ソフト =

AmuseGraphics

AmuseGraphics

(2013/12/08追加)

« JNIも試してみる | トップページ | 格好がついてきた »

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/534482/56226051

この記事へのトラックバック一覧です: JITよりもJNIが優秀:

« JNIも試してみる | トップページ | 格好がついてきた »

2018年10月
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31      

広告

プライバシーポリシー

  • 当サイトでは、第三者配信による広告(Google Adsense)サービスを利用しています。

    Google を含む第三者配信事業者は、Cookie を使用して、ユーザーのウェブサイトでの閲覧履歴に基づく広告を配信します。 Google 広告 Cookie を使用することにより、Google や Google のパートナーは当サイトや他のサイトへのアクセス情報に基づく広告をユーザーに表示できます。

    収集された情報がGoogleによってどの様に使用されるか、収集される情報をユーザーが管理する方法については、以下のリンクを参照下さい。

    ポリシーと規約 - Google