**SPARC** (*Scalable Processor ARChitecture*) on RISC-suoritinarkkitehtuuri, jonka kehitti alun perin 1985 Sun Microsystems. SPARCin oikeudet on siirretty 1989 perustetulle *SPARC International, Inc.* -yhtiölle, joka markkinoi SPARCia ja suorittaa hyväksymistestauksia. SPARC on täysin avoin: useat valmistajat ovat lisensoineet sen ja valmistavat SPARC-yhteensopivia suorittimia. Näihin valmistajiin kuuluvat Sun Microsystemsin lisäksi Texas Instruments, Cypress Semiconductor ja Fujitsu. 

Ultra SPARC II -suoritin.
SPARC-suorittimia käytettiin aluksi työasemissa, mutta nykyään niitä käytetään myös suurissa moniprosessorikoneissa, joita Sun ja Fujitsu ovat suunnitelleet, sekä supertietokoneissa kuten K computer.

SPARC-käskykannasta on useita versioita. Ensimmäiset suorittimet perustuivat version 7 määrittelyyn, myöhemmät versioon SPARCv8 ja 64-bittiseen versioon SPARCv9. Aikaisempia 32-bittisiä SPARC-suorittimia olivat Sunin microSPARC ja SuperSPARC, Fujitsu Microelectronicsin TurboSPARC ja Ross Technologyn HyperSPARC. 64-bittisiä suorittimia ovat Sunin UltraSPARC ja Fujitsun SPARC64.

SPARC-suorittimesta on olemassa vapaa toteutus LEON2, jonka VHDL-lähdekoodi on lisensoitu LGPL-lisenssillä. LEON2:n vikasietoisuusmalliin perustuu myös Atmelin säteilysuojattu AT697F.
Lisäksi SPARC-suorittimia on kehittänyt venäläinen MTšST.
Myös Kiinan kansanarmeijan teknologiayliopisto on kehittänyt oman FeiTeng-1000-suorittimensa OpenSPARCin pohjalta.

Sunin UltraSPARC-suorittimet ja Fujitsun SPARC64 V ja uudemmat toteuttavat lisäksi SIMD-laajennukset, jotka tunnetaan nimellä VIS (Visual Instruction Set).

Historia
--------

1970- ja 1980-luvun vaihteessa oli käynnissä kolme projektia pienennetyn käskykannan suorittimen kehittämiseksi: IBM 801, Berkeley RISC ja Stanford MIPS. Berkeleyn projektia johtivat David Patterson ja Carlo H. Sequin, joista jälkimmäinen esitti termin "RISC".

Suorittimen kehitys alkoi vuonna 1984 Berkeleyn yliopiston esittämän RISC-käsitteen pohjalta. Berkeleyssä kehitettiin vuosien 1980 ja 1982 välisenä aikana RISC I ja RISC II -suunnitelmat, joiden pohjalta SPARC kehitettiin Sun Microsystemsillä.
Vuonna 1986 julkaistiin SPARC V7 -käskykanta ja ensimmäinen arkkitehtuurin mukainen suoritin toteutetaan.

Ensimmäinen versio oli minimalistinen ilman kokonaislukujen kerto- ja jakolaskua, mutta 10 miljoonan käskyn nopeudella se oli noin kolme kertaa nopeampi kuin sen ajan CISC-suorittimet.

Vuonna 1989 SPARC International perustetaan ja SPARC-arkkitehtuurista tulee avoin standardi. Vuonna 1990 julkaistaan SPARC V8 -määrittely ja vuonna 1993 julkaistaan SPARC V9 -määrittely. SPARC V8 on 32-bittinen lineaarisella muistiavaruudella. SPARC V9 on 64-bittinen.

Alkuperäinen määrittely oli 32-bittiselle suorittimelle, mutta 64-bittisiä superskaalarisia versioita suunniteltiin ja toteutettiin kuten Texas Instrumentsin SuperSparc (1992). Sunin ja Texas Instrumentsin UltraSPARC (1995) sekä Fujitsun SPARC64 paransivat suorituskykyä merkittävästi.

Sunilla oli aluksi käytössä sekä Motorola 68000 -sarjaan ja Intel 80386 -suorittimeen perustuvia tietokoneita. Nämä korvaamaan Sun kehitti SPARC-suorittimen, joka oli ensiksi käytössä vuonna 1987 julkaistussa VME-väyläisessä Sun-4 -tietokoneessa. Vuonna 1989 Sun julkaisi SBus-väylää käyttävän SPARCstation 1 -työaseman, joka oli kolme kertaa nopeampi kuin Sun-3 jonka se korvasi.

Vuonna 1995 julkaistu Sun Ultra 1 oli ensimmäinen 64-bittistä UltraSPARC-suoritinta käyttävä tietokone.

Vuonna 2002 julkaistu *SPARC Joint Programming Specification* (SPARC JPS1) sisältää yhteisiä määrittelyitä SPARC V9 toteutuksille, joita ovat Fujitsun SPARC64 V ja Sunin UltraSPARC III. Seuraavana vuonna julkaistu SPARC JPS2 sisältää SPARC64 VI ja UltraSPARC IV yhteiset määrittelyt.

Vuonna 2006 Sun ilmoitti UltraSPARC T1 ja T2 -mallien lähdekoodin julkaisemisesta, joka on julkaistu GPLv2-lisenssillä nimellä OpenSPARC.

Epäjärjestyksessä suorittaminen (engl. *out-of-order execution*) tuli mukaan Oraclen julkaisemaan SPARC S3 -ytimeen perustuvaan vuoden 2011 SPARC T4 -malliin. SPARC T4, T5 ja M5 malleissa oli superskalaarinen suoritus, kahdeksan säiettä suoritinydintä kohden sekä useita ytimiä prosessoria kohden.

Vuonna 2017 Oracle julkaisi SPARC M8 -mallin seuraajana SPARC M7 -mallille. Samana vuonna Oracle irtisanoi satoja SPARC-suorittimien suunnittelusta vastanneita henkilöitä käytännössä lopettaen jatkokehityksen.

Ominaisuudet
------------

SPARC on *load-store*-arkkitehtuuri, jossa ei ole suoraan muistiviittauksia. *Load-store* käskykanta käyttää erillisiä käskyjä muistin käsittelyyn kun taas *register-memory* -arkkitehtuurissa se voi olla osana muuta käskyä.

Käskykannassa on ikkunoidut rekisterit, joka tarjoaa suuren määrän rekistereitä. Suorittimessa voi olla 52:sta 524:ään yleiskäyttöistä rekisteriä, joista ohjelmoijalla on 32 käytettävissä. Ikkunoinnilla rekistereissä on kolmea tyyppiä: syöterekisterit, joissa ovat argumentit; paikalliset rekisterit, joissa ohjelmoija voi säilöä haluamaansa tietoa; tulosterekisterit.
SPARC-suorittimessa on tyypillisesti 128 tai 144 kokonaislukurekisteriä, joista kerralla on 32 saatavilla: 8 rekisteriä on "globaalia" kun taas loput käytetään 16 rekisterin liukuvan ikkunan mukaan funktiokutsujen yhteydessä. Ylimmät ja alimmat 8 rekisteriä jaetaan parametrien välittämiseen ja palauttamiseen ja kutsujen jälkeen ikkuna liikkuu takaisin ylös. Tämä mahdollistaa funktiokutsujen tekemisen yhdessä kellojaksossa.
SPARC on määrittely, josta on erilaisia toteutuksia, joissa rekisteripino voi olla suurempi tai pienempi tarpeen mukaan.

Käskykannassa on vain 72 peruskäskyä. Arkkitehtuuri optimoi haarautumisen käyttämällä viivästymistä. 
Haaratumiskäskyjä varten on viivepaikka: käsky, joka asetetaan haarautumisen jälkeen suoritetaan ennen haarautumista. 
SPARC V8 oli 32-bittinen ja SPARC V9 on 64-bittinen, jossa on myös lisää rekistereitä ja lisää rinnakkaisuutta sekä uusia käskyjä.

Vuonna 2005 julkaistu Sunin UltraSPARC T1 -suoritin (koodinimeltään *Niagara*) pystyi monisäikeistykseen (Simultaneous multithreading; SMT) ja ajamaan neljää säiettä yhtäaikaisesti per ydin. Lisäksi yhteen suorittimeen sai 4, 6 tai 8 suoritinydintä, jolloin yksi suoritin pystyi ajamaan 32 säiettä yhtäaikaisesti 8 ytimen mallilla.

Jokainen ydin on toteutukseltaan ns. barrel-suoritin (barrel processor) ja vaihtaa ajattavaa säiettä joka kellojaksolla. Tämä eroaa normaalista keskeyttävästä ohjelmistopohjaisesta moniajosta, jossa säiettä ajetaan satoja kellojaksoja, ennen kuin suoritin vaihtaa ajettavaa ohjelmaa. Tavoitteena on että suoritin pystyi suorittamaan muita säikeitä sillä aikaa kun se odottaa datan hakua muistista jos sitä ei löytynyt välimuistista (engl. *cache miss*). Lisäksi suoritin on myös superskalaarinen (2-way superscalar) eli se pystyy ajamaan yhdessä ohjelmasäikeessä kahta konekielistä käskyä rinnakkain.
Tekniikan kehitti Afara Websystems, jonka Sun osti 2002. Sen markkinointinimenä on *CoolThreads*, joka viittaa myös suorittimen sähkönkulutukseen. T1 oli suunnattu pelkästään palvelimiin ja siinä oli vain yksi matematiikkasuoritin, jonka vuoksi liukulukusuorituskyky oli erittäin huono.

Malleja
-------

SPARC käskykannasta on eri valmistajilla eri tuotenimiä joita ovat mm.:

* microSPARC, 32-bittinen, Sun Microsystems
* SuperSPARC, 32-bittinen, Sun Microsystems
* SPARClite, (MB8683x), 32-bittinen, Fujitsu
* TurboSPARC, 32-bittinen, Fujitsu
* HyperSPARC, 32-bittinen, Ross Technology
* UltraSPARC, 64-bittinen, Sun Microsystems
* SPARC64, 64-bittinen, Fujitsu

SPARC-käskykantaan perustuva LEON-sarja on Euroopassa suosittu avaruuskäyttöön soveltuva suoritin.

Käyttöjärjestelmätuki
---------------------

* SunOS
* Solaris
* OpenSolaris
* Linux
* NeXTSTEP
* FreeBSD
* OpenBSD
* NetBSD
* RTEMS

Lähteet
-------

1. ↑  SPARC Processor Issues *docs.oracle.com*. Viitattu 17.2.2021. (englanniksi)
2. ↑  Fujitsu TurboSparc Processor *cpushack.com*. Viitattu 1.3.2022. (englanniksi)
3. ↑  Rad-Hard 32 bit SPARC V8 Processor (PDF) *ww1.microchip.com*. Viitattu 6.3.2022. (englanniksi)
4. ↑
5. ↑  RISC Refined: Berkeley RISC, Stanford MIPS. . *cpushack.com*. Viitattu 18.7.2020. (englanniksi)
6. 1 2 3 4 5 6 7  Part II: SPARC, an extreme windowed RISC (1987). . *cpushack.com*. Viitattu 18.7.2020. (englanniksi)
7. ↑  RISC Architecture *ibm.com*. Viitattu 18.7.2020. (englanniksi)
8. 1 2  Chip Hall of Fame: Sun Microsystems SPARC Processor *spectrum.ieee.org*.  30.6.2017. Viitattu 21.10.2019. (englanniksi)
9. 1 2 3  SPARC Joint Programming Specification (PDF) *fujitsu.com*.  31.5.2002. Viitattu 1.3.2022. (englanniksi)
10. 1 2 3 4 5 6 7 8 9 10 11 12  Alexandre Denault: SPARC Architecture v8-v9 (PDF) *cs.mcgill.ca*. Viitattu 6.3.2022. (englanniksi)
11. ↑  The SPARC Architecture Manual (PDF) *gaisler.com*. Viitattu 6.3.2022. (englanniksi)
12. ↑  6.1 SPARC V9 ABI Features *docs.oracle.com*. Viitattu 6.3.2022. (englanniksi)
13. 1 2 3  History of SPARC systems 1987-2006 *softpanorama.org*. Viitattu 21.10.2019. (englanniksi)
14. ↑  Sun Ultra 1 *computinghistory.org.uk*. Viitattu 25.8.2021. (englanniksi)
15. ↑  SPARC JPS2: Common Specification (PDF) *oracle.com*.  18.9.2003. Viitattu 1.3.2022. (englanniksi)
16. ↑  Sun to release open-source Sparc designs *cnet.com*.  21.3.2006. Viitattu 21.10.2019. (englanniksi)
17. ↑  OpenSPARC Frequently Asked Questions *oracle.com*. Viitattu 21.10.2019. (englanniksi)
18. 1 2  READ\_ME\_FIRST: What Do I Do with All of Those SPARC Threads? (PDF) (sivu 9) *oracle.com*. Viitattu 6.3.2022. (englanniksi)
19. ↑  Larabel, Michael: SPARC M8 Processors Launched Phoronix. Viitattu 19.9.2017.
20. ↑  Dan Robinson: SPARC will fly: Your cheat sheet for cocktail banter at Oracle's upcoming shindig *theregister.com*.  27.9.2017. Viitattu 1.3.2022. (englanniksi)
21. ↑  Hennessy, John L. & Patterson, David A.: *Computer Architecture: A Quantitative Approach*, s. 11. Fifth Edition. Morgan Kaufmann, 2012. ISBN 978-0-12-383872-8.
22. ↑  Jacek Krywko: Space-grade CPUs: How do you send more computing power into space?  11.11.2019. Ars Technica. Viitattu 15.11.2019. (englanniksi)

Aiheesta muualla
----------------

CommonsCommons
Wikimedia Commonsissa on kuvia tai muita tiedostoja aiheesta **SPARC**.
* SPARC International, Inc.
* OpenSPARC T1 lähdekoodi ja dokumentaatiota