Wielordzeniowy Android

Uruchomiłem prosty równoległy algorytm rysujący zestaw mandelbrota w celu przetestowania obliczeń równoległych na Nexusie 7 (rdzenie Tegra 3, 4 + 1). Po kilkukrotnym uruchomieniu otrzymuję 1,5 sekundy dla szeregowego i 1.0 dla równoległego, ale równoległe i szeregowe przychodzą bardzo blisko siebie po 1,3 sekundy.

Kwadrat wynosi 700x700 pikseli, a kod mandelbrota, którego używam, pochodzi z

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

Równoległa realizacja prowadzi dwie połówki mandelbrota w ten sposób

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

Przedtem uruchomiłem prosty dodatek wektorowy i znalazłem podobne niepotwierdzone wyniki (brak rygoru naukowego). Zastanawiam się więc, czy trzeba zrobić coś specjalnego, aby Android uruchomił wiele rdzeni, aby wykonać zadanie.

Na podstawie szybkich rozmów z Google może się zdarzyć, że rdzenie są uśpione i czekają, aż obliczenia będą naprawdę długie (wiele sekund), zanim rdzenie zostaną włączone ... Czy to prawda? Jeśli tak, czy są wywołania API z Java (bez JNI), które można zrobić, aby prewencyjnie obudzić rdzenie?

questionAnswers(2)

yourAnswerToTheQuestion