Android NDK vs SDK vs iPhone

環境



カルマコアラはまだ「目覚めている」ので、MacOSで書き込みます。

Eclipse Galileo、Android SDK 1.6r1およびNDK 1.6r1がインストールおよび構成されています。

HTC Magic(32A)のみが手元にあるため、NDK 1.5で記述します。

このテストは、ゲームをiPhoneからAndroidに移植する前に、土壌を「テスト」することを目的として書かれています。



テスト中



次のオプションがテストとして採用されました。



なぜそう選択するのですか?

10 ^(-15)の精度で区間(-10; 10)の方程式Y = 3 * cos(2 * x-4)に対して「半除算法」が選択されました。

このデバイスには浮動小数点計算を高速化するコプロセッサーがないため、JavaからJNIに切り替えることで作業が向上するかどうかを確認するのは興味深いものでした。 もう1つは、大量のデータと「メソッド」の呼び出しが多数あることです。 大量のデータがあるコンパートメントで再帰をチェックするために、迅速な並べ替えが行われました;再帰を避けるために、シェルアルゴリズムが採用されました。 特にデータを操作するパフォーマンスをテストするには、配列反転を使用します。

JNIとJavaの「メソッド」を呼び出すコストを見積もるために、ダミーメソッドを10,000回呼び出します。

並べ替えには、事前に作成された10,000個の要素のint配列を使用します。

結果は、シミュレーター(2.4GHz Intel Core 2 Duo)、HTC Magic(32A、1.5、コア2.6.29 + bfs)、およびiPhone3G(3.1)で得られました。 すべてのテストメソッドは純粋なCで作成されました。



結果



シミュレーター



- QS SS スワップ Div2 空の
JNI(シム) 10590 253735 699 210339 13895
JAVA(シム) 100650 4573416 7861 334483 7745
シム% 89.48 94.45 91.11 37.12 -79.41


*%-Java JNIの動作速度をパーセントで示します



HTC Magic(32A 1.5、2.6.29-myhero-bfs)



- QS SS スワップ Div2 空の
ジニ 7469 117139 880 109197 8885
Java 63569 2902912 5959 213278 5193
88.25 95.96 85.23 48.8 -71.1


*%-Java JNIの動作速度をパーセントで示します



Androidプラットフォームの時間はjava.lang.System.nanoTime()関数を使用して撮影され、iPhoneの場合はmach_absolute_time()を使用しました。

各テストは30回実行され、結果は平均化されました。 最初の結果は、明らかにJavaの仕様が原因で一般的な指標から外れたため、スキップされました。

結果からわかるように、NDKは大量のデータを処理する場合に非常に効果的です。「数学」をJNIに転送する場合にも大きな増加が見られます。マイナスは呼び出しの「価格」です。

シミュレーター



HTC Magic

HTC Magic

そして今、iPhoneと比較して、奇跡を待つべきではありません...

iPhone



- QS SS スワップ Div2 空の
HTC Magic JNI 7469 117139 880 109197 8885
iPhone 33531 1310358 1820 22405 769
77.73 91.06 51.65 -387.38 -1055.4


*%-MagicがiPhoneから動作する速度をパーセントで示します



この図は半除算法を示していません。これは、浮動小数点演算アクセラレーションコプロセッサを搭載したiPhoneが単純にMagicを無効にすることがわかっているためです(結果からわかります)。 iPhoneコンパイラは「そのようなコード」を最適化するため、ダミーメソッドも削除されます。

iPhone

結果はただ私を襲った。 数学とコード最適化でのみ失われます。 新しいデバイスのリリースにより、最初の問題は解決されると思います。



iPhoneおよびAndroidのソースをテストします。

PS電話機にファームウェア1.6をインストールできるようになり次第、OpenGL比較を実施します。




All Articles