14.01.2015 Aufrufe

Dynamische Adaption in heterogenen verteilten eingebetteten ...

Dynamische Adaption in heterogenen verteilten eingebetteten ...

Dynamische Adaption in heterogenen verteilten eingebetteten ...

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

2 Grundlagen und Techniken<br />

zwei statt vier Byte codiert. E<strong>in</strong>e ähnliche Möglichkeit bietet der TriCore-Mikrocontroller an. Hier gibt<br />

es neben den normalen 32-bit-Befehlen spezielle 16-bit-Versionen der häufig genutzten Befehle, um<br />

kle<strong>in</strong>eren Code zu erzeugen [Inf05].<br />

Um die Größe der Befehle zu reduzieren, ist oft die Größe der Operanden e<strong>in</strong>geschränkt sowie die<br />

Operationen auf bestimmte Register begrenzt. Trotz dieser E<strong>in</strong>schränkungen ist der resultierende Code<br />

oft kle<strong>in</strong>er als bei Verwendung der normalen Befehle. Besonders bei Mikrocontrollern mit sehr wenig<br />

Speicher wirkt sich die E<strong>in</strong>schränkung der Operandengröße weniger stark aus, da auch mit verkürzten<br />

Operanden e<strong>in</strong> größerer Teil des Adressraums ansprechbar ist.<br />

Die Ausführung der 16-bit-Befehle benötigt <strong>in</strong> der Regel genauso viele Taktzyklen wie die entsprechenden<br />

32-bit-Befehle. Die kompaktere Darstellung des Codes kann sich allerd<strong>in</strong>gs positiv auf die<br />

Nutzung des Instruktionscaches auswirken. Bei e<strong>in</strong>igen ARM-Prozessoren wird jedoch darauf h<strong>in</strong>gewiesen<br />

[ARM06], dass die kompaktere Codierung der Sprungbefehle zu e<strong>in</strong>er leichten Verschlechterung<br />

der Sprungvorhersage (branch prediction) führen kann.<br />

2.1.1.2 Zwischencode<br />

Unabhängig vom tatsächlich e<strong>in</strong>gesetzten Prozessor, kann man e<strong>in</strong>e Anwendung auch <strong>in</strong> e<strong>in</strong>em Zwischencode<br />

beschreiben, der e<strong>in</strong>e besonders kompakte Darstellung erlaubt. Dem Zwischencode liegt<br />

oft e<strong>in</strong>e virtuelle Masch<strong>in</strong>e zugrunde. Zur Ausführung muss der Code <strong>in</strong>terpretiert werden. Es gibt<br />

zahlreiche Beispiele, zu den grundlegenden Arbeiten zählt der bei Pascal e<strong>in</strong>gesetzte P-Code [Bar81]<br />

und die Experimental Mach<strong>in</strong>e (EM-1) [Tan78].<br />

Die kompakte Darstellung wird oft dadurch erreicht, <strong>in</strong>dem man auf e<strong>in</strong> stackbasiertes Masch<strong>in</strong>enmodell<br />

setzt, wodurch die explizite Angabe der Operanden entfällt. Wird der Code und der Interpreter<br />

für e<strong>in</strong>en speziellen E<strong>in</strong>satzzweck entworfen, so können außerdem die Befehle genau angepasst werden,<br />

wodurch e<strong>in</strong>zelne Befehle relativ mächtig s<strong>in</strong>d.<br />

Der Nachteil dabei ist allerd<strong>in</strong>gs, dass die Verwendung e<strong>in</strong>es Interpreters zusätzlichen Speicherplatz<br />

benötigt. Außerdem ist die Ausführungsgeschw<strong>in</strong>digkeit, im Vergleich zu e<strong>in</strong>er direkten Ausführung<br />

des nativen B<strong>in</strong>ärcodes, <strong>in</strong> der Regel langsamer, da das Programm verarbeitet und umgesetzt werden<br />

muss.<br />

2.1.1.3 Codeerzeugung<br />

Beim Übersetzen e<strong>in</strong>es Programms aus e<strong>in</strong>er höheren Sprache <strong>in</strong> Masch<strong>in</strong>encode können verschiedene<br />

Optimierungen e<strong>in</strong>gesetzt werden, um die Größe des erzeugten Codes zu bee<strong>in</strong>flussen [Muc97].<br />

E<strong>in</strong>e Möglichkeit ist, Code zu elim<strong>in</strong>ieren, der nicht verwendet wird oder ke<strong>in</strong>e Auswirkung auf<br />

das Ergebnis des Programms hat. Allerd<strong>in</strong>gs lässt sich unerreichbarer Code nicht immer zuverlässig<br />

identifizieren, vor allem wenn die Erreichbarkeit von externen Daten oder Ereignissen abhängt. Manche<br />

unnötige Anweisungen können jedoch während des Übersetzungsvorganges anhand e<strong>in</strong>es Kontroll- und<br />

Datenflussgraphen erkannt und elim<strong>in</strong>iert werden. Beispielsweise kann die Zuweisung e<strong>in</strong>es Wertes zu<br />

e<strong>in</strong>er Variablen entfernt werden, wenn sie später nicht mehr ausgelesen wird.<br />

Neben der Entfernung von unbenötigten Programmteilen hat der Compiler häufig mehrere Möglichkeiten<br />

e<strong>in</strong>e Folge von Anweisungen e<strong>in</strong>er höheren Sprache <strong>in</strong> Masch<strong>in</strong>ensprache umzuwandeln. Dabei<br />

unterscheiden sich die Möglichkeiten oft <strong>in</strong> der Größe des resultierenden Codes und <strong>in</strong> der geschätzten<br />

Ausführungsgeschw<strong>in</strong>digkeit.<br />

E<strong>in</strong> Beispiel hierfür ist die Identifikation von doppeltem Code. Es gibt verschiedene Situationen, <strong>in</strong><br />

denen Code doppelt erzeugt wird. So ist beispielsweise das Ende e<strong>in</strong>er Funktion oft ähnlich oder gleich.<br />

10

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!