7.3 Compiler für eingebettete Systeme
399
Partitionierte Speicher sind insbesondere für wechselnde Speicheranforderungen
vorteilhaft. Häufig verwendete Speicherstellen werden auch die Arbeitsmenge (engl.
working set) einer Anwendung genannt. Anwendungen mit einer kleinen Arbeitsmenge könnten einen sehr kleinen, schnellen Speicher verwenden, wogegen Anwendungen, die eine größere Arbeitsmenge benötigen, einem entsprechend größeren
Speicher zugeordnet werden könnten. Ein wesentlicher Vorteil von partitionierten
Speichern ist ihre Fähigkeit, sich der Größe des aktuellen Arbeitsmenge anzupassen.
Weiterhin können ungenutzte Speicher zur Energieeinsparung abgeschaltet werden.
Wir betrachten allerdings nur den „dynamischen” Energieverbrauch, der durch Speicherzugriffe verursacht wird. Zusätzlich kann aber auch Energie benötigt werden,
wenn der Speicher nicht verwendet wird; dieser Verbrauch wird hier nicht betrachtet.
Daher lassen sich Einsparungen durch das Abschalten von Speichern nicht in den
Gleichungen (7.11) und (7.12) finden.
• Link-/Ladezeit-Speicherzuordnung [421]: Die Optimierung von Code auf eine
feste SPM-Größe zur Übersetzungszeit hat einen Nachteil: der Code könnte eine schlechte Leistung aufweisen, wenn er auf Varianten eines Prozessors mit unterschiedlichen SPM-Größen ausgeführt wird. Es sollte vermieden werden, unterschiedliche ausführbare Programme für Varianten eines Prozessors zu erzeugen.
Daher sind wir an ausführbaren Programmen interessiert, die von der SPM-Größe
unabhängig sind. Dies lässt sich durch Optimierung zur Link-Zeit erreichen. Der
vorgeschlagene Ansatz berechnet das Verhältnis der Zugriffszahlen dividiert durch
die Größe einer Variablen zur Übersetzungszeit und speichert diesen Wert zusammen mit anderen Informationen über die Variable im ausführbaren Programm. Zur
Ladezeit wird das Betriebssystem nach der Größe der SPMs gefragt. Daraufhin wird
der Code modifiziert, so dass möglichst viele nutzbringende Variablen dem SPM
zugeordnet werden.
Überlagernde Belegung
Große Anwendungen können mehrere hot spots (Codebereiche mit rechenintensiven Schleifen) haben. Nicht-überlagernde Ansätze liefern in diesem Zusammenhang
nicht die bestmöglichen Ergebnisse. Für solche Anwendungen sollte der SPM für
jeden der hot spots ausgenutzt werden. Dazu ist eine automatische Migration zwischen den einzelnen Ebenen der Speicherhierarchie erforderlich2. Diese Migration
kann explizit in der Anwendung programmiert werden oder automatisch ausgeführt
werden. Bei überlagernder Belegung nehmen wir meist an, dass alle Anwendungen
zur Entwurfszeit bekannt sind. Die Algorithmen von Verma [554] und von Udayakumararan et al. [548] sind frühe Beispiele zur Behandlung dieser Situation.
Der Algorithmus von Verma startet mit dem Kontrollflussgraphen (CFG) einer
einzelnen Anwendung. Für die Kanten dieses Graphen betrachtet Verma die Option,
den SPM für lokal genutzte Speicherobjekte freizuräumen.
2 Ein Teil des Stoffes in diesem Unterabschnitt findet sich auch in einem Kapitel desselben Autors
in einem Buch desselben Verlages [377].
399
Partitionierte Speicher sind insbesondere für wechselnde Speicheranforderungen
vorteilhaft. Häufig verwendete Speicherstellen werden auch die Arbeitsmenge (engl.
working set) einer Anwendung genannt. Anwendungen mit einer kleinen Arbeitsmenge könnten einen sehr kleinen, schnellen Speicher verwenden, wogegen Anwendungen, die eine größere Arbeitsmenge benötigen, einem entsprechend größeren
Speicher zugeordnet werden könnten. Ein wesentlicher Vorteil von partitionierten
Speichern ist ihre Fähigkeit, sich der Größe des aktuellen Arbeitsmenge anzupassen.
Weiterhin können ungenutzte Speicher zur Energieeinsparung abgeschaltet werden.
Wir betrachten allerdings nur den „dynamischen” Energieverbrauch, der durch Speicherzugriffe verursacht wird. Zusätzlich kann aber auch Energie benötigt werden,
wenn der Speicher nicht verwendet wird; dieser Verbrauch wird hier nicht betrachtet.
Daher lassen sich Einsparungen durch das Abschalten von Speichern nicht in den
Gleichungen (7.11) und (7.12) finden.
• Link-/Ladezeit-Speicherzuordnung [421]: Die Optimierung von Code auf eine
feste SPM-Größe zur Übersetzungszeit hat einen Nachteil: der Code könnte eine schlechte Leistung aufweisen, wenn er auf Varianten eines Prozessors mit unterschiedlichen SPM-Größen ausgeführt wird. Es sollte vermieden werden, unterschiedliche ausführbare Programme für Varianten eines Prozessors zu erzeugen.
Daher sind wir an ausführbaren Programmen interessiert, die von der SPM-Größe
unabhängig sind. Dies lässt sich durch Optimierung zur Link-Zeit erreichen. Der
vorgeschlagene Ansatz berechnet das Verhältnis der Zugriffszahlen dividiert durch
die Größe einer Variablen zur Übersetzungszeit und speichert diesen Wert zusammen mit anderen Informationen über die Variable im ausführbaren Programm. Zur
Ladezeit wird das Betriebssystem nach der Größe der SPMs gefragt. Daraufhin wird
der Code modifiziert, so dass möglichst viele nutzbringende Variablen dem SPM
zugeordnet werden.
Überlagernde Belegung
Große Anwendungen können mehrere hot spots (Codebereiche mit rechenintensiven Schleifen) haben. Nicht-überlagernde Ansätze liefern in diesem Zusammenhang
nicht die bestmöglichen Ergebnisse. Für solche Anwendungen sollte der SPM für
jeden der hot spots ausgenutzt werden. Dazu ist eine automatische Migration zwischen den einzelnen Ebenen der Speicherhierarchie erforderlich2. Diese Migration
kann explizit in der Anwendung programmiert werden oder automatisch ausgeführt
werden. Bei überlagernder Belegung nehmen wir meist an, dass alle Anwendungen
zur Entwurfszeit bekannt sind. Die Algorithmen von Verma [554] und von Udayakumararan et al. [548] sind frühe Beispiele zur Behandlung dieser Situation.
Der Algorithmus von Verma startet mit dem Kontrollflussgraphen (CFG) einer
einzelnen Anwendung. Für die Kanten dieses Graphen betrachtet Verma die Option,
den SPM für lokal genutzte Speicherobjekte freizuräumen.
2 Ein Teil des Stoffes in diesem Unterabschnitt findet sich auch in einem Kapitel desselben Autors
in einem Buch desselben Verlages [377].
