Android multi-core

Eu executei um algoritmo paralelo simples desenhando o conjunto de mandelbrot para testar cálculos paralelos em um Nexus 7 (núcleos Tegra 3, 4 + 1). Depois de correr várias vezes, recebo 1,5 segundos para serial e 1,0 para paralela, mas paralelos e serial chegam muito perto um do outro em 1,3 segundo.

O quadrado é 700x700 pixels, e o código mandelbrot que eu uso é de

http://rosettacode.org/wiki/Mandelbrot_set#Java

A implementação paralela executa duas metades de mandelbrot como esta

    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();
        }
    });
}

Eu executei uma adição vetorial simples antes e encontrei resultados anedóticos semelhantes (sem rigor científico). Então, eu me pergunto se há algo especial que uma pessoa precisa fazer para fazer o Android ativar vários núcleos para realizar uma tarefa.

Com base em conversas rápidas com o Google, pode ser que os núcleos estejam inativos e aguardem que a computação seja realmente longa (vários segundos) antes que os núcleos sejam ligados ... Isso é verdade? Em caso afirmativo, há chamadas de API do Java (sem JNI) que podem ser feitas para ativar antecipadamente os núcleos?

questionAnswers(2)

yourAnswerToTheQuestion