Seite 1 von 1

max. 3 QFutures laufen parallel

Verfasst: 20. September 2009 20:43
von matzepatze
Hallo!
Auf folgende Weise möchte ich 8 Berechnungne parallel laufen lassen:

Code: Alles auswählen

    for (int i=0; i<GLWidget::threadCount; i++) {
        future[i] = run(&GLWidget::doRendering, i);
    }
jedoch zeigen mir debug Ausgaben, dass maximal 3 QFutures parallel laufen:

Thread 0 : from 0 increasing 8
Thread 1 : from 1 increasing 8
Thread 2 : from 2 increasing 8
//NUN VERGEHEN CA. 30 SEKUNDEN...
Thread 2 : done.
Thread 3 : from 3 increasing 8
Thread 1 : done.
Thread 4 : from 4 increasing 8
Thread 0 : done.
Thread 5 : from 5 increasing 8
Thread 3 : done.
Thread 6 : from 6 increasing 8
Thread 4 : done.
Thread 7 : from 7 increasing 8
Thread 5 : done.
Thread 6 : done.
Thread 7 : done.

(dabei bedeutet from x increasing y dass future x anfängt zu rechnen.)
Es sind jeweils recht langwierige Berechnungen, d.h. es liegt nicht daran, dass die Futures so schnell fertig sind und daher nur 3 parallel laufen.

Weiß jemand, woran das liegt? Ich hätte erwartet, dass alle 8 futures gleichzeitig rechnen.

Vielen Danke für Hinweise.

Re: max. 3 QFutures laufen parallel

Verfasst: 20. September 2009 21:58
von Christian81
Qt-Doku hat geschrieben: Programs written with QtConcurrent automatically adjust the number of threads used according to the number of processor cores available
Was soll es bringen 8 CPU-lastige Berechnungen gleichzeitig zu machen wenn es eh keinen Sinn hat da nur 2 Cores da sind?

Verfasst: 21. September 2009 01:08
von matzepatze
Hallo,
auf das QT-Doku Zitat bin ich auch gestoßen und hab eine dazu passende QT Demo ausprobiert ("Progressbar" aus den QT Examples). Bei dieser wurde die Anzahl der erzeugten Threads allerdings nicht explizit festgelegt, was ich allerdings mit den 8 Aufrufen tue.
Zudem wurden in der Demo bei mir nur zwei threads erzeugt, was zu den 2 cores meines Rechners auch ganz gut passt. In meinem Programm laufen allerdings 3 Threads parallel.

Bedeutet das also, dass ich beliebig viele QFutures starten kann - QT lässt nur soviele davon parallel laufen, wie es das für richtig hält?
Was soll es bringen 8 CPU-lastige Berechnungen gleichzeitig zu machen wenn es eh keinen Sinn hat da nur 2 Cores da sind?
=> nix. es geht mir ums verständnis.