MIPS-Familie

Matthias Brust
Die Firma MIPS

MIPS Technologies ist der Nachfolger des Prozessorgeschäfts von MIPS Computer Systems, Inc., welches 1984 gegründet und 1992 von Silicon Graphics, Inc. an sich gezogen wurde. Silicon Graphics, Inc. hält mehr als 80 Prozent Eigentum von MIPS Technologies, Inc.

Durch Entwicklungen auf dem embeddet Markt arbeitet MIPS mit vielen namhaften Firmen zusammen, wie beispielsweise Broadcom Corporation., LSI Logic Corporation, NEC Corporation, Philips Semiconductors, Texas Instruments, Toshiba Corporation, Commquest (IBM), Sony Corporation.

Geschäftliche Ziele von MIPS Technologies, Inc.

MIPS Technologies, Inc. entwickelt kostengünstige high-performance 32- und 64-bit RISC (reduced instruction set computing) Prozessoren für den Endbenutzer und den high-end embedded Markt.

Entwicklungen von MIPS Technologies sind Bestandteile von Produkten wie beispielsweise Video-Spielkonsolen, Set-top Boxen, Digitalen Kameras, und handlichen Rechengeräten, die Mircosoft Windows CE unterstützen.

Endverbraucher und der embedded Markt

MIPS Technologien können in einem großen Anwendungsbereich von Video Games, wie z.B. Nintendo 64 und die PlayStation Spielekonsole gefunden werden. Aber auch in Network Computers von Tektronix und in Network Computing Devices, Inc.; handlichen Geräten unter Benutzung von Microsoft Windows CE und Philips Velo 500, Samsung PalmPC und NEC® MobilePro 750c; und digitalen set-top Boxen von General Instruments, EchoStar Communications Corporation und WebTV. Aber auch in anderen Andwendungen von arcade games, Kommunikationsgeräten und mehr.

High-end embedded Produkte

Die MIPS-Architektur entfaltet seine Kraft in einer Reihe von Anwendungen wie Laser-Drucker von Hewlett-Packard, Okidata und Lexmark sowie zahlreiche Kopierer, genauso wie Router von Cisco, Bay Networks und mehr.

MIPS Höhepunkte

Heute gibt es mehr als 35 seperate Team zur Entwicklung MIPS-basierter Produkte. Es existieren mahr als 80 verschiedene MIPS Prozessoren, die entwickelt wurden und vermarktet werden von MIPS Technologies, Inc. und/oder den Partnern. Folgend kurz eine Auflistung der Höhepunkte von MIPS.

Nennenswerte MIPS-Prozessoren
R4000

Der R4000 ist ein 64-bit Prozessor. Auf ihm können jedoch auch problemlos 32-Bit Applikationen laufen. Selbst dann, wenn der Prozessor im 64-bit Operationsmodus läuft.

R4000 Highlights

  • 64-bit On-chip Floating-point Unit (FPU)
  • 64-bit Integer Arithmetic Logic Unit (ALU)
  • 64-bit Integer Register
  • 64-bit Virtueller Adressraum
  • 64-bit Systembus
R4300

Der MIPS R4300 ist ein high-performance, low-cost RISC Mikroprozessor, der für den kostengünstigen embeddet Markt entworfen wurde.

R4300 Highlights

  • 64-bit Architektur
  • 3.3V, 100+MHz, 1.8W
R5000

Der MIPS R5000 Mikroprozessor ist ein echte 64-bit Implementierung der MIPS IV Architektur und ist ISA kompatibel mit der R4000 Familie. Der R5000 besitzt On-chip-1st Level Caches, 32KB Instruktion und 32KB Data.

R5000 Highlights

  • 2-way superskalare Pipeline
  • Accelerates 3D graphics
  • MIPS IV ISA kompatibel
Der MIPS 10000 Prozessor
Leistungsmerkmale

Der R10000 ist ein Einchip superskalarer RISC-Mikroprozessor, der eine konsequente Weiterentwicklung der Prozessoren R2000, R3000 (Embedded Systems), R6000, R4400 (bekannt aus NintendoTM und Freunden) ist.

Skalierbarkeit bezeichnet die Möglichkeit, die Zahl der Prozessoren mit dem tatsächlichen Rechenbedarf zu erweitern, ohne daß eine andere Betriebssoftware erforderlich wird. Neben der dynamischen Erweitbarkeit eines Rechnersystems ist auch einer Reduktion der Zahl der Prozessoren im laufenden Betrieb von Wichtigkeit, da bei großen Prozessorzahlen die Wahrscheinlichkeit eines Prozessorausfalls erheblich zunimmt. Die Skalierbarkeit erlaubt in solchen Fällen die Fortsetzung des Betriebs mit einer geringeren Zahl von Prozessoren.

Diese Konzeption erhält allerdings dadurch einen empfindlichen Dämpfer, daß bei der effizienten Verteilung einer Berechnung auf mehrere Prozessoren die Laufzeit durch die Zahl der verfügbaren Prozessoren sowie die Art ihrer Kommunikation erheblich beeinflußt wird. Der Ausfall von einem oder mehreren Knoten kann dann über die Leistungsreduktion hinaus zu zusätlichen Leerzeiten der verbleibenden Prozessoren und damit zu einer substantiellen Verschlechterung des Durchsatzes führen. Deshalb wird der Wert einer Skalierbarbeit in erster Linie für die Bearbeitung unabhängiger Aufträge, als den Multiprogrammierungsbetrieb, gesehen.

Der R10000 wurde in der MIPS ANDES -Architektur realisiert, was ausgeschrieben heißt Achitektur with Non- sequential Dynamic Execution Scheduling oder Architektur mit nicht-sequentieler Befehlsausführung.

Fakten

Als Haupteigenschaften des MIPS R10000 sind zu nennen:

Das Schema des MIPS R10000 zeigt seine grundsätzlichen Strukturen. Es sind deutlich die Piplines, sowie der Taktgeber in der unteren Bildhälfte zu erkennen. Auf der oberen Bildhälfte befinden sich die Caches. Der 1st Level Cache sitzt auf dem Prozessorchip, während sich der 2nd Level-Cache außerhalb befinden. Auf die genaue Arbeitsweise soll folgend eingegangen werden.

CACHE-Design und Zugriffsstrategien

Der Prozessor verfügt über einen für Daten und Befehle getrennten 1st-Level- Cache mit einer Größe von jeweils 32 KB. Beide Casches sind zweifach assoziativ. Der Befehlscache hat eine feste Zeilenlänge von 16 Words, der Datencache eine von 8 Words.

Für den 2nd-Level-Cache ist ein Cachecontroler mit Unterstützung für Multiprocessing im Chip vorhanden, der von 512 KB bis zu 16 MB groß sein kann und ebenfalls zweifach assoziativ ist. Die Länge der Cachezeilen ist zu 16 oder 32 Words konfigurierbar und bei einer Konfiguration zu 32 Word und einer Gesamtgröße bis 2 MByte wird der korrekte Cache-Weg statistisch vorhergesagt. Alle Cacheebenen arbeiten nach dem Writeback-Algorithmus und mit einer LRU-Strategie.

LRU bedeutet least recently used: Die am längsten nicht benutzte Daten werden als Kandidat prognostiziert, auf die auch in Zukunft am längsten nicht mehr zugegriffen werden soll.

Daneben gibt es noch FIFO und LFU, die, um der Theorie Rechnung zu tragen, hier erklärt werden sollen.

FIFO (first-in, first-out): Die Daten, welche am längsten im Speicher stehen, werden ausgelagert.

LFU (least frequently used): Die Daten, welche am wenigsten oft benutzt wurden, werden ausgelagert.

Im Fall eines Miss-on-Cache-Write kommt eine sogenannte Fill-on-write- miss-Strategie zum Einsatz, die nach o.g. Mechanismus Platz im 1st-Level-Cache schafft, um die Daten möglichst schnell loszuwerden. Beim zyklischen Write- Back geschieht dieses nach gleichem Prinzip im 2nd-Level-Cache, es wird dort Platz geschaffen und später erst in den Hauptspeicher geschrieben. Folglich gibt es diesem Prozessor keinen Write-through, mit Ausnahme von Bereichen für die das Caching deaktiviert wurde.

Für Speicherbereiche mit deakiviertem Cache gibt es noch die Möglichkeit eine uncached-accelerated-Strategie zu benutzen, die vier Speicherzugriffe abpuffert und diese dann gesammelt, wenn möglich im Blockmode, zurückschreibt. Dieses ist besonders für Zugriffe auf Videospeicher von Interesse, wo der Videochip zur Darstellung immer die aktuellen Daten braucht und nicht darauf warten kann, das die Daten die Caches durchlaufen hat. Der uncached-Mode ist notwendig, da der Prozessor memory-mapped-IO für die Anbindung von Peripheriegeräten, wie z.B. eine PCI-Bridge, benutzt.

Eine besondere Eigenschaft der Caches ist die Ausführung als nicht blockierender Cache, was es ermöglicht während eines Cache-Refills, sei es nun aus dem 2nd- Level-Cache oder aus dem Hauptspeicher, weiter auf den Cache zuzugreifen. Da- durcher wird ein Anhalten der Pipelines weitestgehend ausgeschlossen. Während des Cache-Refill für den 1st-Level-Instruction-Cache ( bzw. beschreiben ) wird darüber hinaus ein Predecode ausgeführt, der den Aufwand an späterer Stelle minimiert.

Die Pipelines

Der Prozessorkern ist in einem superskalaren Design ausgeführt und arbeitet mit insgesamt sechs weitestgehend unabhängigen Pipelines und ebenso vielen Ausführungseinheiten. Für jede der Operationstypen, Integer, Float und Load/Store, steht eine Warteschlange für Befehle zur Verfügung. Für letztere steht eine streng nach dem FIFO-Prinzip geordnete Warteschlange bereit um Speicherabhängigkeiten und Datenkonsistenz zu gewährleisten. Die anderen beiden sind keiner strengen Ordnungsregeln unterworfen. Es verläßt ein Befehl dessen Abhängigkeiten, in Bezug auf Operanden, erfüllt sind, die Warteschlange und wird ausgeführt. Jede der beiden Einheiten verfügt über ein Registerfile mit 32 logischen Registern zu 64 Bit, die auf 64 physikalischen Registern abgebildet werden. Zu jedem physikalischen Register gehört immer nur ein Wert. Wird auf ein logisches Register eine Operation ausgeführt, so wird das Ergebnis in ein nicht zugewiesenes Register geschrieben.

Nachfolgend die sieben Stufen der 4-Wege-Pipeline (vier Befehle gleichzeitig):

Stufe 1: Diese Stufe holt pro Zyklus bis zu 4 Befehlen, unabhängig, wie sie innerhalb einer Cachezeile ausgerichtet sind. Die einzige Einschränkung besteht darin, daß der Prozessor nicht über die Grenze einer Cachezeile laden kann.

Stufe 2: In der 2. Stufe werden die Befehle dekodiert und die Operandenregister, die durch logische Adressen referenziert werden, umbenannt, d.h. an ihrer Stelle die physikalische Adresse eingetragen und als benutzt markiert. Des weiteren wird ein freies Register reserviert, das das Ergebnis des Befehls aufnimmt.

Stufe 3: In dieser Stufe werden die Befehle in die Warteschlangen vor den Ausführungseinheiten eingetragen. In dieser Stufe beginnt die eigentliche Befehlsausführung.

Stufen 4-6: In den Stufen 4-6 werden die eigentlichen Operationen ausgeführt. Für die einzelnen Ausführungseinheiten stehen verschieden Pipelines zur Verfügung.

Diese Pipeline ist 3-stufig. In ihr werden Multiplikation und bedingte Speicherbefehle für einfach und doppelte Genauigkeit mit einer Wiederholrate von 1 Zyklus und einer Latenzzeit von 2 Zyklen ausgeführt. In der dritten Stufe wird das Ergebnis in das Zielformat gepackt und in das Registerfile zurückgeschrieben.

Diese Einheit hat keine Pipeline im eigentlichen Sinn. Vielmehr verwendet sie die Recheneinheiten der Multiplizierereinheit und arbeitet iterativ. Sie ist in der Lage Divisionen und Radizierungen parallel auszuführen.

Auch diese Pipeline ist 3-stufig. In ihr werden Additionen, Subtraktionen Vergleiche und Formatwandlungen mit einer Wiederholrate von 1 Zyklus und einer Latenzzeit von 1 Zyklus ausgeführt.

Diese Pipeline ist, soferner man davon sprechen kann, 1-stufig. Diese Stufe führt Additionen, Subtraktionen, logische Operationen und die Auswertung der Sprungvorhersage aus. Die Latenzzeit ist 1 Zyklus und die Wiederholrate ebenfalls 1 Zyklus.

In dieser, ebenfalls 1-stufigen, Pipeline werden Additionen und Subtraktionen sowie Multiplikationen und Divisionen durchgeführt. Die Latenzzeit ist 1 Zyklus und die Wiederholrate ebenfalls 1 Zyklus für Addition und Subtraktion, ansonsten deutlich höher, nach Tabellen bestimmbar.

Diese Einheit hat einen 16-Einträge-Stack um ebenso viele Speicherzugriffe nicht blockierend auszuführen. Sie verfügt über ein eigenes 44-Bit Adressrechenwerk für logische Adressen und einen 64 Einträge großen TLB, der vollassoziativ ist.

Stufe 7: In dieser Stufe beenden die Befehle gemäß ihrer ursprünglichen Programmreihenfolge. Es können bis zu 32 Befehlen außerhalb ihrer Reihenfolge behandelt werden.

Register-Renaming

Registerrenaming ist eine Methode um auf relativ einfache Art und Weise Operandenabhängigkeiten zu überprüfen und die spekulative Ergebnisse von Befehlen reversible zu machen. Die Implementierung im R10000 macht von dieser Methode sehr aggressiv Gebrauch. Wie oben erwähnt, besitzt der Prozessor zwei Registerbänke zu 32 logischen, die auf 64 physikalische Register abgebildet werden und im Bezug auf das Renaming identisch sind. Beim Renaming werden im ersten Schritt logische Registeradressen gegen physikalische Adressen ersetzt und dem Zielregister ein neues physikalisches Register zugewiesen. Das Originalregister und dessen logische Adresse werden bis zur Befehlsbeendigung durch die siebte Stufe der Pipeline zwischengespeichert. Dadurch ist es möglich Befehle außerhalb ihrer Reihenfolge zu bearbeiten und die produzierten Ergebnisse gemäß der Programmreihenfolge in die Registerfiles zu schreiben. Ferner ist das Abbrechen eines spekulativ ausgeführten Befehles möglich wie sie bei bedingten Sprüngen auftreten.

Spekulationen und Vorhersagen

Die Entwickler des Prozessors sind wahrscheinlich nach dem Prinzip vorgegangen, das man so ziemlich alles vorhersagen kann. Die in diesem Zusammenhang herausragende Funktion ist die speculativ execution. Der Prozessor führt intern eine Sprungvorhersage nach einem statistischen 2-Bit-Kriterium aus und führt die Befehle entlang des Vorhergesagt Pfades aus. Es wird die Sprunggeschichte der letzten 512 ausgeführten Sprünge protokolliert. Er ist in der Lage bis zu vier falsch vorhergesagte Sprünge zu revidieren, was durch den Mechanismus des Registerrenaming vereinfacht wird. Beim Abbruch oder rückgängig machen einer Operation wird dem logischen Ergebnisregister sein ursprüngliches physikalisches Register wieder zugewiesen und somit das Ergebnis verworfen.

Des weiteren trifft der Prozessor Vorhersagen darüber, wo in dem, wie Eingangs erwähnt 2-fach assoziativen, Cache die Daten liegen. Er ist in der Lage bis zu einer Cachegröße von 2 MByte und einer Zeilenlänge von 32 Words Vorhersagen zu machen. Laut Entwicklerangaben ist der Performancegewinn größer als wenn man mehr Cache verwendet.

Systeminterface

Die Schnittstelle zum Chipsatz, der hier external-agent heiß, und zu anderen Prozessoren besteht im wesentlichen aus einem 64-Bit Adress-/Daten-Multiplexbus, einem 12-Bit Commandbus und einer Anzahl von Signalen zur Datenflußkontrolle. Das Interface ist asynchron und nicht blockierend, was durch mehrere Pufferspeichern, teils auch FIFO's, realisiert wird. Darunter befindet sich auch die Logik für den oben erwähnten uncached accelerated-Mode. Ferner unterstützt das Interface auch das Multiprocessing in zwei verschiedenen Arten:

Diese Variante findet Anwendung bei großen Rechner-Arrays, wo man deutlich mehr Leistung braucht, als man es aus einem Computer in Big-Tower-Größe erwarten könnte. Es können hiermit beliebig (annähernd) viele Prozessoren verbunden werden. Jeder von ihnen muß über einen exteranl agent verfügen, der für die Kommunikation mit dem Hauptspeicher, der I/O und den anderen ea verantwortlich ist. Es muß selbstverständlich dafür sorge getragen werden, das die Verbindung der ea kohärent ist.

Dieses ist die einfachere Variante, wo 2-4 Prozessoren direkt am Systeminterface verbunden sind und sich den ea, der Jet cluster-coordinater heißt, teilen. Die Verteilung der Zugriffsrechte wird mit den drei Signalen SysRequest, SysRelease und SysGrant durch den cluster-coordinater gesteuert.

In beiden der Betriebsarten werden folgende drei Kohärenzprotokolle unterstützt:

Die Prozessoren im Slave-Mode ,"schnüffeln" auf dem Bus und reagieren, je nachdem, ob sie angesprochen sind oder nicht. Dieses ist das einfachste aller Protokolle mit dem geringsten Hardware-Aufwand, aber auch das langsamste. Jeder Prozessor, wenn er nichts mit den Informationen auf dem Bus anfangen kann, muß dieses dem aktuellen Master-Prozessor mitteilen, was bei drei Slaves einen beträchtlichen Protokoll-Overhead ausmacht..

Bei diesem Protokoll melden sich Slave-Prozessoren nur, wenn sie vom cluster- coordinater angesprochen werden. Selbiger besitzt eine Kopie aller 2nd-Level- Tags im Cluster und weiß somit, ob sich ein angefordertes Datum in einem der Slave-Caches befindet. Wenn dem so ist, dann gibt er die Anfrage an den entsprechenden Prozessor weiter, der dem Auftraggeber einen Response liefert, ansonsten wird ein Hauptspeicher ausgeführt. Der Protokoll-Overhead sinkt auf dem Bus und der Hardware-Aufwand beim vom cluster-coordinater steigt.

Über dieses Protokol schweigt sich die Dokumentation weitestgehend aus. Sie ist den duplicated Tags ähnlich. Es werden zusätzlich Informationen über den Prozessor gehalten. Welcher Cache hält welche Einträge.

Die external agents oder cluster-coordinater sind nicht wie bei anderen Prozessoren erhältlich. Sie werden in der Regel nach eigenen Bedürfnissen von dem Systemdesigner entworfen und in ASIC's realisiert.

Ein Vergleich zum MIPS R12000

Der MIPS R12000 stellt eine direkteWeiterentwicklung des MIPS R10000 dar. Es wurden einige kleine Verbesserungen vorgenommen, die die Prozessor-Performance insgesamt auf über 23 % gegenüber dem MIPS R10000 erhöhte, und dadurch eine eigene Prozossornummer rechtfertigt. Auszugsweise werden jetzt diese Verbesserungen vorgestellt.

Beim MIPS R12000 wurde die Active List von 32 Einträgen auf 48 Einträge erhöht. Diese Erweiterung erlaubt mehr Befehlen entweder in der Liste auf ihre Ausführung zu warten oder Ausgeführt zu werden. Bei einem Branch, erlaubt diese dem Prozessor spekulativ mehr Befehle auszuführen, was auch tiefere Spekulation genannt wird. In den allermeisten Situationen, erhöhen diese beiden Effekte die Anwendungs-Performance.

Wenn der MIPS R10000 Daten vom Systembus zu dem zweiten Cache transferierd, wird der Cache-Controller für eine Weile lahmgelegt, bis die komplete Cache-Zeile vom Hauptspeicher eingelesen wurde. Da der Systembus-Takt entscheidend langsamer ist als der Prozessortakt, kann ein ganzer Zeilenübertrag für den zweiten Cache eine Ruhepause von einigen Duzent Zyklen bedeuten. Während dieser Zeit keine andere Anfrage kann beanwortet werden. Beim MIPS R12000 ist der Transfer einer Cachezeile vom Systembus zum zweiten Cache in zwei Unterblöcke geteilt, vier für den Datencache und drei für den Instruktionencache mit freien Zyklen zwischen jedem Unterblock. Während diesen Zyklen können andere Operationen initiert werden vom zweiten Cache Controller. Wenn Daten vom Systembus kommen während dieser Zeit, werden sie gespeichert bis der Transfer vorbei ist. Insgesamt reduziert diese Veränderung den Zeitverbrauch der anderen Operationen. Das hilft ganz besonders den Anwendungen, die permanenten Miss auf den ersten und zweiten Cache haben.

Zwei Veränderungen verbessern den MIPS R12000 bezüglich seiner Performance bei Branch-Befehlen. Erstens die 4fache Erweiterung der Voraussagetabelle erhöht die Genauigkeit. Zweitens, ein 32einträgiger Target Adress Cache produziert die Zieladressen für Branch-Befehle. Beim MIPS R10000 jeder Branch verursacht einen 1 Leerlaufzyklus in der Pipline, während die Zieladresse berechnet wird. Der Leerlauf wird eliminiert, wennimmer der Branch einen hit auf das Zielcache macht. Branch-Befehle können von 15 % bis 20 % der gesamten auszuführenden Instruktionen einer Anwendung ausmachen. Deshalb ist die Vergrößerung der Branch Prediction Table und die Branch Target adress Cache ein großer zur allgemeinen Verbesserung der Anwendungs-Performance.

Der MIPS R10000 kann keine Instruktionen dekodieren, wenn die Adress-Warteschlange voll wird. Beim MIPS R12000, alle load, store, cacheop, und prefetch Instruktionen werden zu der Integer-Warteschlange gesendet und in der Address calculation Unit veröffentlicht. Sie werden dann aus der Integer-Warteschlange in die load/store Warteschlange plaziert. Obwohl dadurch zusätzliche Instruktionen in die Integer-Warteschlange kommen, werden sie normalerweise sehr schnell weitergeleitet. Diese Veränderung vereinfacht beträchtlich das Design dieser Prozessorkomponenten ohne die Anwendungs-Performance zu verändern.

 

Quellenangaben

[1] www.mips.com

[2] www.sgi.com

[3] www.sgi.de

[4] Hennessy and Patterson: Computer Architecture - A quantitative Approach (1996)

[5] Kane, G.: MIPS RISC Architecture, Prentice-Hall (1988)

Go to Main Go to Previous Go to Next