Workshopband als PDF - Mpc.belwue.de
Workshopband als PDF - Mpc.belwue.de
Workshopband als PDF - Mpc.belwue.de
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
MPC-WORKSHOP FEBRUAR 2013<br />
Coremark / MHz<br />
0,6<br />
0,5<br />
0,4<br />
0,3<br />
0,2<br />
0,1<br />
0<br />
AMD<br />
Hulk Janus 2.0 Am386DX<br />
-Ox<br />
CM / MHz 0,502 0,292 0,25<br />
Abbildung 3: Optimierte Benchmark Coremark – Ergebnisse.<br />
setzt wur<strong>de</strong>, welcher jedoch über keine Optimie-<br />
rungsoptionen, wie z.B. <strong>de</strong>r GCC-Compiler, verfügt.<br />
Ein Nachteil besteht darin, dass zum einen nicht nur<br />
<strong>de</strong>r verwen<strong>de</strong>te Compiler mitgetestet wird, son<strong>de</strong>rn<br />
auch <strong>de</strong>ssen Optimierungsstufe, was einen direkten<br />
Vergleich <strong>de</strong>r Benchmark-Ergebnisse erschwert.<br />
Ausgehend von diesen Tatsachen erreichte <strong>de</strong>r<br />
SIRIUS HULK einen Benchmark-Wert von<br />
0,502 CM/MHz und <strong>de</strong>r SIRIUS Janus 2.0 einen Wert<br />
von 0,292 CM/MHz. Wie in Abbildung 3 ersichtlich,<br />
ist <strong>de</strong>r SIRIUS HULK damit bereits doppelt so leistungsfähig<br />
wie ein AMD Am386DX und in etwa 72%<br />
schneller <strong>als</strong> <strong>de</strong>r SIRIUS Janus. Ausgehend von diesen<br />
Resultaten stellte sich heraus, dass Optimierungspotential<br />
vorlag, sowohl auf Seiten <strong>de</strong>r Software, <strong>als</strong><br />
auch auf Seiten <strong>de</strong>r Hardware.<br />
A. Software<br />
IV. OPTIMIERUNGEN<br />
Die Verbesserung auf Compiler-Seite bezieht sich<br />
auf die Einführung sogenannter Registervariablen. Der<br />
Unterschied zu <strong>de</strong>n bisher verwen<strong>de</strong>ten Stackvariablen<br />
besteht darin, dass eine im Co<strong>de</strong> angelegte lokale<br />
Variable nicht mehr auf <strong>de</strong>m Stack angelegt wird,<br />
wodurch <strong>de</strong>r Wert <strong>de</strong>r Variablen je<strong>de</strong>s Mal bei Verwendung<br />
mit Hilfe von Load- und Store-Instructions<br />
gela<strong>de</strong>n bzw. abgelegt wer<strong>de</strong>n muss, son<strong>de</strong>rn stets in<br />
einem freien Prozessorregister gehalten wird. Hierdurch<br />
entfallen die Load- und Store-Instructions, was<br />
die Co<strong>de</strong>ausführung beschleunigt. Diese Optimierung<br />
musste rein auf Seiten <strong>de</strong>s Compilers vorgenommen<br />
wer<strong>de</strong>n und hat je nach Anzahl <strong>de</strong>r benötigten lokalen<br />
Variablen Einfluss auf die Gesamtausführungszeit<br />
eines Programmes. Anhand <strong>de</strong>s Benchmarks<br />
Coremark zeigte sich, dass es sich vor allem auf die<br />
Ausführungszeit <strong>de</strong>r CRC-Berechnungen auswirkte<br />
und allgemein wie erwartet auf alle Co<strong>de</strong>abschnitte<br />
mit lokalen Variablen. Eine Begrenzung dieser Optimierung<br />
liegt einzig in <strong>de</strong>r Verfügbarkeit freier Prozessorregister<br />
zum jeweiligen Zeitpunkt, an <strong>de</strong>m <strong>de</strong>r<br />
Einsatz einer Registervariablen möglich wäre. Abbildung<br />
4 zeigt beispielhaft die Verkürzung <strong>de</strong>s auszuführen<strong>de</strong>n<br />
Co<strong>de</strong>s durch <strong>de</strong>n Einsatz von Registervariablen.<br />
<br />
<br />
<br />
Abbildung 4: Einsatz von Registervariablen.<br />
Bisher: Immer 3 Taktzyklen<br />
15 0 15 0 15<br />
0<br />
Jetzt: Entscheidung anhand <strong>de</strong>r Größe <strong>de</strong>s Wertes<br />
Beispiel: ADI (-Short), Wert < 63<br />
15<br />
15<br />
Abbildung 5: Überladung <strong>de</strong>r Instructions.<br />
B. Hardware<br />
0<br />
0 1 0 0 1 1<br />
Beispiel: ADI (-Short), Wert > 63 / „Umschalter“ = 63<br />
0<br />
1 1 1 1 1 1<br />
15 0 15<br />
0<br />
Die Optimierung <strong>de</strong>r Hardware bestand darin, verschie<strong>de</strong>ne<br />
Instructions zu überla<strong>de</strong>n. Das Prinzip dahinter<br />
wird in Abbildung 5 anhand <strong>de</strong>s Befehls ADI<br />
(Add Immediate) ver<strong>de</strong>utlicht. Bisher wur<strong>de</strong> die zum<br />
Quellregister (grün coloriert) zu addieren<strong>de</strong> Konstante<br />
stets in zwei getrennten 16-Bit-Worten übertragen<br />
(rot), unabhängig von <strong>de</strong>r Größe <strong>de</strong>r Konstanten. Da<br />
es sich bei ADI jedoch um einen Immediate-Befehl<br />
han<strong>de</strong>lt, sind in diesem Falle jedoch keine Opco<strong>de</strong>-<br />
Bits für ein Zielregister erfor<strong>de</strong>rlich. Somit sind insgesamt<br />
sechs Bits innerhalb <strong>de</strong>s Opco<strong>de</strong>s ungenutzt (in<br />
Abbildung 5 grau dargestellt). Bei <strong>de</strong>r Überladung<br />
wer<strong>de</strong>n diese ungenutzten Bits nun dazu verwen<strong>de</strong>t,<br />
Konstanten zu <strong>de</strong>finieren. Ist die Konstante größer <strong>als</strong><br />
sechs Bit, wird anhand eines „Umschalters“ <strong>de</strong>m Prozessor<br />
mitgeteilt, dass die zwei darauffolgen<strong>de</strong>n 16-<br />
Bit-Worte die Konstante darstellen. Hieraus ergibt<br />
sich eine verkürzte Ausführungszeit für all diejenigen<br />
Konstanten, die einen Wert kleiner 63 besitzen. Der<br />
Wert 63 dient in diesem Fall <strong>als</strong> „Umschalter“. Somit<br />
können bei <strong>de</strong>r Überladung im I<strong>de</strong>alfall 2 Zyklen pro<br />
überla<strong>de</strong>ner Instruktion gespart wer<strong>de</strong>n.<br />
Bei Sprungbefehlen fällt die ungenutzte Bitbreite<br />
und somit die innerhalb eines Opco<strong>de</strong>s übertragbare<br />
Konstante mit 10 Bit noch größer aus, sodass hieraus<br />
ein maximaler Sprung von ±1022 realisierbar ist. Der<br />
Wert +1024 dient <strong>als</strong> „Umschalter“ in diesem Falle.<br />
Es gilt zu beachten, dass pro Konstanten-Wert immer<br />
um zwei Byte (eine Instruction) gesprungen wird und<br />
hieraus <strong>de</strong>r Sprungbereich von ±1022 resultiert.<br />
41