Die Entwicklungsgeschichte der SPARC-Architektur beginnt bereits in den Jahren 1980-84, als SUN Microsystems, Hersteller von Unix-Workstations, nach Prozessoren zum Ersatz der zu rechenschwach gewordenen Motorola 680x0-Reihe suchte. Verschiedene Versuche mit anderen CPUs (z.B.: SUN 386) ernüchterten die Entwickler und ließen den Entschluß reifen, einen eigenen Prozessor herzustellen, der den Bedürfnissen nach Geschwindigkeit und Skalierbarkeit entsprach. Vorgabe war, einen modernen Prozessor mit einfachem Aufbau zu beschreiben, der zudem genügend Potential in sich barg um lange Zeit einsatzfähig zu sein. Da SUN selbst keine Chips produzierte, entwickelte man eine Instruction-Set-Architecture, die an mehrere Prozessorhersteller lizenziert wurde. Der Name dieser 1985 vorgestellten Architektur war SPARC, ein Acronym für Scalable Processor Architecture. Basis des Systems war ein entsprechend den Wünschen der SUN Entwickler modifizierter RISC-2 Prozessor, der TMS 9900, der 1983 um Professor Patterson an der University of Berkeley entwickelt wurde. Texas Instruments schaffte es, einen, der SPARC-Definition entsprechenden Chip herzustellen und bereits 1987 verkaufte SUN den ersten auf SPARC basierenden 32-bit Rechner.
Um der fortschreitenden Entwicklung der SPARC Architektur Vorschub zu leisten gründete SUN 1989 SPARC International, ein Konsortium zur Förderung und Wahrung der SPARC Architektur. Geburtskapital dieses offenen Vereins, bei dem jeder Mitglied werden kann, waren die Rechte an der SPARC Architektur. 1994 wurde mit der SPARC Version 9 die erste 64-bit SPARC Architektur vorgestellt, und noch im gleichen Jahr konnte HAL, ein Mitglied von SPARC International, den ersten SPARC Version 9 konformen Prozessor, SPARC64, anbieten. Wenige Monate später verkaufte SUN den ersten SPARC V9 konformen Prozessor, den UltraSPARC-1 und schließlich wird seit 1997 der UltraSPARC-2 Prozessor, eine Weiterentwicklung des UltraSPARC-1, produziert.
SPARC ist keine proprietäre Prozessorfamilie, sondern eine Instruction-Set-Architecture, das heißt eine Beschreibung der Eigenschaften der Hardware aus Sicht der Software. Das Verhalten und die Eigenschaften des Prozessors werden definiert, nicht aber die Umsetzung dieses Verhaltens in einem realen Chip oder einem Simulationssystem. Die Überprüfung auf SPARC-Konformität übernimmt SPARC International, das eingereichten Systemen nach bestandener Prüfung die SPARC Compliance bestätigt. Hieraus folgt, daß unterschiedliche Chips oder Chip-Sets oder gar Simulationssysteme konform der SPARC-Definition sein können und sich somit als SPARC-Systeme bezeichnen dürfen.
SPARC-Prozessoren bestehen per Definition aus einer Floating Point Unit (FPU), einer Integer Execution Unit (IEU) und optional aus einem oder mehreren benutzerdefinierten CoProzessoren (CP). Weiterhin stellt die SPARC Definition eine Memory Management Unit vor, die als Referenz-MMU nach belieben verwendet werden kann. Als RISC Architektur erlaubt SPARC Speicherzugriffe und I/O nur mittels Load/Store durch die IEU. Die Steuerung und der Datentransfer von/zu der FPU und dem CP erfolgt immer über die IEU, die die zentrale Steuereinheit des Prozessors ist.
Speicherworte und Register sind 32 oder 64 bit breit, über die genaue Art des Bussystems, der Caches und weiterer implementationsabhängiger Systemteile gibt die Definition keine Auskunft, da, wie bereits angesprochen, SPARC eine Instruction-Set-Architecture ist und somit den Herstellern in allen Fragen der Implementation freie Hand läßt.
Die FPU arbeitet parallel, nicht notwendigerweise synchron, zur IEU, d.h. daß eine einmal angestoßene Operation der FPU bis zu ihrem Abschluß die Operationen der IEU nicht unterbricht oder verzögert. Eine SPARC FPU besitzt 32 Register zu je 64 bit, die wie folgt verwendet werden können:
32 32-bit Register (Half Word)
32 64-bit Register (Word)
16 128-bit Register (Double Word)
Um die Eigenschaften der FPU genau zu beschreiben, wurden die IEEE Standards 754 (32bit Floating Point Processing) und 1596.5 (64bit Floating Point Processing) verwendet, die von jeder SPARC Version 9 konformen FPU erfüllt werden.
Die Integer Execution Unit (IEU) ist das zentrale Rechenwerk der SPARC Architektur. Sie ist zuständig für alle Integer- und Adressberechnungen. Da SPARC eine RISC Architektur ist, existiert kein Microcode. Alle Instruktionen werden in einem Taktzyklus ausgeführt (One-Instruction-per-Cycle) und alle Speicherzugriffe geschehen RISC-typisch nur durch Load/Store Operationen. Die SPARC-Architektur besitzt eine Pipeline mit Interlock, d.h. daß die Prozessorpipeline den Zugriff auf die Zielregister von Load/Store Operationen solange verzögert, bis die Daten korrekt aus dem Hauptspeicher geladen wurden.
Die SPARC V9 Architektur beschreibt 25 Register, die für die Steuerung und Kontrolle des Prozessorzustandes unbedingt vorgesehen und damit fest definiert sind. Hierzu gehören neben dem Prozessor Status Register auch Program Counter, Trap Register und Registerfenster Steuer- und Statusregister, wie in Tabelle 1 aufgelistet. Neben diesen fest definierten Registern können je nach Prozessorimplementierung weitere Register optional eingesetzt werden.
SPARC Prozessoren besitzen ein Current Window Pointer Register, das auf das jeweils aktive Registerfenster des Prozessors verweist. Obwohl alle SPARC Register wenigstens 32 bit breit sind, werden nur 5 bit des CWP Registers verwendet, was zur Folge hat, daß maximal 32 Registerfenster adressierbar sind. Somit besitzen SPARC Prozessoren maximal 32 Registerfenster zu jeweils 16 Registern, sowie 8 globale Register. Die Definition schreibt unter anderem ein Minimum von 3 Registerfenstern vor, das konforme Prozessoren besitzen. Die User-Software kann von diesen maximal 520 Registern jeweils nur 32 Register adressieren, nämlich 8 incoming Register, 8 outgoing Register, 8 lokale Register sowie die 8 globalen Register.
Wie im folgenden Abschnitt gezeigt wird, sind immer 3 Registerfenster in Verwendung, so daß nur die Anzahl der Registerfenster-2 für Funktionen verwendbar sind (daher resultiert auch die Forderung nach mindestens 3 Registerfenstern). Dadurch, daß sich die Frames der outgoing- und incoming-Register überschneiden, wird die Verwendung des Speicherstacks bei Funktionsaufrufen und Traps reduziert. Nur wenn eine Funktion oder Trap mit mehr als 8 Argumenten aufgerufen wird, muß ein Window Fill/Spill-Trap ausgeführt werden, der einem konventionellen Zugriff auf einen Stack entspricht. Window Fill/Spill ist auch notwendig, wenn die Anzahl der verwendeten Registerfenster größer der Anzahl der verfügbaren Registerfenster ist. Hierbei werden ganze Registerfenster in den Hauptspeicher ausgelagert und bei Bedarf wieder eingelagert. Dies geschieht durch einen hochprioren Hardware-Trap (siehe Abschnitt Traps und Interrupts). Wie in Bild 2 dargestellt, reduziert der Window-Overlap, die Verwendung eines speicherbasierten Stacks. Aufgrund der Untersuchungen von Patterson/Hennessey um 1980 wurden die quantitativ nachgewiesenen Größen von Funktions- und Prozeduraufrufen zur Auslegung der Registerframes und -fenster verwendet.
Das Management der Register Windows geschieht vollständig unter der Kontrolle der Hardware, was ausschließt, daß Registerfenster überschrieben oder übersprungen werden. Ein Wechseln des Registerfensters geschieht durch die SAVE Instruktion, die den Inhalt eines Registerfensters sichert und den Current Window Pointer (CWP) inkrementiert. Sollten keine freien Registerfenster verfügbar sein, so kommt es zu einem Window Spill/Fill Trap, der den Inhalt eines Registerfensters in den Hauptspeicher auslagert. Hier werden die Inhalte der Registerfenster wie in einem normalen LIFO-Stack gehalten. Um zu erkennen, wann Registerfenster verfügbar sind, bzw. wann ein Window Spill/Fill Trap ausgelöst wird, existieren die Zeigerregister Restoreable Windows Register, Savable Windows Register und Other Windows Register. Restorable Windows Register enthält die Anzahl der Registerfenster, die vom momentanen Programm verwendet werden können, ohne daß RESTORE einen Window Fill Trap auslöst. Savable Windows Register enthält die Anzahl der Registerfenster, die nicht aktuell verwendet werden, und somit ohne Window Spill Trap verfügbar sind. Other Windows Register enthält die Anzahl der Windows, die mit Spill/Fill ein- bzw. ausgelagert werden sollen.
Traps sind alle Arten von Unterbrechungen des Kontrollflußes. Dies können Interrupts sein, also Unterbrechungen durch die Hardware, oder Unterbrechungen durch Funktionsaufrufe der Software, beispielsweise um Dienste des Kerns in Anspruch zu nehmen (Softwareinterrupts oder Kernel-Traps). Traps verhalten sich wie unerwartete Prozeduraufrufe. Sie veranlassen die Hardware
Für den SPARC Prozessor ist keine Unterscheidung dieser Traps nötig, da die Systemsoftware auf Traps mit entsprechenden Trap Handlern reagieren muß. Der Prozessor bietet hierfür 5 verschiedene Trap Level an, die je nach Dringlichkeit gestaffelt sind. Jeder Trap besitzt eine Dringlichkeit, die dem Trap-Level entspricht. Bearbeitet der Prozessor einen Trap vom Level 0, so heißt das, daß der normale Programmfluß abgearbeitet wird. Um die Trap-Handler zu vereinfachen, können nur Traps eines höheren Levels wie der des momentan Bearbeiteten den Kontrollfluß unterbrechen. Die Trap Handler müssen dadurch nicht auf niederpriore Traps eingehen, um diese eventuell später zu behandeln. Die Trap Level und die Trap Typen sind in Tabelle 2 aufgelistet.
|
RED-state handler (Handler für Prozessorfehler; Reset-, Error-, Debug State) |
Um Traps verwenden zu können, müssen zunächst von der Systemsoftware die Trap Handler installiert werden. Hierzu wird das Trap Base Register der SPARC Version 9 Hardware mit der Startadresse des Trap Handling Codes beschrieben. Im Trap Type Register ist für den jeweiligen Trap der Offset des Trap Handlers festgelegt, der beschreibt, wie weit der Handler von der im Trap Base Register festgelegten Startadresse entfernt ist. Dieser Offset besteht aus jeweils 8 Instruktionen, 32 Instruktionen für Window spill/fill Traps, die von den Trap Handlern mitgenutzt werden können. Die hieraus resultierende Adresse wird auch als Trap Vektor bezeichnet. Der Vorteil dieser Methode besteht darin, daß eventuell mit diesen 8 bzw. 32 Instruktionen Sprünge im Trap Handling Code reduziert oder vermieden werden können. Da Traps des Typs 1, also System Calls und Interrupt Handler die Majorität der Traps ausmachen, wurden mit SPARC V9 Fast-Traps eingeführt.
Hierbei wird nicht wie bisher in Version 7 und 8 üblich für jeden Trap ein Registerfenster der General Purpose Register verwendet, sondern es existieren zusätzlich 8 Alternalte Global Registers, die exklusiv für Trap Level 1 Code reserviert sind. Durch Fast-Traps werden zusätzliche Window spill/fill Traps vermieden, bzw. reduziert, da diese 8 Register immer verfügbar sind.
Bei den direkten Traps wird ein Trap vor Abschluß einer Instruktion und der damit verbundenen Zustandsänderung des Prozessors ausgelöst.
Um den Durchsatz in der Pipeline zu erhöhen und Wartezeiten bei der Instruktionsbearbeitung zu vermeiden, können Instruktionen beendet werden und den Prozessorzustand ändern bevor alle Auswirkungen auf das System bekannt sind. Erzeugt eine solche Instruktion nach ihrer Beendigung einen Trap, so spricht man von deferred Traps, da die erforderliche Ausnahmebehandlung erst nach der Zustandsänderung des Prozessors einsetzen kann. Beispiele für deferred Traps sind Speicheroperationen, bei denen während der Instruktionsausführung nicht klar ist, ob die Operation korrekt beendet wird, da sie eventuell erst einige Zyklen nach der Instruktionsbearbeitung zum Abschluß kommt. Statt dessen muß in diesem Fall der Prozessorzustand vor der Instruktionsausführung gesichert werden, um bei Bedarf den Prozessor wieder in seinen ursprünglichen Zustand (Zustand vor Beginn der Instruktion) zurücksetzen zu können. Die zu sichernde Zustandsmenge ist von der Tiefe der Pipeline und der Verzögerung der Operationen abhängig. Um den Prozessorzustand zuverlässig wiederherstellen zu können, erlaubt SPARC keine Verzögerung von Traps über neue Traps hinaus. Sonst können z.B. die Registerfenster gewechselt, oder I/O durchgeführt werden, was den alten Systemzustand nicht mehr reproduzierbar macht. Nachteil von verzögerten Traps ist, daß die alten Prozessorzustände gesichert werden müssen, was nur durch das Speichern der Registerinhalte, und somit einer erhöhten Speicherkapazität der CPU möglich ist. Der entscheidende Vorteil von verzögerten Traps ist, daß die nachfolgenden Instruktionen bereits abgearbeitet werden können, obwohl eine vorhergehende Operation noch nicht vollständig abgeschlossen wurde. Die Verwendung von deferred Traps ist in der SPARC Definition Version 9 optional.
Die Länge einer Instruktion ist immer 32 bit. Die SPARC Instruktionsformate können grob in 4 verschiedene Kategorien gegliedert werden, die wiederum aus mehreren Unterformaten bestehen. Die bits 30 und 31 bilden das op-Feld, das beim Instruction Predecoding verwendet wird.
Insgesamt besitzt der SPARC Version 9 Instruktionssatz 82 fest definierte Integer-Instruktionen. Zu diesen kommen je nach Implementierung bis zu 5 herstellerdefinierte Integer-Instruktionen hinzu. Neu am Instruktionssatz ist, daß in Branch Instruktionen ein 1 bit p-Feld existiert, das angibt, ob eine Branch verfolgt wird oder nicht. Neu ist auch die Gruppe der Conditional Move Operationen MOVcc, MOVr, FMOVcc und FMOVr, die, abhängig von Condition Codes (cc) bzw. Registerinhalten (r), Inhalte von Source-Registern verschieben. Z.B. kann der C-Ausdruck
Die bereits in SPARC Version 8 vertretenen Multiprozessor Synchronisationsprimitive wurden an die neue Architektur angepaßt. Die Barrier Instruktion STBAR wurde zu MEMBAR, der 64 bit Variante. Obwohl hiermit wechselseitiger Ausschluß programmiert werden kann, existieren weitere, atomare, Instruktionen zum direkten wechselseitigen Ausschluß.
|
Vergleicht den Wert eines Registers mit einem Speicherinhalt. Wenn die Werte gleich sind, wird der Speicherwert mit dem Registerwert getauscht. |
|
Die Speichermodelle der SPARC Architektur definieren die Semantik der Speicheroperationen. Hauptsächlich werden je nach Speichermodell unterschiedliche Forderungen an die Reihenfolge der Load und Store Operationen gestellt.
Das Speichermodell Total Store Order definiert, daß alle Store Operationen, also alle Schreiboperationen in den Hauptspeicher in der Reihenfolge ihrer Initiierung, also in Order ausgeführt werden müssen. Leseoperationen in den Hauptspeicher werden in der Reihenfolge ihrer Initiierung ausgeführt und sind zudem blockierend. D.h. daß aufeinanderfolgende Leseoperationen solange blockieren, bis die Zielregister beschrieben sind. Schließlich sind die atomaren Load/Store Operationen sowohl bezüglich Load- als auch Store Operationen geordnet.
Der Einsatzbereich von TSO ist hauptsächlich auf Single-Prozessor-Rechner beschränkt, da die Einschränkungen dieses Modells im Multiprozessorbetrieb hohe Wartezeiten bedeuten. Total Store Order ist ein Auslaufmodell in der SPARC-Architektur, da TSO nur aus Kompatibilitätsgründen zu den SPARC Versionen 7 und 8 besteht und in künftigen SPARC Definitionen wahrscheinlich nicht mehr vorkommt.
Bei dem Speichermodell Partial Store Order sind die Load Operationen untereinander, sowie die atomaren Load/Store Operationen bezüglich der Load Operationen geordnet. Load Operationen sind wie in TSO blockierend, Schreiboperationen sind jedoch nicht geordnet. Auch PSO ist ein Auslaufmodell, wird jedoch wahrscheinlich später als TSO aus den SPARC-Definitionen entfernt.
Alle Programme, die korrekt im PSO Speichermodell arbeiten, arbeiten zudem auch korrekt im TSO Speichermodell.
Relaxed Memory Order legt bei Speicherzugriffen keine Ordnung fest, mit Ausnahme derer, die für die Konsistenz des Prozessors nötig sind. D.h., daß der Programmierer/Compiler für die Anordnung der Speicherzugriffe verantwortlich ist. Dies ist besonders im Multiprozessorbetrieb vorteilhaft, da der Programmierer die Semantik der Operationen überblickt, und nur in notwendigen Fällen die Speicherzugriffe steuert. Diese Steuerung geschieht explizit mittels MEMBAR Instruktionen, die die Zugriffe auf Speicherbereiche bis zum Abschluß der Operation blockieren kann. Da im Relaxed Memory Order Speichermodell keine Ordnung der Speicheroperationen garantiert ist, arbeiten alle Programme, die korrekt im RMO Speichermodell ablaufen auch korrekt im PSO Speichermodell und somit auch korrekt im TSO Speichermodell. Programme die im RMO Modell korrekt arbeiten, arbeiten sowohl im PSO- als auch im TSO Modell korrekt.
Eine Adresse in SPARC-V9 ist ein Tupel aus einem 8-bit Address Space Identifier (ASI) und einem 64-bit byte-address Offset in den spezifizierten Adressraum. Speicher ist byte-aligned mit Zugriff auf Halbworte, der 2-byte-aligned ist, 4-byte-aligned Zugriff auf Ganzworte und 8-byte-aligned Zugriff auf Doppelworte. Die standard (Maschinen-) Wortlänge beträgt 64 bit, also das Doppelwort. Neben dem einfachen physikalischen und virtuellen Speicherzugriff und dem Zugriff auf adressierbare I/O Bereiche, unterstützt SPARC V9 bis zu 254 weitere Address Spaces.
Address Spaces sind Speicherbereiche unterschiedlicher Interpretation, die sich physikalisch überlagern können, oder als Namensaliases, mit unterschiedlicher Semantik, auf die physikalisch gleichen Adressbereiche zugreifen. Address Space Identifier werden im Prozessor gesetzt und im allgemeinen Fall von der Memory Management Hardware interpretiert. Hiermit ist es möglich
Hierzu dienen verschiedene ASIs, nämlich protected und unprotected ASIs. Protected ASIs können nur im Supervisor Mode des Prozessors zugegriffen und verändert werden, wogegen unprotected ASIs auch im User Mode verwendet werden können. Address Space Identifier werden z.B. auch für die Implementierung der atomic Operations, wie MEMBAR oder SWAP verwendet. Dieser Modus heißt dann ASI_NUCLEUS, im Gegensatz zu ASI_PRIMARY bei normalen Speicherzugriffen. Insgesamt darf man ASIs als Adress-Aliases verstehen, die zudem die Semantik der Speicherzugriffe definieren. Hiermit können z.B. auch Trap-Operationen in einem vom restlichen System logisch disjunkten Raum mit veränderter Semantik der Speicherzugriffe ausgeführt werden. Dies ist besonders beim Debugging hilfreich, wenn der gesamte Adressraum ohne Speicherschutzmechanismen verfügbar ist.
Obwohl heutzutage faßt jeder Prozessor mit einer on-Chip MMU ausgeliefert wird, beschränkt sich die SPARC Architektur auf die Beschreibung einer Referenz-MMU, die wie der Name bereits sagt nur als Referenz für eventuelle MMUs existiert. Dem jeweiligen Hersteller ist überlassen, ob und wie er dem System eine MMU hinzufügt. Entsprechend ist die Beschreibung dieser Referenz-MMU einfach gehalten und verlangt kaum mehr als einfach Logik, die
Eine SPARC-MMU betreibt Adressübersetzung, solange sie nicht ausgeschaltet ist. Hierzu liest sie aus dem Prozessor Status Register heraus, in welchem Adressierungsmodus der Prozessor arbeitet. Kann die MMU eine Speicheradresse nicht auflösen, so sendet sie dem Prozessor einen Access-MMU-miss Trap, kann auf eine Speicheradresse aus Gründen des Speicherschutzes nicht zugegriffen werden, so sendet die MMU einen Access-Protection Trap. Alle weiteren Eigenschaften der MMU, wie TLBs oder die Position relativ zu den Caches ist herstellerabhängig.
Suns Spitzenprozessor ist der seit 1997 verfügbare UltraSPARC-2 Prozessor, ein SPARC Version 9 konformer RISC-Prozessor, der aus einer 9-stufigen Integer-Pipeline, Floating-Point-Unit mit VIS1- Instruktionssatz sowie einer SPARC Referenz MMU besteht. Lieferbar ist der UltraSPARC-2 Prozessor zur Zeit mit Taktfrequenzen zwischen 300 und 480 MHz. Der Sun UltraSPARC-2 Prozessor existiert in wenigstens zwei nicht dokumentierten, unterschiedlichen Versionen, nämlich einer älteren, in 0.35m produzierten, nicht mit ECC-Error Correction Code ausgerüsteten Version, sowie in einer neueren Version mit ECC über alle Caches. Hergestellt in 0.25m Strukturen und aus ca. 5,4 Millionen Transistoren bestehend belegt dieser neuere UltraSPARC-2 Prozessor ca. 156 mm Chipfläche. Beide Prozessoren besitzen 28 Status- und Kontrollregister, 8 Register Fenster zu je 16 General-Purpose-Registern sowie 8 Trap-Level 1 Register.
Aufgrund der geringen Transistoranzahl besitzt der UltraSPARC-2 Prozessor keine Out-Of-Order-Execution-fähigkeit. Um Synchronisationsprobleme in der Pipeline zu vermeiden operiert die FPU des UltraSPARC-2 synchron zur IEU, d.h. mit einer 9-stufigen Pipeline mit 3 Wartezyklen (siehe Bild 9). Auch bei der Branch-Prediction, verwendet Sun einen einfachen Ansatz. Die Branch-Prediction-History ist 2 bit tief, mit der folgenden Funktion
|
branch was not taken, but will be taken next time. No change in prediction. |
||
|
branch was not taken, and will not be taken. History changes prediction |
Das Visual Instruction Set, eine Prozessorerweiterung, die nicht in der SPARC Definition vorkommt, ist ein ähnlicher Ansatz, wie MMX bei Intel. Die FPU übernimmt mit einem erweiterten Instruktionssatz zusätzliche Aufgaben. Diese beschränken sich auf 64-bit RGBa-Berechnungen. Hierbei wird jeder Bildpunkt in 4x16 bit codiert (16 bit jeweils für Rot, Grün, und Blau, sowie 16 bit Alphablending). Auf diesem 64-bit Wort wird dann eine SIMD Berechnung ausgeführt. Das Ergebnis wird FPU-typisch von der IEU wieder gelesen, bzw. in neue Speicherbereiche geschrieben.
|
4x16-bit / 2x32-bit Pixel Pack Clips 4x16/2x32-bit Integer Values to 4x8-bit Integer Values |
|
Weitere Instruktionen zum Vergleichen, Transformieren, Multiplizieren und Dividieren von Pixelpacks und 8-bit, 16-bit, und 32-bit Teilworten sind verfügbar. Hiermit können komplexe Operationen, z.B. packed -> planar, ausgeführt werden. Nachteil ist wie auch bei MMX, daß während der Ausführung von VIS-Instruktionen die verwendeten Register der FPU nicht für eigentliche Floating Point Operationen zur Verfügung stehen. Da die SPARC FPU 32 64-bit Register besitzt, ist hier jedoch das Aufteilen der Register auf VIS-Instruktionen und Floating Point Instruktionen einfacher zu handhaben.
Fujitsus Top-Prozessor der SPARC-Serie ist der SPARC64-GP, ein direkter Nachfolger des SPARC64. Der SPARC64-GP ist ein mit 272 MHz getakteter SPARC Version 9 konformer RISC-Prozessor mit 17,5 Millionen Transistoren, der in 0,25m Strukturen gefertigt wird. Er besitzt ein volles Out-Of-Order-Execution Modell, 52 sichtbare Kontroll- und Statusregister, sowie 5 GeneralPurpose-Registerfenster zu je 16 Registern. 28 dieser 52 Register werden für Hardware-Performance-Monitoring verwendet
Weiterhin besitzt er die obligatorischen 8 Fast-Trap Register und 34 freie Register, die für Register-Renaming, also das Bereitstellen frischer Register in der Out-Of-Order Execution benötigt werden. Hiermit können bis zu 63 Instruktionen Out-Of-Order bearbeitet werden, die erst in der letzten Stufe der Pipeline synchronisiert werden.
Im Gegensatz zum Sun UltraSPARC-2 Prozessor besitzt der SPARC64-GP zwei Integer Functional Units, eine für Fixed-Point Integer Operationen, eine weitere für Fixed-Point Integer Operationen und Adressoperationen. Jede dieser Einheiten besteht aus zwei ALSs (Arithmetic Logic Shift Units), die parallel zueinander operieren. Zudem besitzt der Prozessor zwei Floating-Point Einheiten die aus jeweils einem Floating-Point Multiply-Adder und einem Floating-Point Divider bestehen, so daß bis zu 4 Floating-Point Operationen parallel ausgeführt werden können. Um auch hier Out-Of-Order Operationen zu unterstützen, besitzen die FPUs die in SPARC Version 9 definierten 32 Floating-Point Register, sowie weitere 32 Rename Register. Zwei Load-/Store-Units, die für eine durchschnittliche Beschleunigung des Speicherdurchsatzes um den Faktor 1.5 im Vergleich zu einer LSU, verantwortlich sind beliefern den Prozessor mit Instruktionen und Daten. Im Gegensatz zur Sun UltraSPARC operieren die FPUs nicht synchron zur IEU, sondern besitzen eine nur 4 Cyclen tiefe Pipeline. Der Fujitsu/HAL SPARC64-GP besitzt keine On-Chip MMU, was durch die Verwendung mehrstufiger TLBs ausgeglichen wird. So besitzt der SPARC64-GP drei TLBs mit je 32 Einträgen, einen für Instruktionen und zwei TLBs für Daten, sowie TLBs mit 256 Einträgen ebenfalls sowohl für Instruktionen wie für Daten. Hiermit unterstützt der SPARC64-GP Seitengrößen des Speichers zwischen 4 KByte und 4GByte. Außerdem wurde ein sogenannter Level-0 Cache für Instruktionen eingeführt, der 16 KByte groß ist und zwischen Instruktion-Buffer und Level-1 Cache angesiedelt ist. Insgesamt legten die Entwickler des SPARC64-GP stärkeren Wert auf eine permanent gefüllte und operierende Pipeline, was viele große Caches, parallele Einheiten und eine hochentwickelte 2-stufige Branch-Prediction Unit zur Folge hat. Circa 11 Millionen der 17,5 Millionen Transistoren des Prozessors werden in Caches und Puffern eingesetzt. Um die Größe des Prozessor-dies so zu gestalten, daß er in der Ultra-Port-Architecture (UPA), einer von Sun definierten Prozessor-Bus Schnittstelle, eingesetzt werden kann, verzichtete man auf eine On-Chip MMU. Sie ist als externer Chip mit weiteren, beschleunigenden Eigenschaften, wie getrenntem Memory- und Cache-Bus und vergrößerten TLBs implementiert.
Obwohl der Sun UltraSPARC-2 Prozessor mit überlegenen Taktfrequenzen operiert, kann man die 360 MHz Version mit Fujitsu/HALs SPARC64-GP Prozessor mit 272 MHz vergleichen. Trotz des um ein drittel höheren Takts des UltraSPARC-2 Prozessors schneidet der SPARC64-GP sowohl in der Integer- als auch in der Floating Point Leistung nach SPECint95, bzw. SPECfp95 besser ab. Dies liegt hauptsächlich an der besseren Ausnutzung der Pipeline durch große Caches und der Out-Of-Order-Execution Fähigkeit des HAL-Prozessors. Allerdings besitzt der UltraSPARC-2 Prozessor einen einfacheren Aufbau. Der SPARC64-GP muß mehr als die dreifache Transistorzahl mit Spannung versorgen um die erhöhte Leistung zu erbringen. Zudem ist Fujitsu/HALs Prozessor auf den Bereich der Server-Systeme ausgelegt, was unter anderem an der möglichen sehr großen Seitengröße von 4 GByte erkennbar ist (typische Anwendung Datenbankrechner).
Trotz der Vielzahl gemeinsamer Parameter, sind die Prozessoren jedoch nicht wirklich vergleichbar. Suns Prozessor ist für den Bereich der Hochleistungs-Workstation gebaut worden, der HAL-Prozessor ein echter Server Prozessor, z.B. auch ohne VIS. Da speziell RISC-Rechner von hochentwikkelten Compilern profitieren, die die Nutzung der Pipeline optimieren, ist der SPARC64-GP zwar auf dem Papier einem UltraSPARC-2 Prozessor überlegen, da er die Ordnung des Programmcodes in Hardware reorganisiert, hochentwickelter und optimierter Code benötigt diese Reorganisierung aber kaum, da Code Reorganisation faßt nur bei schlechten Compilern, altem Code oder bei Floating Point Instruktionen verwendet wird.
Die Definition im ,SPARC Architecture Manual Version 9" auf Seite 18 Paragraph 3.2.1.4 schreibt zur Harvard-Architektur und Programmen die ihren Code selbst modifizieren:
,For this reason, programs that modify their own code (self-modifying´code) must issue FLUSH instructions, or a system call with a similar effect, to bring instruction and data memories [caches] into a consistent state."
David L.Weaver, Tom Germond: SPARC Architecure Manual Version 9, SPARC International, Prentice-Hall