Autor: Georg Hüttenegger
[ < ] [ globale Übersicht ] [ Kapitelübersicht ] [ Stichwortsuche ] [ > ]

4.5.6 Praktische Aufwandsermittlung

Im Unterschied zu theoretischen Untersuchungen ist bei der praktischen Aufwandsermittlung nicht die asymptotische, sondern die "finite" Komplexität eines Algorithmus relevant, z.B. die konkrete Anzahl K(n) der verschiedenen Arten von (Gleitpunkt-) Operationen, die der Algorithmus zur Bearbeitung eines Problems der Größe n erfordert.

Beispiel Gauß-Algorithmus

In jenen Fällen, wo es nicht möglich ist, eine präzise Aufwandsermittlung durch "Abzählung" der zu erwartenden Operationen durchzuführen, besteht die Möglichkeit, während der Ausführung eines Programms die Anzahl der verschiedenen Operationen mitzuzählen und damit den Arbeitsaufwand eines bestimmten Programms bei der Lösung eines speziellen Problems auf einem konkreten Computersystem exakt festzustellen. Solche experimentellen Aufwandsermittlungen ermöglichen die sogenannten Software- und Hardwaremonitore (Jain).

Präzisierung des Begriffs "Operation"

Die praktische Ermittlung des Arbeitsaufwandes eines bestimmten Algorithmus erfordert eine noch genauere Auseinandersetzung mit dem Begriff der "Operation", als dies beim theoretischen Abarbeitungsaufwand der Fall war.

In der Praxis der Numerischen Datenverarbeitung wird der Aufwand, den ein Programm für die Lösung eines Problems der Größe n benötigt, oft durch die Anzahl der erforderlichen Gleitpunktoperationen charakterisiert. Die Funktion K(n), die jeder Problemgröße n die Anzahl der Gleitpunktoperationen des Algorithmus zuordnet, wird als Rechen-Komplexität des Algorithmus bezeichnet. Es sind aber weder die verrichtete Arbeit noch die tatsächliche Zeitdauer der verschiedenen Gleitpunktoperationen gleich groß.

Außer dem Umstand, daß oft auch andere Operationen (z.B. Anzahl und Art der Speicherzugriffe) bezüglich ihres Zeitaufwandes eine Rolle spielen, muß berücksichtigt werden, daß auf verschiedenen Computersystemen Gleitpunktoperationen in unterschiedlicher Form vorhanden sind. Beispielsweise sind auf vielen Mikroprozessoren neben den Instruktionen für die arithmetischen Operationen + - . / eigene Instruktionen für die Berechnung der Quadratwurzel-, Sinus- und Kosinusfunktion etc. vorhanden. Solche Funktionsaufrufe stellen aber erheblich mehr Arbeit dar und benötigen auch deutlich mehr Zeit als die Ausführung einer Gleitpunktaddition oder -multiplikation.

Beispiele (Quadratwurzel, Multiply and Add)

Die im Instruktionssatz eines Prozessors verfügbaren arithmetischen Gleitpunktopertionen sind - im Gegensatz zu den vereinfachenden Annahmen z.B. des RAM-Modells - nicht homogen bezüglich ihres Zeitaufwandes; so benötigen z.B. Gleitpunktadditionen und -Multiplikationen meist deutlich weniger Taktzyklen als Gleitpunktdivisionen. Diese Tatsache darf sowohl bei der Aufwandsermittlung von Algorithmen als auch bei der empirischen Leistungsbewertung von Computersystemen nicht vernachlässigt werden (vgl. Abschnitt 2.5).

Für eine einfachere und einheitliche Aufwandsbeurteilung werden gelegentlich normalisierte Gleitpunktoperationen verwendet. Dabei wird jede Gleitpunktoperation gewichtet gezählt, z.B. mit der Anzahl an Taktzyklen, die sie benötigt.

Folgende Normalisierung des Aufwands ist gebräuchlich(Addison et al.):

Gleitpunktoperation Gewichtung
Addition, Subtraktion, Multiplikation 1 flop
Division, Quadratwurzel 4 flop
Exponentialfunktion, Winkelfunktionen 8 flop

Der auf diese Art ermittelte Wert für die Anzahl der Gleitpunktoperationen ist zwar unabhängig von der Art der auftretenden Gleitpunktoperationen, er ist allerdings nicht unabhängig von den Hardware-Besonderheiten des Prozessors. Falls z.B. der Instruktionssatz zusammengesetzte Instruktionen wie die bereits erwähnte Floating-Point-Multiply-and-Add-Instruktion enthält, muß das in der Normalisierung ebenfalls berücksichtig werden.


Die passende Gewichtung für einen konkreten Computer ermittelt man am besten expermimentell. Alle flop/s-Angaben, die sich auf etwas anderes als Addition und Multiplikation stützen, sind generell mit Vorsicht zu genießen.    zurück
Beispiel Gauß-Algorithmus Der Eliminationsalgorithmus (LU-Zerlegung) zur Lösung eines linearen Gleichungssystems der Dimension n benötigt (Golub, Ortega)
Kadd(n) = n3/3 + n2/2 - 5n/6 Additionen,
Kmult(n) = n3/3 + n2/2 - 5n/6 Multiplikationen und
Kdiv(n) = n2/2 + n/2 Divisionen.
Der Aufwand, der zur Sicherung der numerischen Stabilität erforderlich ist (Pivotsuche, Zeilen- und/oder Spaltenvertauschungen (Golub, Van Loan)), kommt in den Komplexitätszahlen Kadd(n), Kmult(n) und Kdiv(n) nicht zum Ausdruck. Wegen seiner starken Datenabhängigkeit läßt sich dieser Zusatzaufwand auch nur schwer durch Formelausdrücke quantifizieren. Man weiß aber, daß seine asymptotische Komplexität ungünstigstenfalls O(n2) ist.
   zurück
Beispiel (Quadratwurzel) In älteren IBM-Workstations mit POWER-Architektur wurde die Quadratwurzelfunktion durch den Aufruf einer Bibliotheksroutine realisiert, deren Ausführung ungefähr 50 Taktzyklen benötigte. Die POWER2-Architektur enthält eine Instruktion zur Berechnung der Quadratwurzel, die nur mehr halb soviele Taktzyklen erfordert.

Beispiel (Multiply and Add) POWER- und POWER2-Prozessoren besitzen eine Instruktion, die eine Multiplikation und eine davon abhängige Addition - die Operation (a.b) + c - in derselben Zeit wie eine einzelne Gleitpunktaddition bzw. -Multiplikation ausführen kann ( Floating Point Multiply and Add). Ein weiterer Vorteil dieser zusammengesetzten Instruktion ist, daß das Zwischenergebnis nicht gerundet wird und daher insgesamt nur ein Rundungsfehler auftritt (White, Dhawan).    zurück


[ < ] [ globale Übersicht ] [ Kapitelübersicht ] [ Stichwortsuche ] [ > ]