Problem:
Heutzutage sind Parallelrechner schon weit verbreitet. Um dies bei der Auswertung von Fib-Objekten auszunutzen, sind einige Anpassungen nötig.
Lösungskizze:
Anstatt das gesamte Fib-Objekt mit in einem Proßess auszuwerten wird dieses in Teilobjekten aufgespalten und diese seperat ausgewertet.
Dabei gibt es 2 Schritte: Ermittlung der Teilobjekte und Auswertung der ermittelten Teilobjekte.
Lösung mit getTimeNeed():
der Teilobjekte die gleichzeitig ausgewerte werden sollen, dies Anzahl
kann beispielsweise mit der Anzahl Prozessorkerne übereinstimmen
der benötigten Teilobjekte: Diese Zahl sollte ein Vielfaches der Anzahl
der Prozesse sein. Wenn beispielsweise 4 Prozesse gleichzeitig laufen können und ein Multiplikator von 10 festgelegt wurde, sollte
sein. In diesem Fall sollten also rund
Teilobjekte gesucht werden, die ungefähr die gleiche Abarbeitungszeit haben.
ist die Liste der Teilobjekte. Die Liste
wird am Anfang mit dem obersten root-Element als Teilobjekt initialisiert. Zu jedem Teilobjekt gehört der Zeiger auf das definierende Unterobjekt, seine Nummer in der Ordnung der zusammenhängenden Teilobjekte (siehe Abschnitt 14.8 auf Seite
) und (ein Wert für) die zur Auswertung benötigte Zeit (ermittelt mit getTimeNeed() für das jeweilige Teilobjekt ).
aus
, welches den größten Wert für die zur Auswertung benötigte Zeit hat
in
; wenn es kein erste/ nächste Listenelement
in
gibt, füge
an das Ende von
an und, wenn
leer ist, gehe zu Schritt 4, sonst gehe zu Schritt 3.1
und füge jeweils für jedes ermittelte Unterobjekt das zusammenhängende Teilobjekt, das es definiert, und die Nummer des zusammenhängenden Teilobjekts in die Liste
an der Stelle an der vorher
stand ein
größer oder gleich
ist gehe zu Schritt 4
kleiner als
ist gehe zu Schritt 3.1
an ihrer entsprechenden Stelle von
ein
wird auf
gesetzt):
leer ist gehe zu Schritt 6
Teilobjekte zur Zeit ausgewertet werden, gehe Schritt 5.4
aus
und sammle die Ergebnispunkte in der Liste
um
, wobei die Elemente der Liste
in der Ergebnisliste hinter denen der Liste
stehen
an
Lösung ohne getTimeNeed():
der Teilobjekte die gleichzeitig ausgewerte werden sollen, dies Anzahl
kann beispielsweise mit der Anzahl Prozessorkerne übereinstimmen
der benötigten Teilobjekte: Diese Zahl sollte ein Vielfaches der Anzahl
der Prozesse sein. Wenn beispielsweise 4 Prozesse gleichzeitig laufen können und ein Multiplikator von 10 festgelegt wurde, sollte
sein. In diesem Fall sollten also rund
Teilobjekte gesucht werden.
ist die Liste der Teilobjekte. Die Liste
wird am Anfang mit dem obersten root-Element als Teilobjekt initialisiert. Zu jedem Teilobjekt gehört der Zeiger auf das definierende Unterobjekt und seine Nummer in der Ordnung der zusammenhängenden Teilobjekte (siehe Abschnitt 14.8 auf Seite
).
aus
in
; wenn es kein erste/ nächste Listenelement
in
gibt, markiere
; wenn alle
markiert sind gehe zu Schritt 4, sonst gehe zu Schritt 3.1
und füge jeweils für jedes ermittelte Unterobjekt das zusammenhängenden Teilobjekte, das es definiert, und die Nummer des zusammenhängenden Teilobjekts in ihrer Reihenfolge an den entsprechenden Stellen
Anzahl bisher eingefügte Teilobjekte
in
ein
größer oder gleich
ist gehe zu Schritt 4
kleiner als
ist gehe zu Schritt 3.1
wird auf
gesetzt):
leer ist gehe zu Schritt 5
Teilobjekte zur Zeit ausgewertet werden, gehe Schritt 4.4
aus
und sammle die Ergebnispunkte in der Liste
um
, wobei die Elemente der Liste
in der Ergebnisliste hinter denen der Liste
stehen
an