AMD:n Zen-pääarkkitehti haastattelussa Armin ja x86:n eroista

Kaotik

Banhammer
Ylläpidon jäsen
Liittynyt
14.10.2016
Viestejä
23 242
AMD:n Zen-arkkitehtuurin pääarkkitehti Mike Clark on istunut haastattelupöytään Computer, Enhance! -sivustoa pyörittävän Casey Muratorin kanssa.

Haastattelu on erityisen mielenkiintoinen teknisestä ja arkkitehtuurisesta näkökulmasta kiinnostuneille, mutta tavan kuluttajien kannalta oleellisimman sisällön voi tiivistää lyhyeen: Clark myöntää luonnollisesti olevansa x64-mies ja sen myötä hänen mielipiteensä voi olla osin puolueellinenkin, mutta hänen nähdäkseen Armin ja x64:n (x86/x86-64) välillä ei ole mitään periaatteellista eroa energiatehokkuuden tai suorituskyvyn osalta. Sen sijasta markkinoilta löytyvien Arm- ja x64-prosessoreiden erot suorituskyvyssä ja energiatehokkuudessa tulevat yksinkertaisesti erilaisiin markkinoihin keskittymisestä.

Lähde: An Interview with Zen Chief Architect Mike Clark
 
Paljon hyvää asiaa tuossa haastattelussa, mutta muutamia kriittisiä kommentteja haluan heittää:

1) Mike esittää argumentin, että x86n muuttuvanmittaiset käskyt pienentävät käskymuistin kulutusta ja sen kautta myös käskyvälimuistin osumatarkkuutta ja tästä x86 saa suorituskykyetua, joka kompensoi sitä, että ARMin käskyjä on helpompi dekoodata.

Tässä argumentissa on pointtia, mutta tämä argumentti ei enää nykyaikana (ARM64 vs x86-64) toimi kovin hyvin, se oli erinomainen argumentti vuosituhannen vaihteessa 32-bittisellä x86lla jotain MIPSiä, Alphaa, PA-RISCiä ja PPCtä vastaan, mutta:

1a) x86-64n käskyenkoodaus sisältää aivan liikaa erinäisiä (uusia) prefix-enkoodauksia jotka pidentävät käskyjä selvästi. Heti, jos tarvitaan muita kuin kahdeksaa ensimmäistä rekisteriä, pitää lisätä prefix-tavu. Monissa AVX-käskyissä on jopa useampi prefix-tavu. Vaikka muinaisen 16-bittisen x86n kanssa keskimääräinen käskynpituus oli jossain 2.5 tavussa (huomattava parannus tyypillisten RISCien 4 tavuun verrattuna), niin x86-64n keskimääräinen n. 3.5 tavua ei ole merkittävä parannus ARM64n 4 tavuun verrattuna

1b) Vaikka 64-bittinen ARM RISC jossa ei ole esimerkiksi yhdistettyjä lataus-ja tallennuskäskyjä, se sisältää monia muita näppäriä pieniä yhdistelmäkäskyjä ja saattaa usein pystyä tekemään saman asian pienemmällä käskymäärällä kuin x86 (ja sivuhuomio: huomattavasti pienemmällä käskymäärällä kuin RISC-V), ja tämä vielä kaventaa eroa koodin koossa 64-bittisen ARMin ja x86-64n välillä.

Pikaisesti löytyi jonkun tekemiä vertailuita jonkun satunnaisen softan koodin koosta eri arkkitehtuureilla, käännettynä samoilla normaaleilla/järkevillä kääntäjäoptioilla:

32-bittisissä arkkihteuureissa (bittisyys viittaa tässä kokonaislukujen datanleveyteen, ei käskyn pituuteen) tihein oli ARM Thumb2-laajennoksella joka lisäsi 16-bittiset käskyt, sen lähellä takana ARC, m68k, x86, sitten RISC-V 16-bittisten käskyjen C-laajennoksella.

Vain 32-bittiset käskyt sisältävät normaalimmat RISCit on sitten kaukana takana.

sizes-32bit.png


Mutta 64-bittisissä arkkitehtuureissa (edelleen 64 bittiä viittaa datan leveyteen, ei käskyn pituuteen) tiheystilanne oli selvästi huonompi. 64-bittinen ARM on ihan eri käskykanta kuin 32-bittinen ARM eikä siinä ole enää thumb-moodia vaan kaikki käskyt ovat 32 bittiä pitkiä, ja ARCista eikä m68k:sta ole 64-bittistä versiota

Nyt RISC-V tuolla C-laajennoksella kiilaa kärkeen (mutta on tosiaan hankalampi dekoodata kuin 64-bittinen ARM), x86-64 on käytännössä tasoissa RISC-V:n kanssa, mutta 64-bittinen ARM (joka on helpoin dekoodata) on hyvin lähellä näiden kintereillä, ero on jossain n. 5% luokassa

sizes-64bit.png


Kun se ero koodin tiheydessä jää n. viiteen prosenttiin, niin se dekoodamisen helppous nouseekin selvästi merkittävämmäksi kuin se ero koodin tiheydessä.

Ja käytännössä, 64-bittisen ARMin käskyvälimuistiin mahtuu selvästi enemmän käskyjä kuin x86lla mahtuu yhteensä L1-käskyvälimuistiin sekä mikro-op-välimuistiin joilla sama yhteiskoko kuin 64-bittisen ARMin yhdellä käskyvälimuistilla.


Ja offtopic-sivuhuomautuksena vielä: eron ARM64n ja RISC-Vn välillä ARMin rikkaamman käskykannan vaikutuksesta käskymäärään huomaa hyvin vertaamalla ARM64sta RV64G:hen. Molemmissa käskyjen pituus on sama, aina 4 tavua, mutta ARM64-koodi on >10% pienempi, eli se tekee saman asian tarviten siihen >10% vähemmän käskyjä.


2) Kun kysytään tuosta välimuistin ja virtuaalimuistin sivukoon suhteesta, Mike toteaa, että ratkaisuita on, tällaisia prossuja on tehty aiemmin. Ei mainitse nimellä, mutta itselle tulee mieleen esim. K6.

Tässä kuitenkin ehkä vähän sivuuttaa liian helpolla sen, että ne ratkaisut eivät ole täydellisiä vaan niissä on omat haittapuolensa (minkä takia niitä ei yleensä haluta käyttää vaan on siirrytty tuohon VIPT-tyyliseen välimuistiin jossa sivukoko rajoittaa yhden wayn koon)
 
Viimeksi muokattu:

Statistiikka

Viestiketjuista
272 553
Viestejä
4 702 261
Jäsenet
76 926
Uusin jäsen
NightShadow88

Hinta.fi

Back
Ylös Bottom