SPARC

SPARC (inglise keeles "Scalable Processor Architecture") on kärbitud käsustikul ("Reduced instruction set") RISC põhinev protsessoriarhitektuur, mida arendab Sun Microsystems ja mis toodi välja 1987. aasta keskpaigas. SPARC leiutati seoses Californias asuva Berkeley ülikooli uuringuga kärbitud käsustikuga arvutite (Reduced Instruction Set Computing) RISC kohta. Esimese SPARC-arhitektuuril põhineva protsessori tootsid Sun ja Fujitsu 1986. aastal. Aasta hiljem tuli Sun välja esimese SPARC-protsessorit kasutava arvutiga. 1989. aastal asutas Sun Microsystems mittetulundusühingu SPARC International, millele firma loovutas SPARC-arhitektuuri omandiõigused. SPARC International tegeleb SPARC-tehnoloogia haldamise ja litsentsimisega. SPARC on avatud arhitektuur, mis tähendab seda, et selle tehnoloogia on avalik ja seda tüüpi protsessoreid tohivad toota kõik firmad, kes omavad SPARCi litsentsi. SPARC-protsessoreid kasutatakse põhiliselt Unixi-põhiseid operatsioonisüsteeme kasutavates arvutites ja SPARC on alati olnud eriti tihedalt seotud Suni operatsioonisüsteemiga Solaris.
Tehnilised näitajad.
SPARC-protsessorite väljatöötamisel on põhiliselt keskendutud kiiruse saavutamisele kasutades protsessorites mitut tuuma ja nendes omakorda mitut eraldi lõime ("thread"). SPARC kasutab kärbitud käsustikku (RISC). SPARC-protsessorid on enamasti väga hästi skaleeritavad ehk neid on suhteliselt lihtne rakendada nii lauaarvutites kui ka suurtes superarvutites.
SPARC V9, mis on praegu kõige uuem SPARCi versioon, kasutab lineaarset aadressiruumi ja 64-bitist adresseerimist. Protsessori põhilised andmetüübid on 32- ja 64-bitised täisarvud ning 32-, 64- ja 128-bitised ujukomaarvud. Protsessori instruktsioonid on kõik täpselt 32 biti suurused. SPARC-protsessoril on kaks töörežiimi: privilegeeritud ja mitteprivilegeeritud. Privilegeeritud režiimis saab protsessor käivitada kõiki olemasolevaid instruktsioone, mitteprivilegeeritud režiimis aga mitte. SPARC V8 kasutas ainult "big-endian" süsteemi. SPARC V9 kasutab samuti instruktsioonides "big-endian" süsteemi, kuid saab andmete puhul hakkama nii "big-endian" kui "little-endian" süsteemides.
Üksused.
SPARC-protsessoris on kaks põhilist üksust: täisarvuplokk ("integer unit") ja ujukomaplokk ("floating-point unit"). Täisarvuploki juurde kuuluvad üldotstarbelised registrid ja see tegeleb lisaks täisarvude arvutamisele ka protsessori üldise juhtimisega. See arvutab ka mäluaadresse ja kontrollib ujukomaploki instruktsioonide käivitamist. Ujukomaplokk tegeleb ujukomaarvutustega. Selle juurde kuulub 32 32-bitist, 32 64-bitist ning 16 128-bitist registrit.
Registrid.
SPARC-protsessoril on kahte tüüpi registreid: üldotstarbelised ("general-purpose") ja kontroll/staatus registrid. Üldotstarbelised registrid on täisarvude tööregistrid ("integer working registers") ja ujukomaarvude tööregistrid ("floating-point working registers"). Kontroll/staatus registreid on palju ja igaüks neist täidab üsnagi spetsiifilist alaülesannet. Nende üldine eesmärk on aga kontrollida protsessori üldist toimimist erinevate seisundite ja loendurite ("counter") kaudu. Kontroll/staatus registrite alla kuuluvad näiteks Program Counter register, Processor State register ja Floating-Point State Register. Osa registreid on võimalik kasutada ainult privilegeeritud töörežiimis, kuid enamikule neist on olemas juurdepääs ka mitteprivilegeeritud režiimis.
Instruktsioonid.
SPARC-i instruktsioonid on kodeeritud neljas variandis ja on jaotatud 11 kategooriasse. Kui protsessor loeb mälust instruktsiooni, siis on kolm võimalust: instruktsioon käivitatakse, nullitakse või tõkestatakse ("trap"). Protsessor valib järgmise käsu, mida käivitatakse, kasutades mälu aadressi, mis on kirjas programmi lugejas ("program counter"). Pärast instruktsiooni täitmist suurendatakse automaatselt programmi loendurit, mille tulemusel käivitatakse juba järgmine instruktsioon. SPARC V9 instruktsioonid grupeeritakse järgnevalt: Memory access, Memory synchronization, Integer arithmetic, Control transfer, Conditional moves, Register window management, State register access, Privileged register access, Floating-point operate, Implementation-dependent ja Reserved instruktsioonid.
Mälumudelid.
SPARC kasutab mälumudeleid, mis määravad ära, kuidas toimuvad erinevad mäluoperatsioonid. Mälumudelid on vajalikud sel põhjusel, et kuigi protsessori instruktsioonid määravad mäluoperatsioonide järjekorra üheselt, siis võib nende tegelik täitmisjärjekord siiski tegelikkuses olla erinev. Mälumudelid määravad, millised kitsendused seatakse mäluoperatsioonide täitmise järjekorrale. Erinevaid mälumudeleid kasutades on programmeerijatel võimalik rakendusi optimeerida või paremini sünkroonida. SPARC-protsessorid toetavad kolme mälumudelit: Total Store Order (TSO), Partial Store Order (PSO) ja Relaxed Memory Order (RMO). Relaxed Memory Order on neist kõige vähem range instruktsioonide täitmise järjekorraga, kõik sellele mudelile mõeldud rakendused ka teiste mudelite korral.
Allüksused.
SPARC V9 kasutab käskude täitmiseks kolme allüksust: käsulugemisüksus ("issue unit"), järjestamisüksus ("reorder unit"), ja käsutäitmisüksus ("execute unit"). Käsulugemisüksus loeb mälust instruktsiooni, mida on vaja järgmisena täita, ning edastab selle järjestamisüksusele. See üksus muudab instruktsioonide järjekorda võimalikult optimaalseks arvestades mälumudeli poolt seatud kitsendusi. Järjekorda muudetakse, kuna tihti on võimalik mitut instruktsiooni paralleelselt täita ja nii aega kokku hoida. Järjestatud instruktsioonid edastatakse käsutäitmisüksusele, mis instruktsioonid reaalselt käivitab.
Ajalugu.
1986. aasta paiku tekkis paljudel arvuti originaalseadmete tootjatel (OEM) huvi arendada oma vahenditega protsessoreid. Põhjuseks oli suur sõltuvus Inteli ja Motorola protsessoritest. Teine oluline põhjus oli elektroonikakiipide tootmise märgatav odavnemine seoses sellega, et elektroonikatootjad vajasid oma investeeringute tagasiteenimiseks suuri tootmiskoguseid ning olid seetõttu välja mõelnud viisi, kuidas toota elektroonikakiipe, mis oleksid tootmise algfaasis standardsed ning erinevused tekiksid vaid viimastes tootmisetappides. See võimaldas arvutitootjatel osta odavalt kõrgtasemel elektroonikakiipe. Kolmas oluline põhjus, mis muutis protsessorite tootmise varasemast lihtsamaks, oli uuendusliku tarkvara kasutuselevõtt. Seoses CAD-tarkvara kasutuselevõtuga tekkis võimalus digitaalloogikat disainida, simuleerida ja testida ilma seda reaalselt valmis ehitamata. See võimaldas keskenduda rohkem disainimisprotsessile ja põhjalikud teadmised tootmisprotsessist ei olnud enam nii olulised kui varem.
1986. aastal avaldatud Berkeley ülikooli kärbitud käsustikuga arvutite (Reduced Instruction Set Computing) (RISC) uuringu käigus leiutati SPARC-protsessor. Juba 1987. aastal tuli Sun välja esimese SPARC-protsessoril põhineva arvutiga nimega Sun-4. Järgnevatel aastatel kogus SPARC kiiresti populaarsust, eriti aga just arvutitel, mis kasutavad UNIX-põhist operatsioonisüsteemi nagu Solaris, Linux või BSD. SPARC-protsessoreid võeti laialdaselt kasutusele ka Suni, Solbourne'i ja Fujitsu SMP serverites.
1989. aastal asutati SPARC International, mille eesmärgiks sai SPARC-arhitektuuri haldamine ja litsentsimine ning tehnoloogia levitamine.
1993. aastal valmis SPARC-i versioon 9, mida tuntakse ka kui SPARC64 ning mis kasutas 64-bitist adresseerimist. Toimunud on küll edasiarendusi, kuid sisuliselt on SPARC V9 kasutusel tänini.
2005. aastal otsustas Sun avalikustada UltraSPARC T1 lähtekoodi avatud lähtekoodi kasutavale projektile OpenSPARC. Praeguseks on olemas kolm täielikult avatud koodiga SPARC-i versiooni: LEON, 32-bitine ja ühelõimeline SPARC V8, OPENSPARC T1, 64-bitine ja 32-lõimeline SPARC V9 ning OpenSPARC T2, 64-bitine ja 64-lõimeline SPARC V9.
Tänapäeva SPARC-protsessorid.
Oracle tuli 2011. aasta septembri lõpus välja protsessoriga SPARC T4. T4 koosneb kuni 8 tuumast ning iga tuum võib olla maksimaalselt 8-lõimeline. T4 kompenseerib maksimaalse läbilaskevõime vähenemise kiiruse kasvuga: hinnatakse, et protsessori maksimaalne kiirus on vähemalt 3 GHz, mis on kaks korda suurem kui protsessoril T3. SPARC T4 arendamisel on Sun põhjalikult suunda muutnud. Varasemates mudelites keskenduti suures osas just mitmelõimelisuse arendamisele, kuid kiirus ühe lõime korral jäi enamasti konkurentidele alla. Varem oli mitmetuumalisus ja mitmelõimelisus SPARC-i eelis x86-protsessorite ees, kuid tänapäeval on tase ühtlustunud. Seega on Sun otsustanud varasemast rohkem arvesse võtta ka protsessori jõudlust ainult ühe lõime korral.
Kriitikute sõnul ei ole SPARC T4 tegelikkuses konkurentsivõimeline uuemate x86 protsessoritega. Tehtud on küll olulisi uuendusi, kuid need on kriitikute hinnangul hilinenud ning konkurendid kasutasid neid tehnoloogiaid juba varem. Samas on SPARC T4 siiski nimetatud oluliseks vaheastmeks, mis võimaldab SPARCi kasutajatele ajutise lahenduse enne järgmise protsessori valmimist ning väldib SPARC-i kasutajate üleminekut x86-le.
Fujitsu ja LSI teatasid 2011. novembri keskpaigas, et nad on alustanud koostööd protsessori SPARC64 IXfx arendamisel. Uus protsessor koosneb plaanide kohaselt 16 tuumast ning sisaldab 64 KB I/D vahemälu ning 12 MB jagatud L2-vahemälu. Protsessori plaanitav sagedus on 1,848 GHz ja hinnatakse, et selle kiirus on umbes 236,5 gigaflopsi võimsusel kõigest 110 W. SPARC IXfx protsessor on mõeldud eelkõige väga suurt arvutusvõimsust vajavate arvutite komponendina. Fujitsu kavatseb neid protsessoreid kasutada oma kõige uuemas superarvutis PRIMEHPC FX10. Ei ole veel täpselt teada, mis ajaks protsessor valmib.
&lt;ref name="http://news.softpedia"&gt;&lt;/ref&gt;
SPARC Assembler.
SPARC-protsessoritele mõeldud programmid kompileeritakse SPARC Assembleri abil. SPARC-i ja x86 assemblerkeeled on aga piisavalt sarnased, et on enamasti võimalik teisendada ühest keelest teise.
Alljärgnev näide on Solarise operatsioonisüsteemile kirjutatud SPARC Assembleri programmist, mis prindib välja fraasi "Hello world!".
.section ".text"
.global _start
_start:
 mov 4,%g1 ! 4 is SYS_write
 mov 1,%o0 ! 1 is stdout
 set .msg,%o1 ! pointer to buffer
 mov (.msgend-.msg),%o2
 ta 8
 mov 1,%g1 ! 1 is SYS_exit
 clr %o0 ! return status is 0
 ta 8
.msg:
 .ascii "Hello world!\n"
.msgend:
Käsku "mov" kasutatakse selleks, et tõsta midagi protsessori registrisse. Näiteks "mov 4,%g1" kirjutab registrisse g1 väärtuse 4. See tähistab süsteemi käsku "SYS_write". Seejärel kirjutatakse registrisse "output" väärtus 1, mis tähistab väljundit. Pärast seda kirjutatakse sõne "Hello world!" "pointer output" registrisse. Lisaks kirjutatakse sinna ka sõne pikkus ning seejärel käivitub süsteemikäsk write(). Pärast seda lõpetatakse programmi tegevus sellega, et käivitatakse käsk exit().
Superarvutid.
SPARC-protsessoreid on tihti kasutatud superarvutites. See tuleneb sellest, et SPARC on väga hästi skaleeruva arhitektuur, mis võimaldab mitmeid protsessoreid efektiivselt ühes masinas koos tööle panna.
Protsessorit SPARC64 VIIfx kasutatakse Fujitsu toodetud superarvutis nimega K computer, mida peetakse 2011. aasta novembri seisuga maailma kiireimaks arvutiks. K computer valmis 2011. aastal Fujitsu ja Rikeni teadlaste koostöös ning asub Jaapanis Rikeni instituudis. Arvuti kasutab 88 128 8-tuumalist 2,0 GHz SPARC64 VIIfx protsessorit ehk kokku kasutab arvuti 705 024 tuuma.
K computer on saavutanud maksimaalseks kiiruseks 10,51 petaflopsi, mis on üle nelja korra kiirem kui eelmine rekordiomanik Hiina Tianhe-1A. Samas ei ole K computer veel täielikult valmis. Arvatakse, et see saadakse täielikult töökorda 2012. aasta novembriks.
Fujitsu teatas 7. novembril Tokyos, et nad hakkavad turustama uut superarvutit PRIMEHPC FX10. See kasutab hiljuti arendatud SPARC64 IXfx protsessoreid ja hinnatakse, et sellega on võimalik saavutada maksimaalne kiirus umbkaudu 23,2 petaflopsi, mis teeks sellest maailma kiireima arvuti. Fujitsu kasutab superarvuti arendamisel suures osas edasiarendusi K Computeri tehnoloogiast. Arvuti suure skaleeritavuse tõttu kavatseb Fujitsu arvutit müüa eri variantides, mis koosnevad minimaalselt 4 ja maksimaalselt 1024 moodulist ("rack"). Fujitsu sõnul on superarvuti turustamise sihtrühmaks akadeemilised uurimisrühmad ja erafirmad, mis vajavad eriti suurt arvutusvõimsust.