Tietokoneen suorituskyvystä¶
Osaamistavoitteet: Materiaalissa esitetään erilaisia mittareita tietokonejärjestelmän suorituskyvyn mittaamiseen ja järjestelmien väliseen vertailuun.
Kun tietokonejärjestelmiä vertaillaan, sopiva mittari on kuinka paljon suoritusteho parani suhteessa aiempaan vastaavaan ratkaisuun. Syy tähän on varsin kirjavat digitaalipiirien, mikroarkkitehtuurin, käskykannan, väylien tai ylemmällä tasolla tietokoneen laitteiston toteutus. Tässä ateriaalissa esitetään tunnettuja metriikoita: määritelmiä ja standardeja joiden mukaan lasketaan vertailuarvoja eri tietokonejärjestelmien tai suorittimien vertailemiseksi.
Yleisesti tietokonejärjestelmän / suorittimen suorituskykyä mitataan ajan funktiona. Eli kuinka kauan jonkin ohjelman, ts. laskentatehtävän, suoritus kestää tai vertaillaan mikä suoritin selviytyy valitusta laskentatehtävästä nopeiten. Esimerkkinä, älypuhelimessa meitä kiinnostaa kuinka nopeasti sovellukset siinä toimivat eli mikä oli suurin latenssi minkä käyttäjä kokee.
Tämä ei ole ainut tapa mitata tietokonejärjestelmän suorituskykyä. Aiemmin olemme puhuneet suoritustehosta, jossa mitattiin montako käskyä sekunnissa saadaan suoritettua. Vertaillessa sekventiaalista ja liukuhihnatoteutusta todettiin, että yksittäisen käskyn suoritusaika hieman piteni liukuhihnalla, mutta aikayksikössä saatiin enemmän käskyjä suoritettua. Esimerkkinä modernin moniajoa toteuttavan suorittimen tai isommassa mittakaavassa palvelinfarmin suoritusteho.
Ajan laskeminen¶
Koska tietokoneiden (digitaalipiireinä) toimintaa ohjaa kello, saadaan sen kellojakson pituudesta yksikkö millä mitata aikaa siinä tietokonejärjestelmässä. Nyt kellojakson pituus sekunteina
1 / kellotaajuus
.Tällöin voidaan laskea ohjelman suoritukseen kulunut aika T:
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ä joko vähentämällä ohjelman kellojaksojen määrää tai kellojakson pituutta, ts. nostamalla kellotaajuutta. Mikroarkkitehtuurissa tämä voisi tarkoittaa , että lähestytään käskykannassa CISC-arkkitehtuuria, mutta silloin myös käskyn kellojaksojen määrä saattaisi kasvaa tai kellotaajuus pienentyä. Jolloin haluttua parannusta ei välttämättä saavutetakaan..
Yleiskäyttöisempi tapa mitata suoritusaikaa olisi mitata ohjelman suoritusaikaa yksittäisten käskyjen suoritusajan kautta, laskemalla ne yhteen. Tämä parametri toki riippuu siitä miten käskyt on mikroarkkitehtuurissa toteutettu. Mutta sitä voidaan yleistää ohjelman suorituksen näkökulmasta määrittelemällä parametri kellojaksojen määrä käskyä kohti (engl. clock cycles per instruction, CPI), joka yhden käskyn suoritukseen kuluvan keskimääräisen ajan. CPI on 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 |
Amdahlin laki¶
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 Nopeutus: 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 / merkittävästi.
Tietokonejärjestelmien vertailu¶
Hyvä periaate tietokonejärjestelmän suunnittelussa onkin tehdä yleisestä tapauksesta nopea (engl. "making common case fast"). Tämä pätee varsin hyvin työasemien suhteen, mutta toisaalta taas tarvitaan erikoistuneita suorittimia kuten GPU:t.
Okei.. no mikä sitten olisi sopiva yleinen tapaus?? Tätähän on vaikeaa ellei mahdotonta määrittää, joten suorituskyvyn vertailuarvoja laskiessa (engl. benchmarking) käytetään joukkoa erilaisia ohjelmia, jotka on suunniteltu yhdessä mittaamaan suorittimien tehokkuutta monipuolisesti. Esimerkiksi 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ä 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ä.
Lopuksi¶
Muita yleisiä aiemmin ja nykyään käytettyjä benchmarkkeja ovat Whetstone, Dhrystone, liukulukulaskennassa FLOPS ja supertietokoneiden kanssa käytetty LINPACK.
Anna palautetta
Kommentteja materiaalista?