max. 3 QFutures laufen parallel

Alles rund um die Programmierung mit Qt
Antworten
matzepatze
Beiträge: 2
Registriert: 13. September 2009 15:59

max. 3 QFutures laufen parallel

Beitrag 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.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: max. 3 QFutures laufen parallel

Beitrag 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?
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
matzepatze
Beiträge: 2
Registriert: 13. September 2009 15:59

Beitrag 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.
Antworten