SPARC

De Viquipèdia
Dreceres ràpides: navegació, cerca
Sun UltraSparc II

SPARC (de l'anglès Scalable Processor ARChitecture) es una arquitectura RISC big-endian. És a dir, una arquitectura amb un conjunt reduït d'instruccions.

Va ser originalment dissenyat per Sun Microsystems i dirigit per l'enginyer Kaa en 1985, es basa en els dissenys RISC I i II de la Universitat de Califòrnia, Berkeley, definits entre els anys 1980 i 1982.

L'empresa Sun Microsystems va dissenyar aquesta arquitectura i la va llicenciar a altres fabricants com Texas Instruments, Cypress Semiconductor, Fujitsu, LSI Logic entre altres.

SPARC és la primera arquitectura RISC oberta i com tal, les especificacions de disseny estan publicades, així més fabricants de microprocessadors poden desenvolupar el seu propi disseny.

Una de les idees innovadores d'aquesta arquitectura és la finestra de registres que permeten fer fàcilment compiladors d'alt rendiment i una significativa reducció de memòria en las instruccions load/store en relació amb altres arquitectures RISC. Els avantatges s'aprecien sobretot en programes grans.

La CPU SPARC està formada d'una unitat sencera, UI (Integer Unit) que processa l'execució bàsica i una FPU (Floating-Point Unit) que executa les operacions i càlculs de reals. La IU i la FPU poden o no estar integrades en el mateix xip.

Encara que no és una part formal de l'arquitectura, els PCs basats amb sistemes SPARC de Sun Microsystems tenen una unitat de maneig de memòria (MMU) i un gran caché de direccions virtuals (per instruccions i dades) que estan disposats perifèricament sobre un bus de dades i direccions de 32 bits.

Principals característiques[modifica | modifica el codi]

  • La seva característica distintiva es utilitzar finestres de registres.
  • 32 registres de sencers de 32 bits.
  • 16 registres de punt flotant de 64 bits (pel cas de doble precisió) que es poden utilitzar com 32 registres de 32 bits (per a precisió simple).
  • Modes de direccionament:
    • Immediat, (constants de 13 bits).
    • Directe, (offset de 13 bits).
    • Indirecte, (registre + offset de 13 bits o registre + registre).
  • Utilitza instruccions retardades (salts, load i store).
  • Maneig de memòria:
    • Espai virtual de 4 Gigabytes.
    • Unitat de maneig de memòria (MMU) que treballa amb pàgines de mida configurable.

Tipus d'instruccions[modifica | modifica el codi]

L'arquitectura SPARC te prop de 50 instruccions senceres, poques més que l'anterior disseny RISC, però menys de la mitat del nombre d'instruccions senceres del 6800 de Motorola.

Les instruccions de SPARC es poden classificar en cinc categories:

  • LOAD i STORE (L'única manera d'accedir a la memòria). Aquestes instruccions utilitzen dos registres o, un registre i una constant per calcular l'adreça de memòria a direccionar.
  • Instruccions Aritmètico/Lògiques/Desplaçament. Executen operacions aritmètiques, lògiques i de desplaçament de bits. Aquestes instruccions calculen el resultat si es una funció de 2 operadors i emmagatzemen el resultat en un registre.
  • Operacions del coprocessador. La IU extrau les operacions de punt flotant des de les instruccions del bus de dades i els situa en la cua per la FPU. La FPU executa els càlculs de punt flotant amb un nombre fix en unitat aritmètica de punt flotant, (el nombre depèn de l'aplicació). Les operacions de punt flotant són executades concurrentment amb les instruccions de la IU i amb altres operacions de punt flotant quan és necessari. L'arquitectura SPARC també especifica una interfície per la connexió d'un coprocessador addicional.
  • Instruccions de Control de Transferència. Aquestes inclouen jumps, calls, traps i branches. El control de transferència es retardat usualment fins després de l'execució de la pròxima instrucció, així el pipeline no es buidat perquè es produeixi un control de temps. D'aquesta manera, els compiladors poden ser optimitzats per ramificacions retardades.
  • Instruccions de control de registres Read/Write. Aquestes instruccions s'inclouen per llegir i enregistrar el contingut de diversos registres de control. Generalment la font del destí està implícit en la instrucció.

Finestra de registres[modifica | modifica el codi]

Un tret únic que caracteritza al disseny SPARC, és la finestra amb solapament de registres. El processador posseeix molt més que 32 registres sencers, però presenta a cada instant 32. Una analogia pot ser creada comparant la finestra de registres amb una roda rotativa. Alguna part de la roda sempre està amb contacto amb el terra; així al girar-la prenem diferents porcions de la roda, (l'efecte es similar per al overlap de la finestra de registres). El resultat d'un registre es canvia per l'operand per la pròxima operació, descartant la necessitat d'una instrucció Load i Store extres.

Es va acordar per l'especificació de l'arquitectura, poder disposar de 32 registres "visibles" dividits en grups de 8.

  • De r0 a r7 , Registres GLOBALS.
  • De r8 a r15, Registres SORTIDA.
  • De r16 a r23, Registres LOCALS.
  • De r24 a r31, Registres ENTRADA.

Els registres globals són "vistos" per totes les finestres, els locals solament són accessibles per la finestra actual i els registres de sortida es solapen amb els registres d'entrada de la següent finestra (els registres de sortida per una finestra s'han de ficar com a registres d'entrada per la pròxima, i han d'estar en el mateix registre).

El punter de finestra manté la pista de la finestra que actualment és activa. Existeixen instruccions per "obrir" i "tancar" finestres, per exemple per una instrucció "call", la finestra de registres gira en sentit anti horari; pel retorno des d'una instrucció "call", gira en sentit horari.

Una interrupció utilitza una finestra fresca, és a dir, obre una finestra nova. La quantitat de finestres és un paràmetre de la implementació, generalment 7 o \d.

L'alternativa més elaborada per circundar lentament la finestra de registres es col·locar els registres durant el temps de compilació. Per a llenguatges como C, Pascal, etz., aquesta estratègia és difícil i consumeix molt temps. Per això, el compilador és crucial per millorar la productivitat del programa.

"Recents investigacions suggereixen que la finestra de registres, trobada en els sistemes SPARC però no en altres màquines RISC comercials, estan en condicions de proveir un rendiment excel·lent per a llenguatges de desenvolupament com Lisp i Smalltalk." (R. Blau, P.Foley, etz. 1984).

Especificacions dels microprocessadors SPARC[modifica | modifica el codi]


Especificacions microprocessadors SPARC
Model Freqüència
[MHz]
Versió de
l'Arquitectura
Any Threads Per Core * Cores = Total Threads Procés
[µm]
Transistors
[milions]
Die size
[mm²]
Pins E/S Potència
[W]
Voltatge
[V]
L1 Dcache
[k]
L1 Icache
[k]
L2 Cache
[k]
L3 Cache
[k]
microSPARC I 40–50 V8 1992 1*1=1 0.8 0.8 225? 288 2.5 5 2 4 -- --
SuperSPARC I 33–60 V8 1992 1*1=1 0.8 3.1 -- 293 14.3 5 16 20 0-2048 --
HyperSPARC A 40–90 V8 1993 1*1=1 0.5 1.5 -- -- -- 5? 0 8 128-256 --
microSPARC II 60–125 V8 1994 1*1=1 0.5 2.3 233 321 5 3.3 8 16 -- --
HyperSPARC B 90–125 V8 1994 1*1=1 0.4 1.5 -- -- -- 3.3 0 8 128-256 --
SuperSPARC II 75–90 V8 1994 1*1=1 0.8 3.1 299 -- 16 -- 16 20 1024-2048 --
HyperSPARC C 125–166 V8 1995 1*1=1 0.35 1.5 -- -- -- 3.3 0 8 512-1024 --
TurboSPARC 160–180 V8 1995 1*1=1 0.35 3.0 132 416 7 3.5 16 16 512 --
UltraSPARC I (Spitfire) 143–167 V9 1995 1*1=1 0.47 5.2 315 521 30 @167 MHz 3.3 16 16 512-1024 --
UltraSPARC I (Hornet) 200 V9 1998 1*1=1 0.42 5.2 265 521 -- 3.3 16 16 512-1024 --
HyperSPARC D 180–200 V8 1996 1*1=1 0.35 1.7 -- -- -- 3.3 16 16 512 --
UltraSPARC IIs (Blackbird) 250–400 V9 1997 1*1=1 0.35 5.4 149 521 25 @250 MHz 2.5 16 16 1024 or 4096 --
UltraSPARC IIs (Sapphire-Black) 360–480 V9 1999 1*1=1 0.25 5.4 126 521 21 @400 MHz 1.9 16 16 1024–8192 --
UltraSPARC IIi (Sabre) 270–360 V9 1997 1*1=1 0.35 5.4 156 587 21 1.9 16 16 256–2048 --
UltraSPARC IIi (Sapphire-Red) 333–480 V9 1998 1*1=1 0.25 5.4 -- 587 21 @440 MHz 1.9 16 16 2048 --
UltraSPARC IIe (Hummingbird) 400–600 V9 2000 1*1=1 0.18 Al -- -- 370 13 max @500 MHz 1.5-1.7 16 16 256 --
UltraSPARC III 600 V9 2001 1*1=1 0.18 Al 29 330 1368 53 1.6 64 32 8192 --
UltraSPARC III 750–900 V9 2001 1*1=1 0.13 Al 29 -- 1368 -- 1.6 64 32 8192 --
UltraSPARC IIIcu 1002–1200 V9 2001 1*1=1 0.13 Cu 29 -- 1368 -- 1.6 64 32 8192 --
UltraSPARC IIi (IIe+) 550–650 V9 2002 1*1=1 0.18 Cu -- -- 370 17.6 1.7 16 16 512 --
UltraSPARC IIIi 1064–1593 V9 2003 1*1=1 0.13 87.5 206 959 52 1.3 64 32 1024 --
SPARC64 V (Zeus) 1100-1350 V9/JPS1 2003 1*1=1 0.13 190 289 269 40 1.2 128 128 2048 --
SPARC64 V+ (Olympus-B) 1650–2160 V9/JPS1 2004 1*1=1 0.09 400 297 279 65 1 128 128 4096 --
UltraSPARC IV (Jaguar) 1050–1350 V9 2004 1*2=2 0.13 66 356 1368 108 1.35 64 32 16384 --
UltraSPARC IV+ (Panther) 1500 V9 2005 1*2=2 0.09 295 336 1368 90 1.1 64 64 2048 32768
UltraSPARC T1 (Niagara) 1000–1400 V9 / UA 2005 2005 4*8=32 0.09 300 340 1933 72 1.3 8 16 3072 --
SPARC64 VI (Olympus-C) 2150-2400 V9 2007 2*2=4 0,09 540 422 -- 120 -- 128 128 6144 --
UltraSPARC T2 (Niagara) 1000–1400 V9 / UA 2007 2007 8*8=64 0.065 503 342 1831 95 1.1 8 16 4096 --
UltraSPARC T2+ (Victoria Falls) 1000–1400 V9 / UA 2007 2008 8*8=64 0.065 503 342 1831 -- -- 8 16 4096 --
SPARC64 VII (Jupiter) 2400–2520 V9 2008 2*16=32 0.065 600 445 -- 135 -- 64 64 6144 --
UltraSPARC RK (Rock) 2300 V9 2009 2*16=32 0.065 -- 396 2326 -- -- 32 32 2048 --
Model Freqüència
[MHz]
Versió de
l'Arquitectura
Any Threads Per Core * Cores = Total Threads Procés
[µm]
Transistors
[milions]
Die size
[mm²]
Pins E/S Potència
[W]
Voltatge
[V]
L1 Dcache
[k]
L1 Icache
[k]
L2 Cache
[k]
L3 Cache
[k]

Enllaços externs[modifica | modifica el codi]