Lisätietoja HELSINGIN SANOMIEN
Tieto & kone -osaston artikkeliin
Transmetan salaisuus
Teemu Kerola ja Petri Kutvonen, 17.12.1999
Seuraavassa esitellään julkisiin patentteihin perustuen kuvaus siitä, minkälaisen saattaisi olla se suoritin, jonka Transmeta aikoo julkaista tammikuun 19. päivänä 2000. Kyseisen uuden suorittimen perusidea vaikuttaisi olevan olemassa olevien suorittimien toiminnan matkinnan eli emuloinnin tehokas toteutus laitteiston ja ohjelmiston saumattomalla yhteistyöllä. Tällainen suoritin voidaan toteuttaa tavallista pienemmällä mikropiirillä, jolloin siitä voidaan tehdä tavanomaista halvempi, nopeampi, vähemmän sähköä kuluttava tai kaikkea näitä.
Koska uuden suorittimen toimintaperiaate ei ole aivan yksinkertainen, tarkastellaan aluksi ennen uuteen suorittimeen syventymistä tavanomaisten suorittimien rakennetta ja emuloinnin yleisiä ongelmia.
Tietokoneohjelma muodostuu joukosta melko yksinkertaisia konekäskyjä, joita koneen suoritin ymmärtää. Nämä käskyt on etukäteen käännetty ohjelmoijan kirjoittamasta, esimerkiksi C-kielisestä ohjelmasta. Ohjelmaa suoritettaessa konekäskyt sijaitsevat tietokoneen keskusmuistissa, jossa myös kaikkien suorituksessa tarvittavien tietojen on oltava. Monet ohjelmat kuitenkin käyttävät niin suurta tiedon tai konekäskyjen määrää, että ne kaikki eivät mahdu muistiin kerralla. Usein ne käsittelevät myös muistin ulkopuolelle talletettuja tietoja. Jos muistin ulkopuoliseen tietoon viitataan, niin käyttöjärjestelmä puuttuu asiaan ja keskeyttää ohjelman suorituksen kunnes tarvittavat tiedot on saatu noudettua esimerkiksi levyltä muistiin tai siirrettyä muistista levylle. Tiedon hakemisen aikana suorittimella on aikaa toteuttaa miljoonia muita konekäskyjä ja yleensä odotuksen aikana suoritetaankin jotain muuta ohjelmaa tai käyttöjärjestelmän tehtäviä.
Myös muisti on suorittimen näkökulmasta aika hidas. Suoritin pitää itse välituloksiaan omissa rekistereissään, joiden käsittely on nopeaa. Tiedon haku muistista voi kestää esimerkiksi 10 kertaa niin kauan kuin rekisteristä. Toiminnan nopeuttamiseksi viimeksi käytetyistä muistialueista (sisälsivätpä ne sitten konekäskyjä tai tietoja) pidetään kopioita suorittimen osana tai sen välittömässä läheisyydessä olevassa välimuistissa. Välimuisti on selvästi nopeampi kuin keskusmuisti, mutta vähän hitaampi kuin rekisterit. Välimuisteja voi olla useita eri tasoisia ja ne voivat olla konekäskyille ja tiedoille joko yhteisiä tai erillisiä. Nopeuden kannalta on erittäin oleellista, että useimmiten sekä suoritettavien käskyjen että niiden käsittelemien tietoalueiden kopiot löytyvät välimuistista.
Konekäskyissä olevat muistiosoitteet eivät yleensä käy suoraan keskusmuistin osoitteiksi, vaan ne tulee muuttaa sopiviksi ennen kutakin viittausta muistiin. Tämä osoitteenmuunnos tapahtuu periaatteessa käyttäen keskusmuistiin talletettuja taulukoita, mutta käytännössä lähes aina suorittimessa olevalla osoitteenmuunnospuskurilla (TLB, translation lookaside buffer). TLB toimii aika lailla välimuistin tapaan ja useimmiten (esim 99.9% tapauksista) vältetään muunnostietojen haku muistista. Tämä on tärkeätä, koska jokaisessa konekäskyssä näitä osoitteenmuunnoksia tapahtuu ainakin yksi. Tätä osoitteenmuunnosta käytetään useissa suorittimissa myös muihin tehtäviin. Sen yhteyteen on suhteellisen helppo toteuttaa esimerkiksi muistialueiden suojaus.
Nykyaikaisissa suorittimissa toteutetaan useita konekäskyjä samanaikaisesti. Kunkin käskyn toteutus jaetaan erillisiin vaiheisiin. Suoritin itse kostuu useista yhden käskyvaiheen toteutukseen erikoistuneista osista. Tällaisia yhden vaiheen toteuttavia suorittimen osia voi olla useita. Suoritin voi näin toteuttaa samanaikaisesti vaikkapa 10 eri käskyn jotain vaihetta. Kustakin käskystä on kerrallaan tyypillisesti vain yksi vaihe käynnissä. Kokonaisten käskyjenkin järjestys voi muuttua. Käskyjonossa myöhempänä oleva käsky voidaan toteuttaa ennen sen edellä olevia käskyjä, jos nämä joutuvat odottamaan joidenkin muiden käskyjen valmistumista.
Aika ajoin ohjelman suoritus keskeytyy jonkin erikoistilanteen vuoksi. Tällainen tilanne voi olla esimerkiksi nollalla jaosta aiheutuva virhe, tiedonsiirtotarve tai jokin muu käyttöjärjestelmän asiaan puuttumista edellyttävä toiminto. Erikoistilanteessa ohjelman suorituksen on pysähdyttävä heti meneillään olevan konekäskyn päätyttyä, jolloin käyttöjärjestelmä voi käsitellä tilanteen. Tämän jälkeen ohjelman suoritus voi jatkua, ellei kyseessä ollut virhetilanne. Suorittimen pysäyttäminen erikoistilanteen vuoksi jonkin tietyn konekäskyn jälkeen ei ole aivan yksinkertaista, kun otetaan huomioon, että samaan aikaan toteutettavana eri vaiheissa voi olla useita käskyjä.
Suorittimen emulointi toisella suorittimella tarkoittaa sitä, että konekielinen ohjelma suoritetaan toisen tyyppisellä suorittimella ja se toimii silti aivan samoin tavoin kuin jos käytettäisiin alkuperäistä suoritinta. Tähän on kaksi eri tapaa: (1) ohjelma joko käännetään alkuperäisen suorittimen konekielestä etukäteen emuloivan suorittimen konekielelle ja suoritetaan tavallisen ohjelman tapaan tai (2) ohjelman alkuperäiselle suorittimelle sopivia konekäskyjä tulkitaan yksi kerrallaan toisessa laitteistossa olevalla emulointiohjelmalla. Molemmissa tavoissa on ongelmansa.
Kummassakin tavassa kaikki alkuperäisen suorittimen osat (esim. rekisterit) täytyy sijoittaa jonnekin emuloivassa suorittimessa. Jotakin voidaan säilyttää emuloivan suorittimen omissa rekistereissä, mutta useimmat osista pitää sijoittaa muistiin. Osaa muistista käytetään näin alkuperäisen laitteiston muistin emulointiin ja (toivon mukaan) osaa rekistereitä alkuperäisen laitteiston rekistereiden emulointiin. Mitä vähemmän muistiin viitataan, sitä nopeammin emulointi sujuu.
Emuloitavan laitteiston rekistereiden emulointi suoraan toisen koneen rekistereiden avulla on usein vaikeata, koska rekistereiden tyypit ja koot voivat olla aivan erilaisia. Lisäksi rekistereitä ei yleensä ole mitenkään liikaa ja ne kaikki tarvitaan jo normaaliin nopeaan suoritukseen. Tavoitteena emuloinnilla onkin usein vain se, että tietylle laitteistolle tehty ohjelma ylipäätänsä voidaan suorittaa toisella laitteistolla.
Tässä patentissa esitellyllä laitteistolla emuloinnin tavoite on paljon haastavampi: pystyä emuloinnilla nopeampaan suoritukseen kuin alkuperäisessä laitteistossa. Ongelman tekee todella haastavaksi se, että kilpailevan laitteiston ymmärretään olevan myös tämän hetken nopein Intelin x86-arkkitehtuurin suoritin, ja myös se, että emuloinnin halutaan toimivan nopeasti kaikilla x86-arkkitehtuurin sovelluksilla ja niiden tarvitsemilla käyttöjärjestelmillä.
Ensimmäisessä lähestymistavassa hyvä puoli on se, että kaikki on valmiiksi etukäteen käännetty konekielelle. Konekielinen ohjelma voi olla optimoitu nopeaa suoritusta varten ja suoritin voi vielä suoritusaikana optimoida käskyjen suoritusta aikaisemmin esitellyillä menetelmillä. Emuloitu suoritus voi sujua hyvinkin nopeasti. Konekielisen ohjelman kääntäminen toisen suorittimen konekielelle ei kuitenkaan ole lainkaan helppoa. Suorittimet ovat usein hyvnkin erilaisia ja todellisesta suorittimesta voi puuttua jokin keskeinen emuloitavan laitteiston osa. Tällainen voi olla vaikkapa muistinsuojauksen käyttämä rekisteri, jonka emulointi voi muodostua aikaavieväksi järjestelmässä, jossa muistinsuojaus on tehty jollain muulla menetelmällä.
Erityinen ongelma tässä lähestymistavassa on se, että itse asiassa aika usein ohjelman suorituksen (siis emuloinnin) aikana tapahtuu erikoistilanteita, jotka pitäisi käsitellä täsmälleen samalla tavalla kuin jos ne tapahtuisivat oikeassa laitteistossa. Tällainen erikoistilanne voi syntyä esimerkiksi käyttöjärjestelmäpalvelun kutsusta tai jonkin laitteen ohjauskomennosta. Konekäskyjen suoritusjärjestys voi kuitenkin nopeuden saavuttamiseksi olla vaihtunut tai jotkut konekäskyistä ovat voineet muuttaa muistin sisältöä liian aikaisin emuloinnin kannalta. Näiden erikoistilanteiden täsmällinen käsittely on ensimmäisen lähestymistavan tehokkaassa toteutuksessa mahdotonta.
Toisessa lähestymistavassa alkuperäistä laitteistoa emuloiva ohjelma (emulaattori) tulkitsee kunkin emuloitavan käskyn kerrallaan ja näin kaikki erikoistapaukset voidaan käsitellä hyvinkin täsmällisesti. Tässä lähestymistavassa on ongelmana hitaus, koska käskyt nimenomaan suoritetaan yksi kerrallaan. Tämä estää tehokkaan optimoinnin.
Patenttien mukaisessa arkkitehtuurissa emulointi tapahtuu yhdistelemällä edellä kuvattuja menetelmiä ja käyttäen hyväksi nimenomaan emulointia varten suunniteltua suoritinta (kuva 1). Alkuperäinen x86-ohjelma käännetään kyllä emuloivan koneen konekielelle, mutta sitä ei tehdä ennen emulointia omana vaiheenaan. Sen sijaan tämä käännös tehdään dynaamisesti aina tarvittaessa emuloinnin aikana. Aina kun emuloinnissa edetään vaiheeseen, jossa seuraavaksi emuloitavan olevaa x86-käskyä (tai niiden joukkoa) ei ole vielä käännetty, emulointi pysähtyy ja tarvittavat x86-käskyt käännetään konekielelle. Tässä yhteydessä on mahdollista tehdä huomattavakin määrä optimointia siten, että juuri tuotetut konekieliset käskyt voidaan suorittaa mahdollisimman nopeasti. Itse asiassa eräs patenttien perusideoista on se, että itse suoritin on suhteellisen yksinkertainen (jos nyt tällaista termiä mitenkään voi käyttää mistään nykyaikaisesta suorittimesta). Yksinkertainen suoritin tekee optimoimisen työläämmäksi, mutta lopputuloksen nopeammaksi suorittaa.
Optimoinnin ongelma on se, että aikaisemmin mainitut erikoistilanteet vaativat täsmällisiä tilanmuutoksia, mutta optimointi ja käskyjen samanaikainen suoritus toisaalta estävät täsmälliset tilanmuutokset. Tähän ongelmaan on nyt kuitenkin ratkaisu, joka on lainattu tietokantojen tapahtumankäsittelystä. Aika ajoin emuloidun koneen täsmällinen tila otetaan talteen. Tämä voitaisiin tehdä jokaisen emuloidun konekäskyn jälkeen, mutta se hidastaisi suoritusta liikaa. Sen sijaan suoritin olettaa, että erikoistilanteita tapahtuu harvoin ja tallettaa tilan vain silloin tällöin suorittaen muun ajan emuloitavia käskyjä mahdollisimman tehokkaasti. Tilan talletus tehdään sitoutumisella, jossa kesken olevat konekäskyt toteutetaan loppuun ja sekä emuloidun suorittimen että sen sen muistin täsmällinen tila otaan talteen suorittimessa olevien erikoisrekisterien ja erikoiskonekäskyjen avulla. Talletushetkellä emuloitavan laitteiston tila on eheä eli samanlainen kuin se olisi vastaavassa todellisessa laitteistossa.
Kun sitten kuitenkin tuollainen erikoistilanne tapahtuu, niin se käsitellään seuraavasti. Nopeutta varten optimoitu emulointi pysähtyy ja yleensä havaitaan, että emuloidun suorittimen ja sen muistin tarkkaa tilaa ei ole käytettävissä. Mutta tarjolla on jokin vähän aikaa sitten talletettu tila. Emulaattori palauttaa emuloidun suorittimen muisteineen tuohon tilaan myös tietokannoista tutulla peruutusoperaatiolla. Emulaattori kääntää uudelleen konekielelle edellistä sitoutumista seuraavat emuloitavat käskyt. Näin emulointi voi jatkua aiemmin talletetusta ja nyt siis palautetusta tilasta lähtien. Tällä kertaa tavoitteena on kuitenkin täsmällinen erikoistilanteen käsittely eikä suoritusnopeus, joten uuteen käännökseen sisällytetään sitoutumiskäsky jokaisen emuloitavan konekäskyn jälkeen. Emulointi jatkuu nyt hitaasti yksi konekäsky kerrallaan. Erikoistilanteen tapahduttua se voidaan käsitellä täsmälleen samoin tavoin kuin todellisessa laitteistossa. Tilanteen jälkeen suoritus voi jatkua käyttäen alkuperäisiä, nopeutta varten optimoituja konekielisiä käskyjä. Niitä ei suinkaan hylätä erikoistilanteen aikana, vaan ne löytyvät käännöspuskurista.
Alkuaan kunkin optimoidun konekielisen käskysarjan jälkeen joudutaan kääntämään lisää käskyjä. Pikkuhiljaa kuitenkin useimmat suoritettavan ohjelman käskyt on käännetty emuloivan koneen kielelle ja itse emulaattorin ei tarvitse puuttua suoritukseen juuri lainkaan. Erilliset käskysarjat liitetään yhteen muuttamalla käskysarjojen lopussa olevia hyppykäskyjä, jolloin myöskin käskysarjan vaihtuminen seuraavaksi emulointiaikana tapahtuu hyvin nopeasti. Patentissa arvioidaan että emulaattori joutuu kääntämään uusia käskysarjoja keskimäärin kerran miljoonaa emuloitua käskyä kohden.
Käännöspuskurin on oltava riittävän iso, jotta se voi sisältää kaikki valmiit käännökset isonkin sovelluksen ja sen tarvitsemien emuloidun käyttöjärjestelmän palveluista. Toisaalta, jos emulaattori toteutetaan osana käyttöjärjestelmää, niin pääosa käyttöjärjestelmän palveluista voidaan kääntää etukäteen omille muistialueilleen.
Itse suoritin noudattaa RISC (Reduced Instruction Set Computer) suunnitteluperiaatteita ja siinä touteutetaan rinnakkain esimerkiksi 8 konekäskyä. Tätä kutsutaan VLIW (Very Long Instruction Word) arkkitehtuuriksi, koska kerralla suorittimella annettava konekäskysarja on niin pitkä. VLIW-käskyt on jo valmiiksi optimoitu siten, että suoritin voi käskyn saatuaan heti toteuttaa sen tarkistamatta lainkaan, missä vaiheessa muut sillä hetkellä käynnissä olevat käskyt ovat tai mitä ne ovat tekemässä. Patentissa esitetty suoritin ei myöskään muuta näiden VLIW-käskyjen suoritusjärjestystä, toisin kuin monet muut nykyaikaiset suorittimet. Tällä tavoin suorittimesta saadaan huomattavasti yksinkertaisempi kuin kilpailijansa, mutta toisaalta ohjelmien kääntäminen on monimutkaisempaa.
Asiaa voidaan myös tarkastella nykyaikaisen vertaamalla sitä CISC (Complex Instruction Set Computer) suorittimien (esim. kaikki Intelin uudemmat suorittimet) toteutusmenetelmiin. Niissä monimutkaiset konekäskyt pilkotaan suoritttimen sisällä yksinkertaisimmiksi mikrokäskyiksi, jotka ovat hyvin samankaltaisia RISC-arkkitehtuurin konekäskyjen kanssa, ja joita suoritetaan suorittimen sisällä hyvin samalla tavalla kuin RISC-arkkitehtuurin suoritin toteuttaa omia konekäskyjään. CISC-arkkitehtuurissa tuo muunnos konekäskyistä mikrokäskyiksi täytyy tehdä kunkin konekäskyn kohdalla aina alusta pitäen uudelleen, kun taas esitetyssä arkkitehtuurissa käskypuskuri pitää jo kertaalleen käännetyt ja optimoidut käskysarjat muistissa. Käskyjen noutaminen muistista on tosin hitaampaa kuin suorittimen sisäisistä mikrokäskyrekistereistä, mutta toisaalta tehokkaasti toteutettu käskyvälimuisti voi tehdä käskyjen noudon muistista hyvinkin nopeaksi. Patenttien esittämä suoritin voidaan toteuttaa pienempänä kun sen ei tarvitse sisältää piirejä käskyjen pilkkomiseen mikrokäskyiksi eikä suurehkoa mikrokäskyrekisteriä.
Esitetty suoritinarkkitehtuuri on selvästi suunniteltu nimenomaan toimimaan yhteen muuntavan emulaattorin kanssa suorittamaan emuloimalla x86-sovelluksia ja Windows-käyttöjärjestelmän palveluja. Sitä ilmeisesti voisi käyttää myös sellaisenaan suorittamaan suoraan sen konekielelle käännettyjä ohjelmia sen oman käyttöjärjestelmän alla, mutta tämä ei ilmeisestikään ole päätarkoitus. Tällaiseen tarkoitukseen samanlaisen suorittimen voisi suunnitella varmaankin tehokkaammin ilman muuntavan emulaattorin vaatimia laajennuksia. Muuntavaa emulaattoria voisi pitää myös osana käyttöjärjestelmää, koska se yhdessä suorittimen kanssa määrittelee sovelluksille suoritusrajapinnan. Patenttien tekijät kuitenkin mieltävät emulaattorin osaksi suoritinta.
Alkuperäisen arkkitehtuurin konekäskyjä emuloivat käskysarjat talletetaan emulaattorin ylläpitämään käännöspuskuriin, joka sijaitsee muistissa (kuva 2). Käännöspuskurissa pyritään pitämään kaikki koko emuloinnin aikana joskus tuotetut käännökset ja joissakin tapauksissa useita versioita tietyistä emuloitavista käskysarjoista. Niissä tapauksissa, joissa samasta käskysarjasta on tuotettu sekä nopea että tarkka versio, ne molemmat pyritään säilyttämään siltä varalta, että niitä vielä tarvitaan uudelleen.
Tavallisesti konekäskyjen tuottaminen ja erityisesti suoritusnopeuden äärimmäinen optimointi on ollut ohjelmointikielten kääntäjien vastuulla. Tämä optimointi vie suurimman osan kääntämiseen kuluvasta ajasta. Esitetyssä järjestelmässä lähes kaikki konekäskyt tuotetaan vasta ohjelman suoritusaikana, usein jopa moneen kertaan, ja silti yhteenlaskettu konekäskyjen tuottamiseen ja niiden suorittamiseen käytetty aika on pienempi kuin kilpailevalla suorittimella pelkkä suoritusaika. Selkeästi siis joko optimoinnin on oltava helpompaa tai sitten suorittimen nopeus kattaa myös optimointiin kuuluvan suoritusaikahävikin.
Suorittimessa on erityisrekistereitä emuloinnin nopeuttamiseen. Näissä rekistereissä pidetään yllä sekä emuloitavan suorittimen koko nykyhetkistä tilaa että viimeistä tilaa, johon suoritin on sitoutunut. Emuloitavan suorittimen tilaan sisältyvät kaikki näkyvät laiterekisterit sekä kaikki sisäiset ohjausrekisterit. Keskusmuistin muistipuskuri on toteutettu muistiin, johon osoittaa kolme erikoisrekisteriä. Näiden rekistereiden avulla muistipuskuri pystyy erottamaan alustavat muistiin talletukset niistä, johin se on jo sitoutunut.
Suorittimen käskykannassa on muutamia erityiskäskyjä emuloinnin nopeuttamista varten. Commit eli sitoutumiskäsky aiheuttaa emuloidun suoritintilan vahvistamisen tallettamalla työrekisterit sitoutetun tilan rekistereihin ja sitouttamalla emuloidun muistitilan muutokset muistipuskuria ohjaavia rekistereitä päivittämällä. Rollback-käsky peruuttaa emuloitavan suorittimen tilan viimeksi sitoutettuun tilaan kopioimalla sitoutetun tilan rekistereiden tiedot työrekistereihin ja hylkäämällä muistipuskurista ne emuloituun muistiin tapahtuneet muistiintalletukset, joihin se ei vielä ole sitoutunut. Patentista ei tosin selviä, onko peruutus toteutettu konekäskynä vai aliohjelmana emulaattorissa. Suurenkin rekisterijoukon sisällön kopiointi toiseen rekisterijoukkoon voi tapahtua hyvin nopeasti yhdellä kellopulssilla, jos se tehdään sitä varten suunnitellun laitteiston avulla.
Suoritin vähentää muistiviitteiden lukumäärää pitämällä usein käytetyistä muuttujista kopioita omissa sisäisissä rekistereissään. Samalle muuttujalle on siis suoritusaikana kaksi eri osoitetta: yksi muistiin ja toinen sisäiseen todelliseen rekisteriin. Tällainen optimointi voisi olla tulos vaikkapa jonkun tietyn aliohjelman optimoinnista, jossa lähes kaikki tuon muuttujan viittaukset voidaan tehdä sisäistä rekisteriä käyttäen. Toisaalta, aivan kaikkia tuohon muuttujan muistiosoitteen kautta tehtyjä viittauksia ei voida paikallistaa etukäteen ja niiden havaitseminen suoritusaikana on ollut mahdotonta. Esitetyssä arkkitehtuurissa on erityisrekistereitä tämän ongelman ratkaisemiseen. Kyseisten rekistereiden piirit aktiivisesti valvovat jokaista muistiviitettä ja ne aiheuttavat erikoistilanteen (poikkeuksen) aina kun tällaiseen kahdessa paikassa sijaitsevaan tietoon viitataan. Useimmiten tapahtuvat nopeasti rekisterin kautta ja harvojen muistiosoitteen kautta tapahtuvien viittausten hidastava vaikutus on pieni.
Osoitteenmuunnospuskuria (TLB) käytetään esitetyssä arkkitehtuurissa kahteen uuteen tehtävään. Kunkin osoitteenmuunnoksen yhteydessä on kaksi uutta suojausbittiä. Bitin A/N avulla voidaan erotella oheislaitteiden muistiosoitteet tavallisista muistiosoitteista. Sen avulla emuloinnissa siirräntää toteuttavat emuloidut konekäskyt saadaan suoritettua täsmällisesti. Bittiä T käytetään valvomaan emuloidussa ohjelmassa itseään muuttavan ohjelman olemassaoloa. Siitä aiheutuneen erikoistilanteen avulla saadaan muuttuneet emuloitavat konekäskyt käännettyä tarvittaessa uudelleen.
Transmeta on siis suunnitellut uudenlaisen RISC-VLIW suorittimen, jossa suuri osa aikaisempien suorittimien sisäisestä optimoinnista on siirretty suorittimen ulkopuolelle. Tällä tavoin itse suoritin on saatu huomattavasti yksinkertaisemmaksi kuin vastaavat nykyisellä arkkitehtuurilla ja samalla valmistustekniikalla toteutetut suorittimet. Suorittimessa myös mikro-ohjelmamuisti sekä mikro-ohjelmien ohjauslogiikka on siirretty suorittimen ulkopuolelle muistiin, mutta näinhän on tehty jo aikaisemmissakin RISC arkkitehtuureissa. Sovellusohjelmat tulkitaan ohjelmallisesti muuntavassa emulaattorissa, jonka toimintaa avustavat suorittimen uudet rekisterit ja emulointia tukevat konekäskyt.
Tällä suorittimella varustetun laitteiston suoritusteho on vielä epäselvä. Toisaalta laskentaa nopeuttaa yksinkertaisempi suoritin, joka pelkän pienemmän kokonsa vuoksi voidaan toteuttaa halvemmalla tai nopeampana tai vähemmän virtaa kuluttavana kuin kilpailijansa. Toisaalta taas laskentaa hidastaa käskyjen dynaaminen kääntäminen, usein vielä moneen kertaan, sekä se, että suoritettavat "mikrokäskyt" ovat muistissa eivätkä suorittimen sisäisessä mikro-ohjelmamuistissa. Kokonaissuoritusteho jää nähtäväksi.
On mielenkiintoista, miten Transmeta aikoo uutta suoritinarkkitehturiaan hyödyntää. Vaihtoehdot ovat patenttien lisenssoimisesta mikropiirien valmistajille aina omien tähän suorittimeen perustuvien tuotteiden kehittämiseen.
TEEMU KEROLA JA PETRI KUTVONEN
Kirjoittajat työskentelevät Helsingin yliopiston
tietojenkäsittelytieteen laitoksella.
Teemu Kerola
on lehtori ja
Petri Kutvonen
pääsuunnittelija.