多核Android

我已经运行了简单的并行算法绘制mandelbrot集来测试Nexus 7(Tegra 3,4 4核)上的并行计算.在运行几次之后,我获得1.5秒的串行和1.0的并行,但并行和串行在1.3秒时非常接近.

方块是700×700像素,我使用的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启动多个内核来完成任务.

基于与谷歌的快速对话,可能是核心处于休眠状态并等待计算在核心打开之前真正长时间运行(多秒)……这是真的吗?如果是这样,是否有来自Java(没有JNI)的API调用可以预先唤醒核心?

最佳答案
这听起来像RenderScript的候选者.简而言之,它允许您进行计算上昂贵的操作,利用所有可用的加速资源(多核,GPU计算,dsp等).来自文档:

Renderscript gives your apps the ability to run operations with
automatic parallelization across all available processor cores. It
also supports different types of processors such as the cpu,GPU or
DSP. Renderscript is useful for apps that do image processing,
mathematical modeling,or any operations that require lots of
mathematical computation.

你必须用C语言重写你的Mandelbrot代码,但你不必将它分成几部分,因为并行化将为你处理.

使用Android代码中的RenderScript很简单,如here所述.

相关文章

Android性能优化——之控件的优化 前面讲了图像的优化,接下...
前言 上一篇已经讲了如何实现textView中粗字体效果,里面主要...
最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个...
WebView加载页面的两种方式 一、加载网络页面 加载网络页面,...
给APP全局设置字体主要分为两个方面来介绍 一、给原生界面设...
前言 最近UI大牛出了一版新的效果图,按照IOS的效果做的,页...