|
Wir schreiben z.Z. eine Projektarbeit, in der wir die Grundlagen eines Prozessors,
und vor allem verschiedener Architekturmerkmale (Befehlssatz, Pipelining, Sprungvorhersagen, Caches)
zur Performanceteigerung beschreiben.
In der anschließenden Diplomarbeit wollen wir die beschriebenen Merkmale praktisch auf
konkreten Architekturen nachvollziehen, indem wir in Assembler versuchen einfache Algorithmen
(Matrizen-Operationen, Finden des ggT) im Hinblick auf die spezifischen Architekturmerkmale zu anaysieren
unnd ggf. zu optimieren.
Ausgangsbasis bietet jeweils das Kompilat eines C-Codes.
Nach längeren Überlegugen haben wir uns auf den 386er, den 486er und den Pentium geeinigt.
Grund dafür war, dass modernere Prozessoren kaum mehr in der Komplexität, beispielsweise der
superskalaren Pipeline, analysierbar ercheinen. Die genannten Prozessoren hingegen bieten mit jeder
neuen Generation ein neues Architekturmerkmal, welches seperat untersuchbar ist:
386er: einfaches Design, v.a keine Pipeline. Daher Optimierung "nur" über Anordnung der Befehle. Besonders der
effiziente Umgang mit den vorhandenen Registern ist hierbei entscheidend.
486er: hat erstmals eine vergleichsweise einfache dreistufige Pipeline. Hier gilt es Pipeline-Stalls durch
Abhängigkeiten zu erkennen und durch geschicktes Programmieren zu minimieren.
Basis hierfür bildet der für den 386er optimierte Code.
Pentium: hat erstmals eine superskalare Pipeline und eine Befehlssatzerweiterung namens MMX.
Hierbei ergeben sich neue Probleme aufgrund der Superskalarität, ausserdem können die MMX-Befehle
zur Reduzierung der benötigten Taktzyklen eingesetzt werden.
Die Leistung unseres Codes wollen wir anhand der Anzahl benötigter Taktzyklen messen. Hauptspeicherzugriffe
betrachten wir nicht detaillierter, sondern betrachten sie als generell "schlecht" bzw. nehmen eine fiktive
Anzahl Taktzyklen an. Nähere Überlegungen zu Caches wollen wir zunächst vernachlässigen.
Da wir uns zwar mit den Architekturen schon detailliert auseinandergesetzt haben, jedoch noch wenig Erfahrung
mit Assembler haben, fragen wir uns, ob es für unsere Untersuchungen nötig bzw. vorteilhaft ist, direkt auf diesen
Architekzuren zu programmieren(also alte Maschinen besorgen!), oder gibt es Software(Compiler, Debugger),
die die verschiedenen Architekturen simulieren.
Notwendig wäre natürlich, dass der Assembler uns Synatxfehler anzeigt, wenn wir Befehle nutzen, die es auf
gewählter Architektur (noch) nicht gibt.
Desweiteren fragen wir uns, ob es Tools gibt, die uns folende Informationen anzeigen können:
- Anzahl der benötigten Taktzyklen
- Pipelinebelegung
- Anzahl Hauptspeicherzugriffe
- Cache- Hits/Misses
Gruß
Hiwi
|