マルチスレッド Android アプリをマルチコア デバイス (S3 など) とシングル コア Android デバイスで実行したときのコードのパフォーマンスの向上を測定しようとしています。パフォーマンスを測定するために、タスクを順次実行するか、並行して実行します。通常の Java スレッドを実装しましたが、違いはないようです。このようにAsynchTaskを試してみましたが、パフォーマンスは少ししか改善されませんでした。
単一のコアではなく、各タスク/スレッドが異なるコアで実行されるようにするコードを作成する方法を教えてください。それが不可能な場合、アプリで複数のコアを最大限に活用するにはどうすればよいですか?
タスクを実行するアクティビティの onCreate メソッドのコードを次に示します。
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_local_executor);
multiplicationTask t1 = new multiplicationTask();
t1.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
multiplicationTask t2 = new multiplicationTask();
t2.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
multiplicationTask t3 = new multiplicationTask();
t3.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
multiplicationTask t4 = new multiplicationTask();
t4.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
}
onCreate メソッドから実行される AsynchTask は次のとおりです。
class multiplicationTask extends AsyncTask<Integer, Integer, String> {
protected void onPreExecute()
{
Log.v("PrintLN", "Executing Task");
}
@Override
protected String doInBackground(Integer... params) {
//Do lots of floating point operations that are independent of anything whatsoever
}
protected void onPostExecute(String result) {
Log.v("PrintLN", "Done Task: " + resulting_time);
}
}