Nexus 7(Tegra 3、4 + 1コア)で並列計算をテストするために、マンデルブロセットを描画する単純な並列アルゴリズムを実行しました。数回実行した後、シリアルで 1.5 秒、パラレルで 1.0 秒を取得しましたが、パラレルとシリアルは 1.3 秒で非常に接近しています。
正方形は 700x700 ピクセルで、使用するマンデルブロ コードは
http://rosettacode.org/wiki/Mandelbrot_set#Java
並列実装では、次のように 2 つの半分のマンデルブロが実行されます。
public void mandelbrotParallel() {
Thread t1 = new Thread(new Runnable() {
public void run() {
mandelbrotOne();
}
});
Thread t2 = new Thread(new Runnable() {
public void run() {
mandelbrotTwo();
}
});
t1.start();
t2.start();
try {
t1.join();
t2.join();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
mHandler.post(new Runnable() {
public void run() {
v.setBmp(bmp);
v.invalidate();
}
});
}
以前に単純なベクトル加算を実行したことがありますが、同様の逸話的な結果が見つかりました (科学的な厳密さはありません)。ですから、Android に複数のコアを起動させてタスクを完了させるために何か特別なことをしなければならないのではないかと思います。
Google との簡単な会話に基づいて、コアが休止状態であり、コアがオンになる前に計算が本当に長時間 (数秒) 実行されるのを待っている可能性があります... これは本当ですか? もしそうなら、コアをプリエンプティブにウェイクアップするために実行できる Java (JNI なし) からの API 呼び出しはありますか?