• Keine Ergebnisse gefunden

4 Gleichungen mit beschränkter Zugriffs- Zugriffs-distanz

4.2 Lokalitätsoptimierungen für sequentielle Implementierungen

4.2.4 Reduzierung des Speicherplatzbedarfs

Da aktuelle Rechnersysteme z. Z. typischerweise mit mehreren Gigabyte Hauptspeicher ausgestattet sind, können mit den bisher beschriebenen Implementierungsvarianten, die einen Speicherplatzbedarf von(s+ 3)nbzw.(s+5)nbesitzen, in der Regel bereits Systeme mit mehreren Millionen Komponenten integriert werden, auch wenn die Stufenanzahl hoch ist, ohne daß der Speicherplatzbedarf eine Auslagerung auf ex-terne Speichermedien erforderlich macht. Viele Probleme besitzen jedoch eine noch größere Anzahl von Komponenten. Einen besonders hohen Speicherbedarf besitzen oft solche Probleme, die durch eine Orts-diskretisierung aus partiellen Differentialgleichungssystemen hervorgehen. Hier kann man in der Regel die Genauigkeit der Diskretisierung durch Parameter beeinflussen. Ist eine hohe Genauigkeit der Ortsdiskre-tisierung erforderlich und ist das zu diskretisierende Gebiet sehr groß, ergeben sich entsprechend große gewöhnliche Differentialgleichungssysteme. Ein häufig verwendeter Diskretisierungsansatz ist z. B. die Li-nienmethode, bei der ein äquidistantes oder variables Ortsgitter als Ausgangspunkt für die Diskretisierung genutzt wird. Die Anzahl der ODE-Komponenten hängt dann von der Anzahl der Gitterpunkte ab.

Beispiel4.1. Betrachten wir zunächst ein äquidistantes eindimensionales Ortsgitter, das eine Strecke der Länge 1 in Abschnitte der Länge N−11 unterteilt. Dieses besitztNGitterpunkte. Erhöht man die Dimension auf 2, benötigt man bereits N2Gitterpunkte, um ein Einheitsquadrat mit Kantenlänge 1 in Quadrate mit Kantenlänge N−11 zu unterteilen. Für drei Ortsdimensionen steigt die Anzahl der Gitterpunkte bei einer analogen Unterteilung sogar aufN3. Verfeinert man also bei einem dreidimensionalen Problem die Orts-auflösung um Faktor 10, steigt die Anzahl der Gitterpunkte etwa um Faktor 1000. Wollen wir beispielsweise ein Problem auf dem Einheitswürfel mit einer Ortsauflösung von 10−3lösen, benötigen wir ein Ortsgitter mit ca. 109Gitterpunkten. Wäre eine Ortsauflösung von 10−6erforderlich, bestünde das Diskretisierungs-gitter sogar aus rund 1018Punkten.

Um Speicherplatz zu sparen, kann man zunächst versuchen, die Anzahl der Stufen zu reduzieren. Man verzichtet in diesem Fall aber auf wünschenswerte numerische Eigenschaften der Verfahren, wie z. B. eine hohe Ordnung, die erst durch eine hohe Stufenzahl ermöglicht werden. Verschiedene Autoren, darunter Kennedy u. a.(2000),Calvo u. a.(2004),Berland u. a.(2004,2005) undRuuth(2005) schlagen deshalb spezi-elle explizite Verfahren vor, die mit geringerem Speicherplatzbedarf (z. B. 2noder 3n) auskommen, obwohl sie eine höhere Anzahl von Stufen und eine höhere Ordnung besitzen. Dies wird durch eine spezielle Kon-struktion der Verfahrenskoeffizienten ermöglicht, so daß in jeder Stufe nur die in den zur Verfügung stehen-den Vektoren gespeicherten Daten genutzt werstehen-den und die innerhalb einer Stufe neu berechneten Daten in den verfügbaren Vektoren abgelegt werden können. Dieses Vorgehen hat jedoch verschiedene Nachteile:

1. Auch wenn man den Speicherplatzbedarf vonΘ(sn)aufΘ(n)reduzieren konnte, wächst er doch im-mer noch linear mitn. Bei einer dreidimensionalen, mittels äquidistantem Ortsgitter diskretisierten PDE würde er also mitN3wachsen.

2. Es können nur spezielle Klassen von Verfahrenskoeffizienten verwendet werden. Bieten diese nicht die

zur Lösung eines betrachteten Problems erforderlichen numerischen Eigenschaften, muß man auf klas-sische Verfahren mit höherem Speicherplatzbedarf zurückgreifen.

3. Die Einschränkung der Freiheitsgrade bei der Wahl der Verfahrenskoeffizienten hat insbesondere zur Folge, daß in der Regel eine höhere Stufenzahl benötigt wird, um eine gewünschte Ordnung zu errei-chen. Dadurch erhöht sich der notwendige Berechnungsaufwand gegenüber klassischen Verfahren.

4. Die vorgeschlagenen Verfahrensklassen enthalten oft keine eingebetteten Lösungen. Es ist daher in die-sen Fällen keine ebenso effiziente Schrittweitenkontrolle möglich, wie mit eingebetteten Runge-Kutta-Verfahren.

5. Verfahren, die sowohl mit wenig Speicherplatz auskommen, aber auch eingebettete Lösung besitzen, stellen zusätzliche Bedingungen an die Verfahrenskoeffizienten und erfordern daher Zugeständnisse bezüglich der erreichbaren numerischen Eigenschaften.

6. In jedem Fall erfordert die Realisierung einer Schrittweitenkontrolle für diese Verfahren zusätzlichen Speicherplatz: Zur Schätzung des Fehlers wird in der Regel ein Vektor der Dimensionnbenötigt, um die zweite Approximation ˆηκ+1oder alternativ den Vektor∆η=ηˆκ+1ηκ+1zu speichern. Die Speicherung dieses Vektors kann entfallen, wenn die eingebettete Lösung ˆηκ+1nach Berechnung der Stufes−1 vor-liegt und somit ohne Zwischenspeicherung mit der nach Berechnung der Stufesvorliegenden Lösung ηκ+1 verglichen werden kann (sieheKennedy u. Carpenter 1994). Um den Zeitschritt wiederholen zu können, muß darüber hinaus der im vorhergehenden Zeitschritt berechnete Approximationsvektorηκ gespeichert werden.

7. Einige vorgeschlagene Verfahren erreichen eine Reduzierung des Speicherplatzbedarfs auf 2n nur un-ter der Voraussetzung, daß bestimmte Eigenschaften des gewöhnlichen Differentialgleichungssystems ausgenutzt werden, um beispielsweise den Argumentvektor einer Funktionsauswertung mit dem Er-gebnis der Funktionsauswertung überschreiben zu können. Im allgemeinen Fall, d. h. für gewöhnliche Differentialgleichungssysteme mit beliebigen Abhängigkeiten, wird ein zusätzlicher Vektor der Größen benötigt, um das Ergebnis der Funktionsauswertung zwischenzuspeichern (Kennedy u. a. 2000).

Daher ist es erstrebenswert, neue Verfahren bzw. Algorithmen zu finden, die diese Nachteile vermeiden.

Wir betrachten deshalb die Möglichkeiten, die durch die Annahme einer beschränkten Zugriffsdistanz ge-geben sind, unter diesen Gesichtspunkten neu.

Eine einfache Möglichkeit zur Implementierung des vorgeschlagenen Pipelining-Berechnungsschemas speichert alle benutzten Argumentvektoren vollständig. Der Speicherplatzbedarf entspricht somit dem der Ausgangsimplementierung (D), d. h., er beträgt(s+3)n. Dieses Vorgehen wurde auch zur Erstellung der nachfolgend im Rahmen von Simulations- und Laufzeitexperimenten untersuchten Implementierungsvari-anten umgesetzt. Es ist jedoch möglich, den Speicherplatzbedarf erheblich zu reduzieren, wenn man nur die Vektorelemente im Speicher aufbewahrt, die zur Durchführung späterer Berechnungen erforderlich sind.

Jede Implementierung muß mindestens den Approximationsvektorη = ηκ speichern, d. h., ein Spei-cherplatzbedarf kleinernist in keinem Fall realisierbar. Wollen wir auch weiterhin eine Schrittweitenkon-trolle durchführen, benötigen wir darüber hinaus den Vektor ∆η. Andernfalls kann ηκ durch ηκ+1 über-schrieben werden. Der Fehlervektore und der Skalierungsvektorsmüssen nicht vollständig gespeichert werden. Zur Durchführung der Schrittweitenkontrolle ist es ausreichend,

e= 1

zu kennen. Dazu genügt es, neben dem aktuellen Wert füre, von jedem der beiden Vektoren nur so viele Blöcke zu speichern, wie es der Länge der Pipeline entspricht. Das heißt, es müssen für jeden der bei-den Vektoren nur sBlöcke gespeichert werden. Bezüglich der Argumentvektoren genügt es, die in dem aktuellen ArbeitsraumRIdes diagonalen Laufs über die Stufen enthaltenen12s2+32s−2 Blöcke der Argu-mentvektorenw2, . . . ,wszu speichern. Damit ergibt sich ein Gesamtspeicherplatzbedarf von

2n+

4.2 Lokalitätsoptimierungen für sequentielle Implementierungen 181 Wenn keine Schrittweitenkontrolle durchgeführt werden soll, verringert sich der Speicherplatzbedarf um n+2sB, da der Vektor∆ηund die Vektoreneundsnicht benötigt werden. Wir kommen also mit geringe-rem Speicherplatz aus, als die 2n-Verfahren, wenn wir von einer beschränkten Zugriffsdistanz ausgehen.

Der Speicherplatzbedarf des Pipelining-Algorithmus läßt sich noch geringfügig verbessern, wenn man als Basisimplementierung eine Kombination aus den Implementierungsvarianten (D) und (E) nutzt.

Für die als Beispiel genannte Problemklasse der mittels Linienmethode diskretisierten partiellen Diffe-rentialgleichungssysteme, ist es erforderlich, bezüglich der Anordnung der ODE-Komponenten eine Ver-schachtelung der abhängigen Variablen durchzuführen, um eine beschränkte Zugriffsdistanz zu erhalten.

Die zur Ortsdiskretisierung eingesetzten Operatoren approximieren eine Ortsableitung in einem betrach-teten Gitterpunkt, indem sie dazu Gitterpunkte aus einer begrenzten Umgebung des betrachbetrach-teten Gitter-punkts heranziehen. Es ist daher möglich, eine Raumdimension auszuwählen und eine blockweise Unter-teilung bezüglich dieser Raumdimension vorzunehmen.

Beispiel4.2. Bei einer eindimensionalen PDE exisitert nur eine Raumdimension. Die N ODE-Komponen-ten werden daher bezüglich dieser Raumdimension geordnet. Die Zugriffsdistanz ist in diesem Fall ein konstanter Wert, der unabhängig von der Systemgröße ist. Bei einer zweidimensionalen PDE kann man das zweidimensionale Ortsgitter in mehrere Zeilen (bzw. analog in Spalten) unterteilen und diese Zeilen nacheinander im Speicher anordnen. Die Zugriffsdistanz umfaßt in diesem Fall mehrere Zeilen, d. h., sie ist beschränkt durchO(N), während die Systemgröße inO N2

liegt. Eine dreidimensionalen PDE führt zu einer ODE mit einer Systemgröße vonO N3

. Analog der zeilenweisen Speicherung für zweidimensionale Probleme kann hier eine Unterteilung des Gitters inNzweidimensionale Ebenen der Größe N2erfolgen.

Die Zugriffsdistanz beträgt dementsprechendO N2

. Analog läßt sich diese Überlegung für höherdimen-sionale Probleme fortsetzen.

Läßt man den Speicherplatzbedarf für den in jedem Fall benötigten Approximationsvektorηκaußen vor, besitzen die 2n-Verfahren also in Abhängigkeit vonNfürd-dimensionale PDE-Probleme einen Speicher-platzbedarf vonNd. Dem gegenüber steht ein Speicherplatzbedarf von nurO s2Nd−1

für die Ausnutzung der beschränkten Zugriffsdistanz durch das Pipelining-Berechnungsschema.

Beispiel4.3. Als Beispiel betrachten wird die Integration des Testproblems BRUSS2D-MIX mit dem 7-stu-figen Verfahren DOPRI5(4) bei Verwendung von N = 103. In diesem Fall beträgt die Systemgrößen = 2N2 =2·106. Die Zugriffsdistanz beträgt 2N, so daß wir diesen Wert als minimale BlockgrößeBwählen können. Ein 2nVerfahren besitzt demzufolge einen Speicherplatzbedarf von 2n = 4·106. Der Speicher-platzbedarf des Pipelining-Algorithmus beträgt demgegenüber nurn+12s2+32s−2

2N = 2, 066·106. Es ergibt sich also eine Speicherplatzersparnis von rund 48 %. Würde man eine Schrittweitenkontrolle nut-zen, müßte ein zusätzlicher n-Vektor gespeichert werden. Der Pipelining-Algorithmus hätte dann einen Speicherplatzbedarf von 4, 094·106. Im Vergleich zum 2n-Verfahren, kann also mit einem weniger als 2,4 % höheren Speicherplatzbedarf eine effiziente Schrittweitenkontrolle realisiert werden. Für ein 2n-Verfahren würde sich demgegenüber bei Durchführung einer Schrittweitenkontrolle der Speicherplatzbedarf durch die zusätzliche Speicherung der beiden Vektorenηκund∆ηsogar verdoppeln.

Der Pipelining-Ansatz zur Ausnutzung der beschränkten Zugriffsdistanz hat also gegenüber den von anderen Autoren vorgeschlagenen Verfahren mit einem Speicherplatzbedarf von 2nfolgende Vorteile:

1. Signifikant geringerer Speicherplatzbedarf vonn+O s2B .

2. Es können beliebige explizite, insbesondere eingebettete Verfahren verwendet werden.

3. Da die Verfahrenskoeffizienten keinen Einschränkungen unterliegen, kann eine höhere Ordnung mit geringerer Stufenzahl erreicht werden.

4. Eine Schrittweitenkontrolle kann effizient mit Hilfe eingebetteter Lösungen realisiert werden. Die vor-geschlagenen Verfahrenskoeffizienten der 2n-Verfahren besitzen oft keine eingebetteten Lösungen und müssen auf alternative Möglichkeiten zur Schrittweitenkontrolle, z. B. Richardson-Extrapolation, aus-weichen.

5. Die Schrittweitenkontrolle kann mit einem Speicherplatzbedarf von 2n+O s2B

realisiert werden. Die 2n-Verfahren würden ebenfalls einen zusätzlichen Speicherplatzbedarf von mindestensn, in der Regel sogar 2n, also insgesamt einen Speicherplatzbedarf von 3nbzw. 4nbenötigen.

Ein Nachteil des Pipelining-Ansatzes besteht darin, daß nur Probleme mit beschränkter Zugriffsdistanz in-tegriert werden können. Die 2n-Verfahren lassen zwar prinzipiell beliebige Datenabhängigkeiten innerhalb der Funktionsauswertungen zu, da jedoch nur bestimmte Klassen von Verfahrenskoeffizienten eine solche Reduktion des Speicherplatzbedarfs ermöglichen, unterliegen die erreichbaren numerischen Eigenschaften starken Einschränkungen, so daß diese Verfahren ebenfalls nur für spezielle Problemklassen geeignet sind.

4.2.5 Simulationsbasierte Analyse des Lokalitätsverhaltens

Analog zur simulationsbasierten Analyse des Lokalitätsverhaltens der allgemeinen Implementierungen (Abschnitt 2.4.3) werden im folgenden verschiedene Implementierungsvarianten des Pipelining-Berech-nungsschemas untereinander, aber auch mit der allgemeinen Implementierungsvariante (D) verglichen.

Dabei werden folgende Varianten des Pipelining-Algorithmus betrachtet:

I (PipeD):Blockbasierter Pipelining-Algorithmus, wie in Abschnitt4.2.1beschrieben.

I (PipeDE):Blockbasierter Pipelining-Algorithmus ähnlich (PipeD), jedoch wurde als Basisimplementie-rung eine Kombination aus (D) und (E) verwendet, um den Arbeitsraum der Pipelining-Schritte für große Stufenzahlen zu verringern. Dabei werden die Argumentvektorelemente der ersten Stufen mit einer Schleifenstruktur analog Implementierung (E) durch Aufsummieren von Stufenvektorelementen berechnet. Die Argumentvektorelemente der oberen Stufen werden dagegen analog Implementierung (D) sukzessive aktualisiert.

I (PipeDblock): Blockbasierter Pipelining-Algorithmus ähnlich (PipeD), jedoch wurde als Basisimple-mentierung (Dblock) verwendet, um ein Schleifen-Tiling zu realisieren.

I (PipeDel):Elementbasierter Pipelining-Algorithmus auf Basis der Implementierung (D).

Als Beispiele werden, wie in Abschnitt2.4.3, das Testproblem MEDAKZO für den Fall N = 15 000 und das Testproblem BRUSS2D-MIX für den Fall N = 250 betrachtet. Als Verfahren werden DOPRI8(7) für MEDAKZO und DOPRI5(4) für BRUSS2D-MIX eingesetzt. Für BRUSS2D wurdeB = 2N = 500 und für MEDAKZO wurdeB=8 gewählt.

Auswirkungen der Assoziativität und der Zeilengröße

Die Variation der Assoziativität führt für die Implementierung (PipeD) sowohl für MEDAKZO (Abb.4.3(a)) als auch für BRUSS2D-MIX (Abb. 4.3(b)) zu den gleichen Aussagen, wie sie bereits für die allgemeinen Implementierungen getroffen werden konnten. Die Anzahl der Cache-Fehlzugriffe verringert sich, wenn die Assoziativität vergrößert wird. Eine Erhöhung über den Wert 4 hinaus ermöglicht jedoch nur noch geringfügige Verbesserungen. Die negativen Auswirkungen einer geringen Assoziativität sind für große Caches weniger gravierend als für geringe Cachegrößen.

Wie es bereits für die allgemeinen Implementierungen der Fall war, führt auch für die Implementie-rung (PipeD) die VerändeImplementie-rung der Zeilengröße (Abb.4.4) zu einer signifikanten Veränderung der Anzahl der Cache-Fehlzugriffe. Auch hier verringert sich prinzipiell die Anzahl der Fehlzugriffe bei Erhöhung der Zeilengröße. Allerdings vergrößern sich dadurch auch einige Arbeitsmengen, so daß es für bestimmte Cachegrößen zu einer Erhöhung der Anzahl der Fehlzugriffe kommt.

Vergleich der Implementierungen und Identifikation der Arbeitsmengen

Die Abbildungen4.5und4.6zeigen einen Vergleich verschiedener Implementierungsvarianten für die Test-probleme MEDAKZO und BRUSS2D-MIX bei Verwendung eines 16-fach mengenassoziativen Caches mit unterschiedlichen Zeilengrößen. Im Vergleich zu Implementierung (D) verhalten sich die Pipelining-Varian-ten für kleine Cachegrößen, die es noch nicht ermöglichen, daß die Arbeitsmenge eines Pipelining-Schrittes im Cache gespeichert werden kann, sehr ähnlich wie Implementierung (D). Bei Verwendung kleiner Zeilen-größen kann Implementierung (PipeDE) in diesem Bereich oft eine etwas geringere Cache-Fehlzugriffszahl erreichen als Implementierung (D). Die elementweise Implementierung (PipeDel) führt in diesem Bereich dagegen zu einer höheren Zahl von Cache-Fehlzugriffen, was durch eine Erhöhung der Zeilengröße ver-stärkt wird. Ab einer bestimmten Cachegröße, bei der genügend Cachezeilen zur Verfügung stehen, um

4.2 Lokalitätsoptimierungen für sequentielle Implementierungen 183

(a)

4K 16K 64K 256K 1M

105 106 107 108

Größe des Caches in Byte

Anzahl der Cache−Fehlzugriffe 1

2 48 16

(b)

4K 16K 64K 256K 1M 4M

106 107 108

Größe des Caches in Byte

Anzahl der Cache−Fehlzugriffe

12 48 16

Abb. 4.3:Auswirkung der Assoziativität auf die Anzahl der Cache-Fehlzugriffe für Implementierung (PipeD) bei einer Zeilengröße von 128 Byte.(a)MEDAKZO,N=15 000,(b)BRUSS2D-MIX,N=250.

alle Verfahrenskoeffizienten sowie benötigte Stackdaten und Daten von Argumentvektoren zu speichern, die für eine effiziente Ausführung der innersten Schleife erforderlich sind, erreicht Implementierung (D) die geringste Fehlzugriffszahl, bis die Cachegröße auseichend hoch ist, um einen großen Teil der Arbeitsmenge eines Pipelining-Schrittes aufzunehmen. Letzteres tritt abhängig von der Zeilengröße ab einer Cachegröße zwischen 16 KB und 64 KB für MEDAKZO und DOPRI8(7) bzw. zwischen 256 KB und 512 KB für BRUSS2D-MIX und DOPRI5(4) ein. Dies entspricht nahezu exakt der Vorhersage aus der theoretischen Analyse. Nach (4.2) hat der Arbeitsraum eines Pipelining-Schrittes der auf (D) bzw. (Dblock) basierenden Implementie-rungen im Fall von MEDAKZO und DOPRI8(7) eine Größe von 8,3 KB und im Fall BRUSS2D-MIX und DOPRI5(4) eine Größe von 199,2 KB. Implementierung (PipeDE) besitzt einen nur geringfügig kleineren Arbeitsraum als die übrigen Pipelining-Implementierungen. Das Zugriffsmuster der Implementierung (Pi-peDE) führt jedoch dazu, daß die Anzahl der erzeugten Cache-Fehlzugriffe höher ist als für die anderen Pipelining-Implementierungen.

Können die während eines Pipelining-Schrittes benutzten Daten im Cache gespeichert werden, erzeu-gen alle Pipelining-Implementierunerzeu-gen erheblich weniger Cache-Fehlzugriffe als Implementierung (D). Mit Ausnahme der Implementierung (PipeDE) ist ab dieser Cachegröße die Anzahl der Fehlzugriffe für alle un-tersuchten Pipelining-Implementierungen nahezu gleich. Nur (PipeDE) erzeugt eine etwas größere Anzahl von Fehlzugriffen. Wahrscheinliche Ursache dafür ist, daß (PipeDE) innerhalb eines Pipelining-Schrittes zwar insgesamt weniger Vektorelemente benutzt, die Anzahl der verwendeten Vektoren ist jedoch höher, wodurch eine höhere Anzahl von Konfliktfehlzugriffen provoziert wird.