環境
カルマコアラはまだ「目覚めている」ので、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に転送する場合にも大きな増加が見られます。マイナスは呼び出しの「価格」です。
シミュレーター
![シミュレーター](http://media.stavki24.ru.s3.amazonaws.com/disdis/Simulator.png)
HTC Magic
![HTC Magic HTC Magic](http://media.stavki24.ru.s3.amazonaws.com/disdis/HTCMagic.png)
そして今、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](http://media.stavki24.ru.s3.amazonaws.com/disdis/iPhone.png)
結果はただ私を襲った。 数学とコード最適化でのみ失われます。 新しいデバイスのリリースにより、最初の問題は解決されると思います。
iPhoneおよびAndroidのソースをテストします。
PS電話機にファームウェア1.6をインストールできるようになり次第、OpenGL比較を実施します。