Tietokoneen suorituskyvystä¶
Osaamistavoitteet: Materiaalissa esitetään erilaisia mittareita tietokonejärjestelmän suorituskyvyn mittaamiseen ja järjestelmien väliseen vertailuun.
Tietokonejärjestelmien vertailussa mittari (yleensä) on kuinka paljon suoritusteho parani suhteessa aiempaan vastaavaan ratkaisuun. Oleellista on vertailussa asettaa vertailuun sopiva mittari, koska kuten tiedämme, erilaisia suorittimen ja toiminnan ohjauksen toteutuksia on varsin kirjavasti. Tässä materiaalissa esitetään tunnettuja metriikoita, määritelmiä ja standardeja, joiden avulla voidaan laskea vertailuarvoja eri tietokonejärjestelmien tai suorittimien vertailemiseksi.
Yleisesti käyttäjänäkökulmasta tietokonejärjestelmän / suorittimen suorituskykyä mitataan ajan funktiona. Eli kuinka kauanko ohjelman suoritus kestää. Tällöin mittarina on kyseinen laskentatehtävä, jolla voidaan vertailla mikä suoritin/järjestelmä selviytyy tehtävästä nopeiten. Toisinsanoen mikä oli viive (latenssi) minkä käyttäjä kokee.
Tämä ei ole ainut tapa mitata tietokonejärjestelmän tehokkuutta. Aiemmin olemme puhuneet suoritustehosta, jossa mitattiin montako käskyä suoritin suorittaa aikayksikössä (sekunnissa). Vertaillessa sekventiaalista ja liukuhihnatoteutusta todettiin, että yksittäisen käskyn suoritusaika hieman piteni liukuhihnalla, mutta kokonaisuudessaan saatiin enemmän käskyjen tuloksia ulos aikayksikössä.
Amdahlin laki¶
Ilmeinen tapa nopeuttaa tietokonejärjestelmän suorituskykyä on hankkia nopeampia komponentteja/osajärjestelmiä, mutta tämäkään ei ole ihan suoraviivaista. Amdahlin laki kuvaa miten järjestelmäresurssien kasvattaminen vaikuttaa ohjelman suoritusaikaan, perustuen siihen kuinka merkittävästi parannukset vaikuttavat ohjelmassa.
Esimerkki.
alfa = 0.6, eli resurssia käytetään 60% suoritusajasta Tvanha = 100s k = 3, kun saavutettiin kolminkertainen nopeus Parantunut suoritusaika: Tuusi = (1-0.6)*100s + (0.6*100s)/3 = 40s + 20s = 60s Nopeutuskerroin s = Tvanha/Tuusi = 100s/60s = 1.67
Havaitaan siis, että Amdahlin lain perusteella yksittäisen järjestelmäresurssin nopeuttaminen ei nopeuta koko järjestelmän toimintaa vastaavasti. Noh, tämä on aika maalaisjärkeen käypää, kun sen ajattelee esimerkiksi uusien osien hankkimisena johonkin mekaaniseen koneeseen.
Suorituskyky ajan suhteen¶
Koska suorittimien (digitaalisten piirien) toimintaa ohjaa kello, saadaan sen kellojakson pituudesta yksikkö suoritusajan mittaamiseen. Nyt
kellojakson pituus = 1 / kellotaajuus
(sekunteina).Ohjelman suoritukseen kulunut aika T sekunteina: T = ohjelman kellojaksojen määrä * kellojakson pituus Vastaavasti T kellotaajuuden avulla: T = ohjelman kellojaksojen määrä / kellotaajuus
Tämän parametrin avulla hardissuunnittelija voisi parantaa suorituskykyä kahdella tapaa. Joko vähentämällä käskyn kellojaksojen määrää tai kellojakson pituutta, ts. nostamalla kellotaajuutta. Suorittimien mikroarkkitehtuureissa tämä voisi tarkoittaa , että käskykantaan otetaan CISC-käskyjä tai liukuhihnaan lisätään vaiheita.
Käskyjen suoritusaika¶
Toinen tapa mitata suoritusaikaa on laskea aikaa käskyjen määrän mukaan (engl. instruction count) yksittäisten käskyjen suoritusajan kautta. Tämä mittari toki riippuu paljolti siitä, miten käskyt on mikroarkkitehtuurissa toteutettu (CISC / RISC), jolloin vaihtelua voi olla paljon. Esimerkiksi AMD K7-prosessorin konekielen käskyjen vaatimien mikrokoodin operaatioiden määrä (1-260) ja käskyn aiheuttama viive (1-200 kellojaksoa).
Tämä voidaan yleistää määrittelemällä parametri kellojaksojen määrä käskyä kohti (engl. clock cycles per instruction, CPI), joka kertoo yhden käskyn suoritukseen kuluvan keskimääräisen ajan. CPI voidaan laskea myös erikseen eri tyyppisille käskyille: kokonaislukuoperaatiot, liukulukuoperaatiot, muistiosoitukset, jne. CPI on myös hyvä mittari vertailemaan saman käskykannan toteuttavia suorittimia, esimerkkinä x86-käskykannan toteuttavat Intelin and AMD:n suorittimet.
CPI:n avulla ohjelman suoritusaika T saadaan seuraavasti:
T = käskyjen lukumäärä * CPI * kellojakson pituus
.Esimerkki. Vertaillaan kahta ohjelmaa A ja B ja mites käykään?
Suorittimen käskykannassa on määritelty kaksi CPI:tä erityyppisille käskyille: ALUn operaatiot CPI = 1 Muistiosoitukset CPI = 8 Ohjelmissa käskyjä on seuraavasti: A: ALU 12 + muisti 4 = 16 käskyä B: ALU 6 + muisti 6 = 12 käskyä A:n suoritusaika Ta = 12*1 + 4*8 = 44 B:n suoritusaika Tb = 6*1 + 6*8 = 54
Havaitaan, että ohjelmassa B oli lukumääräisesti vähemmän käskyjä, mutta A:n suoritusaika oli silti lyhyempi. Nyt vertailun tulos riippuisi siitä kumpaa parametria painotetaan: käskyjen määrää vai suoritusaikaa?? Tästä syystä pelkkä CPI ei ole kattava mittari suorituskyvyn mittaamiseen. Lisäksi eri suorittimille käännetyn saman ohjelman käskyjen määrä ja CPI voivat olla erit mikroarkkitehtuurista riippuen.
Yleisesti tietokonejärjestelmissä yllä esitettyjä yksittäisiä parametreja ei voida käyttää suorituskyvyn arviointiin tai vertailuun. Nyt käytetäänkin yhtaikaa kaikkia yllä esitettyjä parametrejä suorituskyvyn mittaamiseen ja myös vertailuun eri järjestelmien välillä:
1. | Ohjelman suoritukseen kulunut aika |
2. | Kellojakson pituus |
3. | Käskyjen määrä ohjelmassa |
4. | CPI |
Tietokonejärjestelmien vertailu¶
Kantava periaate tietokonejärjestelmän suunnittelusta alkaen onkin tehdä yleisestä tapauksesta nopea (engl. "making common case fast"). Tämä on hyvä ajatus nykytyöasemissa johtuen niiden monipuolisista käyttötarkoituksista. Mutta myös esim GPU:ssa kannattaa miettiä millaisia (matriisi)operaatioita yleisesti vaaditaan kuvankäsittelyssä ja tehdä niistä nopeita.
Okei.. no mikäs sitten olisi sopiva yleinen tapaus?? Tätähän on vaikeaa ellei mahdotonta määrittää. Tästä johtuen, suorituskyvyn vertailuarvoja laskiessa (engl. benchmarking) käytetään joukkoa erilaisia ohjelmia, jotka on suunniteltu yhdessä käytettäessä mittaamaan suorittimien tehokkuutta monipuolisesti. Vaikkapa SPEC benchmarkit sisältävät kymmeniä erilaisia testiohjelmia, vaihdellen liukulukulaskennasta C-koodin kääntämisen kautta shakkipeliin, jne.
Esimerkki. Kuvassa SPEC-ohjelmat, joilla mitattiin Intel Core i7 920 (2.66GHz) -suorittimen suorituskykyä.
Huomataan, että näistä eri testeistä ilmoitetaan eri ohjelmille kaikki neljä ym. parametria: ohjelman käskyjen määrä, CPI, kellonjakson pituus ja ohjelman suoritusaika. Viimeinen parametri SPECratio on testit yhdistämällä saatu laskennallinen (normalisoitu) vertailuluku, joilla eri suorittimia voidaan verrata keskenään mainituissa testeissä.
Yleisiä benchmarkkeja¶
Muita yleisiä aiemmin ja nykyään käytettyjä benchmarkkeja ovat Whetstone, Dhrystone, liukulukulaskennassa FLOPS ja supertietokoneiden kanssa käytetty LINPACK.
Lopuksi¶
Suomessa Tieteen Tietotekniikan keskuksen (CSC) laskentapalvelinkin pääsi maailmassa sadan nopeimman supertietokoneen listalle.
Anna palautetta
Kommentteja materiaalista?