Suoritinarkkitehtuureista¶
Osaamistavoitteet: RISC- ja CISC-suoritintoteutusten erityispiirteet ja niiden vertailu.
Perustuen aiemmin esitettyyn suorittimen liukuhihnatoteutukseen, suoritinarkkitehtuureissa on ollut vallalla 1980-luvulta asti kaksi erilaista suuntausta, jotka käsittelemme pääpiirteissään seuraavassa.
CISC¶
CISC (engl. Complex Instruction Set Computer) suoritinarkkitehtuureissa ajatuksena on laaja konekielen käskykanta ja käskyt itsestään mahdollisimman monipuolisia, jotta ne olisivat tehokkaita käskyjä. Historiallisesti ajatuksena oli, että konekielen käskyt lähestyisivät korkean tason ohjelmointikielen käskyjä, tarjoten niille suoran hardistuen.
CISC:n etuna on, että ohjelman toteuttamiseen tarvitaan vähemmän konekielen käskyjä, jota kautta saataisiin pienennettyä ohjelmien kokoa ja lisää tehoa niiden suoritukseen. Esimerkiksi, CISC-käskyt voivat operoida suoraan muistin kanssa, ilman että data ensin haetaan rekistereihin. Tai käsky voivat suorittaa laskentaa vaativan kryptografisen operaation suorittimen oheispiirissä.
Tämä tietysti monimutkaistaa mikroarkkitehtuuria ja monet CISC-käskyt onkin toteutettu mikro-ohjelmina liukuhihnan sisäisesti (engl. multiple cycle / pass computer). Kuvassa alla esimerkki, jossa liukuhihnan Decode-vaiheesta suoritetaankin käskyä vastaava mikro-ohjelma käsky kerrallaan. Nyt, mikro-ohjelma saattaa vaatia, että liukuhihnan vaiheet suorittaa useaan kertaan silmukassa. Kaikki tämä yhden konekielen käskyn sisäisesti.
Ongelmana CISC-arkkitehtuureissa on ollut, etteivät korkean tason kielten kääntäjät osanneet/osaa hyödyntää täysipainoisesti monimutkaisempia konekielen käskyjä..
CISC-arkkitehtuurin kantavia ajatuksia:
- Käskyjä sekä yksinkertaisten että kompleksisten operaatioiden suorittamiseen
- Kompleksinen käsky on tehokas, koska se vaatii vähemmän muistiosoituksia käskyjen hakemiseen muistista verrattuna yksinkertaisilla käskyillä toteutettuun ohjelmaan
- Käskyn operaatiokoodi kertoo, onko käsky mikro-ohjelma
- Käskyt voivat tehdä suoraan muistiosoituksia operandiensa mukaan
- Paljon erilaisia osoitusmuotoja
- Konekielen käskyjen pituus vaihtelee, joka heijastuu käskykohtaiseen mikroarkkitehtuurin toteutukseen
RISC¶
RISC (engl. Reduced Instruction Set Computer) perustuu ajatukseen, että suorittimen tehokkuus haetaan yksinkertaisilla ja siten nopeilla konekielen käskyillä, joka johtaa suorittimessa yksinkertaisempaan kontrollilogiikkaan ja mikroarkkitehtuuriin. RISC-arkkitehtuurissa käsky suoritetaan yhdellä liukuhihnan läpäisyllä (engl. single cycle / pass computer).
RISC:n syntyyn johti huomio, että CISC-käskyt eivät aina tuottaneet nopeinta tulosta, vaan käskyn jakaminen pienempiin osiin nopeuttaisi sen suoritusta tai parantaisi suoritustehoa.
RISC-arkkitehtuurin kantavia ajatuksia:
- Käskykanta koostuu yksinkertaisista käskyistä, jotka tekevät pienen operaation kerrallaan
- Joustava konekielisen ohjelman toteutus, kun toiminnallisuudet voidaan toteuttaa eri tavoilla
- Liukuhihnatoteuksella hyvä suoritusteho (engl. throughput)
- Mutta, ohjelmakoodin optimointi on haastavampaa ja jää kääntäjän vastuulle
- Käskyjen pituus sama kaikissa käskyissä
- Pitempi kuin CISC-käskyissä
- Sisältää suoria muistiosoitteita (kts. alla)
- Käskyjen operandeina käytetään pääosin rekistereitä
- Nopea suoritus, kun operoidaan vain rekistereissä olevan datan kanssa
- Käskykannassa muistiosoitukset rajoitettu vain erillisille load / store-käskyille
- Pyritään vakioituun suoritusaikaan
- Minimoidaan (hitaat, > 1 kellojakson) muistiosoitukset
- RISC-prosessoreissa paljon rekistereitä, joihin saadaan etukäteen ladattua enemmän tietoa
- Muistiosoituksissa data-hasardit kalliita!
- Osoitusmuotoja rajoitetusti
- Suoraa (immediate) osoitusta suositaan, jolloin minimoidaan osoitteen tulkintalogiikka
Nykyään tosin jo RISC-arkkitehtuureissakin on jo satoja konekielen käskyjä. Sulautetuissa järjestelmissä ja signaalinkäsittely-prosessoreissa suositaan RISC-arkkitehtuuria.
CISC vs RISC¶
Allaolevassa taulukossa kootusti CISC- ja RISC-arkkitehtuurien eroja.
CISC | RISC |
Paljon monimutkaisia käskyjä | Vähän yksinkertaisia käskyjä (tyypillisesti alle 100) |
Käskyissä pitkä suoritusaika, esim. useita rekistereitä kopioidaan yhdellä käskyllä | Käskyillä hyvin lyhyt vakioitu suoritusaika |
Konekielen käskyn pituus 1-15 tavua (x86) | Konekielen käskyn pituus sama kaikissa käskyissä (tyypillisesti 4 tavua) |
Muistiosoituksille ja operandien esitykselle useita muotoja (siirtymiä yms) | Yksinkertaiset suorat osoitusmuodot |
ALUn operaatiot voidaan tehdä suoraan sekä rekistereille että muistille | ALUn operaatiot vain rekistereille. Erilliset käskyt datan lukemiseksi ja kirjoittamiseksi muistista |
Käskyt asettavat automaattisesti prosessorin tilabitit | Ei tilabittejä, käskyn suorituksen tulos näkyvissä yleisissä rekistereissä, joita käskyt käyttävät |
Pinoa käytetään paljon argumenttien ja muistiosoitteiden tallennukseen | Argumentit ja muistiosoitteet rekistereissä, halutaan välttää muistiosoituksia. Prosessoreissa paljon rekistereitä |
Toteutuksen (hardis) yksityiskohdat piilossa ohjelmoijalta | Toteutuksen yksityiskohdat näkyy konekielisessä ohjelmassa. Voi olla rajoituksia mitä ja miten voi toteuttaa |
Lopuksi¶
Nykyään suoritinarkkitehtuureissa on toteutettu parhaat puolet molemmista arkkitehtuurimalleista. Esimerkiksi y86-arkkitehtuurin perustana on CISC, mutta joitain RISC-periaatteita on myös hyödynnetty.
Mm. x86-perhe (x86, IA32 ja x86-64) on CISC-pohjainen, missä käskykantaan on uuden prosessorisukupolven myötä lisätty uusia käskyjä. Nykyään koko Intelin käskykannan selittävä dokumentaatio koostuu kolmesta osasta ja on tuhansia sivuja pitkä..
Kurssimme toisen oppikirjan kirjoittajat David Patterson ja John Hennessy ovat itseasiassa ensimmäisinä esittäneet ja kehittäneet RISC-arkkitehtuurimallia 1970-80 -luvuilla.
Anna palautetta
Kommentteja materiaalista?