我已经运行了简单的并行算法绘制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();
}
});
}
Run Code Online (Sandbox Code Playgroud)
我之前运行过一个简单的向量,并发现了类似的轶事结果(没有科学严谨性).所以我想知道是否有任何特殊的事情要让Android启动多个内核来完成任务.
基于与谷歌的快速对话,可能是核心处于休眠状态并等待计算在核心打开之前真正长时间运行(多秒)......这是真的吗?如果是这样,是否有来自Java(没有JNI)的API调用可以预先唤醒核心?
这听起来像是RenderScript的候选者。简而言之,它允许您执行计算成本较高的操作,并利用所有可用的加速资源(多核、GPU 计算、DSP 等)。来自文档:
Renderscript 使您的应用程序能够在所有可用处理器核心上自动并行运行操作。它还支持不同类型的处理器,例如CPU、GPU或DSP。Renderscript 对于执行图像处理、数学建模或任何需要大量数学计算的操作的应用程序非常有用。
您必须用 C 语言重写 Mandelbrot 代码,但您不必将其分解成多个部分,因为我们会为您处理并行化问题。
从 Android 代码中使用 RenderScript 非常简单,如此处所述。
| 归档时间: |
|
| 查看次数: |
2430 次 |
| 最近记录: |