Wir messen folgende Grössen für 10 verschiedene Szenen:
Tabelle 7.2: Verwendete Beispielszenen im Ueberblick
Im folgenden zeigen wir unsere Messresultate in Graphiken. Die exakten
Werte sind in den Tabellen C.1 bis
C.5 im Anhang C auf
Seiten
ff aufgeführt.
Die erste Messreihe zeigt die maximale Zeit pro Bild sowie die mittlere Zeit pro Bild für unsere Szenen. Dabei wurden zuerst 40 Bilder aus gleicher Ansicht berechnet, um das Loadbalancing einzupegeln. Dannach wurde über 360 Bilder mit einer Verdrehung von 2 Grad in Y-Richtung und 1 Grad in X-Richtung pro Bild gemessen. Tabellen C.1 bis C.3 enthalten die Resultate.
Abbildung 7.2 zeigt die minimale und mittlere Bildrate für die Szenen Sinus 20, Sinus 50, Kreisel 20 und Kreisel 50 mit 1, 7, 20, 25, 40, 50 und 61 Prozessoren.
Abbildung: Minimale und mittlere Anzahl Bilder pro Sekunde für 1, 7,
20, 25, 40, 50 und 61 Prozessoren.
Die Bildraten in Abbildung 7.2 sind tief. Dies kommt daher, dass durch das laufende Drehen der Szene das Loadbalancing keine optimale Verteilung erreichen kann. Tabelle C.5 zeigt die Rechenzeiten für eine statische Szene mit eingepegeltem Loadbalancing. Tabelle 7.3 zeigt die maximal erreichten Bildraten.
Tabelle: Maximale erreichte Anzahl Bilder pro Sekunde für
verschiedene Szenen
Das Loadbalancing hat einen wesentlichen Einfluss auf die Rechenzeit pro Bild. Zur Analyse des Loadbalancings betrachten wir die Entwicklung der Rechenzeiten pro Bild für statische Szenen. In Abbildung 7.3 und Tabelle C.4 ist zu erkennen, dass die Bildrate durch die Entwicklung des Loadbalancings von Gleichverteilung nach optimaler Verteilung um bis zu einem Faktor 5.5 zunehmen kann.
Abbildung 7.3: Entwicklung des Loadbalancings.
Die durchschnittliche Auslastung der Prozessoren bei einer drehenden Szene ist in den Tabellen C.1 bis C.3 zu sehen. Sie reicht von rund 70% bei 7 Prozessoren bis etwa 30% bei 61 Prozessoren. Die Auslastung ist szenenabhängig.
Schliesslich interessiert uns der Speedup. Wir messen den Speedup für ein eingepegeltes Loadbalancing. Tabelle C.5 zeigt die Ergebnisse. Abbildung 7.4 zeigt eine Uebersicht.
Abbildung: Speedup für verschiedene Szenen bei eingepegeltem Loadbalancing
Den maximalen Speedup erreichten wir mit 61 Prozessoren für die
Szene Sinus 50: 93.7. Dieser überproportionale Speedup bedarf einer Erklärung:
Wenn beim erstellen der Spanliste in der Funktion scanline ein
Kantenpaar aufhört (endende Kante), müssen alle bereits
bearbeiteten, startende Kanten überprüft werden, welche das nun
sichtbar wird. Dies ist ein Aufwand der Ordnung
. Gelingt es nun,
die Kantenliste in p Teile zu teilen, wird der Aufwand für den
Vergleich zu
. Dazu kommt der Aufwand für die
Aufteilung der Liste: np. Zusammengezogen sieht dies nun so aus:
Je nach Rechendauer für die Vergleiche und das Aufteilen können wir einen überproportionalen Speedup erreichen. Oder anders gesagt, durch das Aufteilen der Kantenliste erreichen wir eine kleinere Programmlaufzeit. Diesen Effekt könnte man auch auf einem Einprozessorensystem ausnutzen: bei einigen Szenen würde man durch ein Aufteilen der Kantenliste ebenfalls eine Steigerung der Performance erreichen. Die beste Lösung würde man erreichen, indem man diese Aufteilung nicht nach der Bildschirmgrösse, sondern von der Anzahl Kanten und deren Position abhängig machte. Eine mögliche Lösung dieser Aufgabe ist ein Binary Space Partition (BSP)-Tree.
Tabelle 7.4 zeigt nun die wichtigsten Eckdaten unsere Implementation im Ueberblick. Diese Werte können als Faustregeln für die Abschätzung der Performance dienen, exakte Werte sind im Anhang C zu finden.
Tabelle 7.4: grobe Eckdaten der Implementation im Ueberblick