我运行了简单的并行算法,绘制了 mandelbrot 集来测试 Nexus 7(Tegra 3、4+1 内核)上的并行计算。运行几次后,串行时间为 1.5 秒,并行时间为 1.0 秒,但并行和串行在 1.3 秒时非常接近。
正方形是 700x700 像素,我使用的 mandelbrot 代码来自
http://rosettacode.org/wiki/Mandelbrot_set#Java
并行实现像这样运行两半 mandelbrot
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 调用可以抢先唤醒内核?