2012.02.11

【Android SDK】マルチスレッド性能テスト

いまさらながら、マルチスレッドの効果の具合が
わからなかったので確認してみます。

計測方法

ソースはこちら。
Link:ThreadTestプロジェクト

以下の関数を1億回呼び出し終了するまでの時間で計測。

public	float	length( float x, float y )
{
	return	(x * x) + (y * y);
}

上記のスレッドを複数立てて平均速度を結果とします。

結果

チェック機種は「Galaxy S2」

結果がこちら。

スレッド数 実行ミリ秒
1 8758
2 8936
3 11435
4 15970
5 18958
10 36412

1スレッドと2スレッドは差がありますが同じ結果と見てよいです。
それ以降はスレッド数が増えるだけ重くなっていきます。

Galaxy S2はデュアルコアなので2スレッドまでなら重い処理を
分散させることが出来るということでしょう。

1スレッドのときはCPU使用率が50%しか使われていません。
これは1スレッドなので1コアしか使えないからなのでしょう。

そんなわけで「重い処理はスレッドで分散すると早く終わらせられる」
ということがわかったわけです。

NDK版も作って計測してみる

NDKは早いとは言うけどどのくらい早いのかがわからなかったので
このタイミングでチェックしてみます。

ソースはこちら。
Link:ThreadTestJni2プロジェクト

やり方はJavaでスレッドを作りJNIでC++をコール。
あとは上記と同じ処理を作成する形です。

結果がこんな感じ。

スレッド数 SDK版 NDK版
1 8758 8411
2 8936 8573
3 11435 12688
4 15970 16738
5 18958 19063
10 36412 42444

なんと性能差がほとんどない結果になりました。
下手するとNDK版のほうが遅いくらいです。

まあ、テストプログラムだとあまりにも簡単すぎで
SDKもNDKもほぼ同じ動作だったのでしょう。

これだけじゃガベコレはおきそうにないし
完全な性能比較にはならないです。

だけどJavaでも反復処理であればCPUの性能をフルに生かせる
ということみたいなのでがんばってますねってところでしょうか。


そんな感じでスレッドで処理を分けることでマルチコアCPUを乗った
Androidの機種だと高速に処理できることがあるかもしれません。

Android NDKネイティブプログラミング Android NDKネイティブプログラミング
出村 成和

秀和システム 2011-07
売り上げランキング : 28613

Amazonで詳しく見る by G-Tools

ニャッキ格闘列伝 > プログラム >

前の記事:
次の記事:

関連記事

コメントリスト

コメントなし

コメント



*

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

こんなタグが使えるみたいよ:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>