|
|||||||||||||||||||||||||||||||||||||||||
| ISBN: 3423050012 ISBN: 3423050012 ISBN: 3423050012 ISBN: 3423050012 | |||||||||||||||||||||||||||||||||||||||||
|
|
Wir empfehlen: | ||||||||||||||||||||||||||||||||||||||||
LaufzeiteffizienzInhalt:Ein Fallbeispiel: Das N-Körper-Problem
VorbemerkungZu Beginn gilt es, die Frage zu klären, warum überhaupt Laufzeiteffizienz so wichtig ist; schließlich ist ein geringer Platzbedarf oder die Korrektheit eines Programms ebenso gefordert. Geringe Laufzeit, geringer Platzbedarf und Korrektheit eines Programms stehen untereinander in einer Art Konkurrenzsituation: Oft schließt ein geringer Platzbedarf einen schnellen Algorithmus aus (Beispiel: einfach verkettete Liste; Algorithmus: Vorgänger eines Elementes bestimmen), oder man erreicht durch den Einsatz platzsparender Datenstrukturen eine bessere Laufzeit (Beispiel: Einsatz von 32 Bit-Fließkommazahlen statt 64 Bit-FPN), büßt dabei jedoch an Genauigkeit (d.h. Korrektheit) ein. Laufzeitoptimierung hat oberste Priorität! Denn durch einen in der Laufzeit verbesserten Algorithmus muss nicht zwangsläufig ein wesentlich größerer Platzbedarf oder ein geringe Genauigkeit resultieren; oft bietet der neue Einblick in das Problem sogar die Möglichkeit, Platz einzusparen oder die Genauigkeit zu verringern, ohne dass das Programm tatsächlich "falsch rechnet". Außerdem bietet die verbesserte Laufzeit bei zukünftigen Hardwareverbesserungen insgesamt die bessere Performance des Systems als eine Optimierung auf geringsten Platzbedarf. Wie erreicht man eine effizientere Laufzeit? Antwort: Durch Optimieren, und zwar auf verschiedenen Designebenen! Und durch häufiges Abschätzen der Laufzeit im aktuellen Entwicklungsstadium; dadurch zeigt sich, ob sich die Laufzeit in die richtige Richtung bewegt. Der Begriff Designebenen soll weiter unten erläutert werden, doch zunächst...
Ein Fallbeispiel: Das N-Körper-ProblemAndrew Appel veröffentlichte 1985 "An efficient program for many-body simulations", also einen optimierten Algorithmus zur Lösung des physikalischen N-Körper-Problems. Das N-Körper-Problem dreht sich um die Frage, wie sich Massekörper (mit gegebener Position im Raum und Initialgeschwindigkeit) in ihrem gemeinsamen Gravitationsfeld bewegen. Da die Lösung des Problems schon für n=3 Körper nicht mehr trivial ist, müssen die Flugbahnen der Körper approximiert werden. Der naive Lösungsansatz besteht zunächst darin, die Anziehungskraft zwischen je zwei Körpern zu bestimmen und damit die Änderung der Flugbahnen der Körper auszurechnen. Dies muss für jeden Körper zu jedem anderen Körper geschehen, also n2 mal, somit resultiert eine Laufzeit von O(n2). Weiterhin handelt es sich bei den Berechnungen um Fließkommaoperationen, was bedeutet, dass jede dieser Berechnungen viele hundert Taktzyklen in Anspruch nimmt, was sich ebenso auf die Laufzeit auswirkt. Schließlich wird die Genauigkeit der Approximation durch die Länge der simulierten Zeitschritte bestimmt; je kürzer die Zeitschritte, umso genauer die Simulation - aber umso größer die Laufzeit. Zur Verwaltung der Daten in diesem ersten Algorithmus genügt ein eindimensionales Array, das für jeden Körper dessen Masse, Position und (vektorielle) Geschwindigkeit verwaltet. Appel selbst schätze 1985 die Laufzeit dieses naiven O(n2)-Algorithmus für n=10.000 und 1.000 Zeitschritte auf über 1 Jahr! [Hier gibt es mehrere Demonstrationsapplets, die den Algorithmus visuell darstellen und eindrucksvoll den Laufzeitzuwachs zeigen.] Der O(n2)-Algorithmus konnte nicht die endgültige Lösung des Problems sein. Appel verringerte die Laufzeit des Programms drastisch und erreichte schließlich einen Speedup um den Faktor 400, und für n=10.000 und 1.000 Schritte betrug die Laufzeit schließlich nur noch einen Tag! Diesen Speedup konnte Appel nur dadurch erreichen, dass er auf mehreren Designebenen optimierte: 1. Maßnahme: Organisation der Daten in einem Binärbaum 2. Maßnahme: Vergrößerung der Zeitschritte bei
gleichbleibender Genauigkeit 3. Maßnahme: Rekonfiguration des Binärbaums nach jedem
Berechnungsschritt 4. Maßnahme: Verwenden von 32 Bit- statt 64
Bit-Fließkommazahlen 5. Maßnahme: Implementation der Berechnungsfunktionen in
Assembler 6. Maßnahme: Ausrüsten des Computersystems mit einer
Fließkomma-Recheneinheit Fazit:
DesignebenenAn dieser Stelle soll nun erläutert werden, was man unter Designebenen versteht. Zunächst eine Definition des Begriffs Computersystem: Ein Computersystem besteht aus
Dieses Modell liefert schon eine grobe Strukturierung der möglichen Designebenen:
Designebenen sind konkrete Gebiete, auf denen optimiert wird, um die Laufzeit zu verbessern. Die Punkte 1. bis 4. sind Designebenen auf Anwendungsebene, während die Punkte 5. und 6. auf der Ebene der Systemsoftware bzw. der Hardware beheimatet sind. Einzelne Speedups auf den verschiedenen Designebenen multiplizieren sich i.A. zu einem großen Gesamtspeedup. Daher kann man die Höhe des Gesamtspeedup durch die Auswahl der zu optimierenden Ebenen kontrollieren. 1. Problemspezifikation 2. Modularisierung 3. Algorithmen und Datenstrukturen 4. Codeoptimierung 5. Systemsoftware 6. Hardwareumgebung
The Back Of The Envelope...oder "Intuitive Überschlagsrechnungen und Abschätzungen" Ein Beispiel für eine solche Back Of The Envelope-Rechnung ist Frage: "Wieviel Wasser fließt pro Tag aus dem
Mississippi in das Meer?" Bei diesem Problem könnte man vielleicht auf drei verschiedene Arten zu einer brauchbaren Lösung gelangen: Lösung 1: "Mal sehen..." (der direkte Zugang) Lösung 2: "Genauso viel wie reinfließt!" Lösung 3: "Hier steht drin..." (für
Perfektionisten) Hier werden kurz ein paar Daumenregeln behandelt, die den Umgang mit Back Of The Envelope-Kalkulationen vereinfachen. Die Dimensionen müssen passen! Das Beispiel des Mississippi-Problems veranschaulicht folgende Regeln (ohne Anspruch auf Vollständigkeit) für den Umgang mit Dimensionen, die zudem recht intuitiv sind:
oder "Modulo 9-Regel": Beispiel: 3142 -> 3+1=4 +4=8 +2=10 mod 9 =1
2718 -> 2+7=9 mod 9 =0 +1=1 +8=9 mod 9 =0
+1123 -> 1+1=2 +2=4 +3=7; Gesamtsumme: 1+0+7=8
6973 -> 6+9=15 mod 9 =6 +7=13 mod 9 =4 +3=7
Wie man sieht, ist das Ergebnis der Ziffernaddition mod 9 der drei Summanden (8)
ungleich dem Ergebnis der Ziffernaddition mod 9 des Ergebnis (7).
Also ist das Ergebis falsch! (vorausgesetzt, die mod 9-Rechnungen sind korrekt...)
72er-Regel / Verdopplungsregel Diese Regel besagt einfach, dass sich eine Menge M verdoppelt, wenn die Vermehrungsrate r multipliziert mit der Zeit t den Wert 72 ergibt. Beispiele: 1000 DM verdoppeln sich bei 6% p.a. nach 12 Jahren zu 2012 DM, 6*12=72!
Eine Bakterienkolonie, die 3% pro Stunde wächst, verdoppelt sich pro Tag, 3*24=72!
10 Verdopplungen sind ein Faktor von 1.000, 20 Verdopplungen ein Faktor von 1.000.000! (denn 210=1024 usw...) "Pi Sekunden sind ein Nano-Jahrhundert"! Genaugenommen hat ein Jahr 3,155*107 Sekunden. Das sind ungefähr Pi*107 Sekunden; die Abweichung ist kleiner als ein halbes Prozent. Andere Formulierung: "Pi mal 10 Millionen Sekunden sind ein Jahr." Sicherheitsfaktoren sind ein Mittel zur einfachen Berücksichtigung des worst case bei der Laufzeitabschätzung. Evtl. kennt man zwar das mögliche Laufzeitintervall einer Systemkomponenten, nicht jedoch, wann welche Laufzeit auftritt. Man nimmt also den schlimmsten Fall an und sorgt dann dafür, dass das System auch im schlimmsten Fall immer reibungslos funktioniert. Dann ist man auf der sicheren Seite. Nehmen wir als Beispiel Dateizugriffe: Auf ähnliche Weise sollte man z.B. davon ausgehen, dass ein 100MBit-Ethernet höchstens 80% oder auch nur 50% Durchsatz hat, also höchstens 9 MByte/Sekunde fließen.
Little's LawLittle's Law ist eine Bezeichnung für eine einfache Gesetzmäßigkeit, die für dynamische Systeme gilt, bei denen es einen Zufluss und Abfluss von Objekten in und aus dem System gibt und bei denen sich zu einem Zeitpunkt eine bestimmte Zahl von Objekten im System befinden. Dieses Gesetz ist universell anwendbar, wie die folgenden Beispiele zeigen werden. <N> = D * <T> <N>: mittlere Zahl von Objekten in einem System D: Durchsatz (Zufluss oder Abfluss) <T>: mittlere Verweildauer eines Objektes Beispiele:
AufgabeAm Ende des Vortrags wurde folgende Aufgabe gestellt: "Bis zu welcher Distanz ist ein Fahrradkurier schneller als eine Rechnerverbindung über ISDN?" Für eine sinnvolle Lösung dieser Aufgabe muss man natürlich einige (plausible) Annahmen machen: Wir nehmen an, die Übertragungsgeschwindigkeit der ISDN-Leitung sei 128.000 kBps. Es soll eine Datenmenge von 200 MB übertragen werden. ISDN schafft dies im Idealfall in 13.108 Sekunden, das sind gut 3½ Stunden. In dieser Zeit kommt ein Fahradkurier mit den 200 MB auf einer CDROM bei 10 km/h etwa 35 km weit! Ist die Entfernung der beiden Rechner also wesentlich geringer, ist der Fahrradkurier deutlich schneller!
|
|
||||||||||||||||||||||||||||||||||||||||
|
This web site is a part of the project StudyPaper.com. We are grateful to Sascha Ternes for contributing this article. Back to the topic site: StudyPaper.com/Startseite/Computer/Informatik/technische External Links to this site are permitted without prior consent. | |||||||||||||||||||||||||||||||||||||||||
| deutsch | Set bookmark | Send a friend a link | Copyright © | Impressum | |||||||||||||||||||||||||||||||||||||||||