Doping für CPUs — Möglichkeiten der Leistungssteigerung
Ansätze der Optimierung per Hardware (Fortsetzung)
Simultaneous Multi-Threading (Fortsetzung)
IA-32 Decoder
IA-32 Instruktionen sind vom Standpunkt des Decoders her extrem mühselig, verfügen sie doch über eine variable Instrunktionslänge, sowohl in Länge als auch in möglichen Parametern/Optionen. Daher ist der Decoder sehr komplex und aus einer hohen Anzahl von Transistoren aufgebaut, weshalb mal sich bei Intel dafür entschieden hat, den Decoder gemeinsam zu nutzen.
Der Decoder holt sich die IA-32 Instruktionen aus dem Streaming Puffer und decodiert diese, so dass handliche und RISC-ähnliche µOps entstehen, die anschließend in den L1 Trace Cache geschrieben werden. Im Gegensatz zu seinen Vorgängern (686) und Konkurrenten (K7) arbeitet der — oftmals zurecht — als “verkrüppelt” (Darek Mihocka, Pentium 4 in Depth) beschimpfte Decoder des Pentium 4 lediglich einfach, oder anders ausgedrückt: Der Decoder des Pentium 4 kann lediglich eine Instruktion pro Taktzyklus decodieren, wohingegen der Pentium III sowie Athlon bis zu drei Instruktionen pro Taktzyklus decodieren können.
Im Grunde genommen alles halb so wild, kommen doch ohnehin die meisten Instruktionen aus dem Trace-Cache und benötigen deutlich länger als einen Tyktzyklus zum Ausführen. Der Decoder mag zwar langsam erscheinen, die Auswirkungen sind jedoch nicht so gravieren wie man zu Beginn meint.
Kommt nun jedoch ein zweiter logischer Prozessor mit hinzu, so stellt der Decoder plötzlich doch eine massive Beschränkung dar. Bei parallelen Zugriffen muss ergo zwischen den beiden logischen Prozessoren alterniert werden. Hierbei zogen es die Ingenieure vor, erst mehrere Instruktionen für einen logischen Prozessor zu decodieren und anschließend mehrere für den anderen. Bei ungeschicktem Timing kann es hier also durchaus zu längeren Wartezeiten kommen, während denen ein logischer Prozessor zum Nichtstun verdammt ist.
Den Grund für die Entscheidung, den Decoder gemeinsam nutzen zu müssen, gibt Intel mit der enormen Einsparung an DIE-Größe an. Eine Entscheidung, die dem Xeon MP und Pentium 4 HT letztlich signifikant Performance kostet.