AMD:n Zen 3 -arkkitehtuuriin perustuvat Vermeer-koodinimelliset Ryzen 5000 -sarjan prosessorit saapuivat myyntiin tänään. Yhtiön mukaan arkkitehtuuria on viilattu käytännössä jokaisella osa-alueella. Käymme tässä artikkelissa läpi Zen 3 -arkkitehtuurin ominaisuudet, uudistukset ja erot edellisen sukupolven Zen 2 -arkkitehtuuriin verrattuna.
Zen 3
Zen 3 arkkitehtuuri on AMD:n mukaan täysin uusi arkkitehtuuri, kun Zen 2 oli pikemminkin viritelty Zen. Korkealta tasolta katsasteltuna arkkitehtuurit ovat kuitenkin hyvin samankaltaisia ja selkein kriteeri ”uudelle arkkitehtuurille” vaikuttaakin olevan siirtyminen neljän ytimen prosessorikomplekseista (CCX) kahdeksan ytimen komplekseihin. Uutta Zen 3 -arkkitehtuuria tullaan käyttämään tässä artikkelissa käsiteltyjen Vermeer-koodinimellisten työpöytäprosessoreiden lisäksi tulevissa Milan-koodinimellisissä Epyc-prosessoreissa sekä tulevien sukupolvien APU-piireissä ja Ryzen Threadrippereissä.
Prosessori- eli CCD- ja IO- eli cIOD-sirut
AMD:n Zen-arkkitehtuureiden keskiössä on ollut alusta alkaen CCX-prosessorikompleksi eli CPU Core Complex. Aiemmissa Zen-, Zen+- ja Zen 2 -arkkitehtuureissa CCX rakentui neljän ytimen ryppäistä, joilla on yhteinen välimuisti. Zen 3 -arkkitehtuurissa tämä asetelma on unohdettu ja nyt yhdessä ryppäässä on kahdeksan ydintä ja niille yhteinen välimuisti.
Zen- ja Zen+-arkkitehtuureissa CCX:t olivat samalla piisirulla ns. uncoren kanssa, mutta Zen 2:ssa AMD siirtyi chiplet-suunnitteluun eli useamman pikkusirun käyttöön ja jakoi prosessorinsa erillisiin CCD- ja cIOD-siruihin (Core Complex Die, central(?) Input / Output Die). Kussakin Zen 2 -prosessorisirussa on kaksi prosessorikompleksia välimuisteineen.
Zen 3:ssa pysytään Zen 2:n viitoittamalla tiellä, mutta prosessorisiruissa on nyt kahden neliytimisen CCX:n sijasta yksi kahdeksanytiminen CCX. IO-siru on Zen 2- ja Zen 3 -prosessoreissa täysin identtinen, jonka lisäksi itse paketointi kaksine prosessorisirupaikkoineen on pysynyt ainakin silmämääräisesti identtisenä.
Kullakin Zen 3 -ytimellä on käytössään oma 512 kilotavun L2-välimuisti ja kaikkien ytimien kesken jaettu yhteinen 32 megatavun L3-välimuisti. L3-muisti toimii ns. uhrivälimuistina, eli se täytetään L2:sta pois tippuvalla datalla. L2-välimuistin tagit duplikoidaan lisäksi L3-välimuistiin nopeamman filtteröinnin ja nopeampien välimuistisiirtojen nimissä.
Prosessori- ja IO-sirujen välinen kommunikointi hoidetaan Infinity Fabric -väylällä. Zen 2:sta tuttuun tapaan prosessorisiru voi lähettää IO-sirun Infinity Fabriciin 16 bittiä dataa per kellojakso ja vastaanottaa sitä 32 bittiä per kellojakso. IO-sirun sisällä Infinity Fabricin ja muistiohjaimen väylä on 32 bittiä ja IF:n ja IO-ohjaimen välillä 64 bittiä per kellojakso suuntaansa.
Zen 3 -prosessoriytimen arkkitehtuuri
Front-end
Zen 3 -arkkitehtuurin Branch Predictor eli haarautumisen ennustaja perustuu TAGE-periaateeseen (TAgged GEometry length) kuten aiemminkin, mutta yhtiö on sijoittanut sen BTB-puskurit (Branch Target Buffer) uudelleen viiveiden pienentämiseksi. L1-tason BTB-puskurin kokoa on lisäksi kasvatettu kaksinkertaiseksi 1024 kirjaukseen, kun L2-tason BTB-puskuria on kutistettu 7168:sta 6656 kirjaukseen. Ennustajan Indirect Target Array -puskuri on niin ikään kasvanut Zen 2:n 1024:sta 1536 kirjaukseen. AMD on lisäksi optimoinut L1-käskyvälimuistin käyttöastetta ja nopeutta aiemmasta, minkä lisäksi mikrokäskyvälimuistin hakujen järjestelyä ja vaihtoa mikrokäskyvälimuistin ja käskyvälimuistin välillä on nopeutettu.
Suoritusydin
Varsinainen suoritusydin on jaettu tuttuun tapaan erillisiin kokonaisluku- ja liukulukuosioihin. Yhtiön tavoite oli pienentää käskyjen suorituksen viiveitä ja pyrkiä käsittelemään laajempia kokonaisuuksia kerralla käskytason rinnakkaisuuksien löytämiseksi, mikä edesauttaa itse suoritusyksiköiden käyttöastetta.
Kokonaislukupuolen skedulerit (vuorontaja, scheduler) on vaihdettu Zen 2:n neljästä 16 käskyn ALU- ja yhdestä 28 käskyn AGU-skedulerista neljään 24 käskyn eli yhteensä 96 käskyä käsittelevään yhdistettyyn ALU/AGU-skeduleriin. Fyysisen kokonaislukurekisterin kokoa on lisäksi kasvatettu 192 kirjaukseen Zen 2:n 180 kirjauksesta. Kokonaislukupuoli kykenee aloittamaan 10 käskyn suorituksen kellojaksoa kohden, kun Zen 2:ssa kyettiin seitsemään käskyyn. Käskyjä suorittavat neljä ALU:a (Arithmetic Logic Unit), kolme AGU:a (Address Generation Unit) sekä yksi dedikoitu haarautumisyksikkö ja kaksi St-data-yksikköä. Käskyjen uudelleenjärjestelypuskuria on lisäksi kasvatettu 224:stä 256 kirjaukseen.
Liukulukupuolella Zen 3:n uudistukset ovat päällisin puolin maltillisempia. AMD:n mukaan FMA(C)- eli Multiply-accumulate-käskyjen suoritus on nyt aiempaa nopeampaa kestäen neljä kellojaksoa, kun Zen ja Zen 2 -prosessoreissa se vei viisi kellojaksoa. Lisäksi käskyjen lähetyksen kaistanleveyttä on kasvatettu ja suoritusyksikköjen rinnalle on lisätty erilliset F2I / Store -yksiköt. Myös skedulerin kerrotaan olevan aiempaa suurempi, mutta sen muista muutoksista AMD ei hiiskunut mitään.
Lataus- ja tallennus
Zen 3:n lataus- ja tallennuspuolella (load, store) AMD on kasvattanut Store-jonon pituutta 48 kirjauksesta 64 kirjaukseen. L2 DTLB -välimuistissa (Data Translation Lookaside Buffer) on edelleen tilaa 2048 kirjaukselle ja L1-datavälimuisti on niin ikään edelleen 32 kilotavua. AMD:n mukaan lataus- ja tallennuspuolella on paranneltu etenkin lyhyiden merkkijonojen kopiointinopeutta, datan ennakkohakujen nopeutta sivurajojen yli ja tallennus-lataus-riippuvaisuuksien ennustamista.
Tietoturva ja käskykannat
Prosessorimaailmaa ovat viime vuosina ravistelleet toistuvat tietoturvaongelmat. Zen 3:ssa on mukana kaikki Zen 2:n tutut tietoturvaominaisuudet kuten SME (Secure Memory Encryption eli AMD Memory Guard), IBC (Indirect Branch Control), GMET (Guest Mode Execute Trap) ja UMIP (User Mode Instruction Prevention). Uutena tietoturvaominaisuutena Zen 3 -arkkitehtuuriin on lisätty Control-flow Enformecent Technology eli CET. CET on suunniteltu suojaamaan prosessoria Return-oriented Programming- eli ROP-hyökkäyksiltä.
Käskykantapuolella Zen 3 tukee kaikkia Zen 2:n tukemia käskyjä, sekä uutena MPK:ta ja VAES/VPCLMULQD:tä. MPK- eli Memory Protection Keys -käskyt liittyvät käyttäjädatan kirjoitus ja lukulupiin ja VAES/VPCLMULQD ovat AVX2-käskyjä, joiden tuki puuttui Zen 2:sta.
Loppusanat
Ryzen 9 5900X ja 5950X -testiartikkelistamme voi lukea, miten AMD:n uuteen arkkitehtuuriin perustuvat prosessorit pärjäsivät io-techin testilaboratoriossa ja täyttikö yhtiö toimitusjohtaja Lisa Sun lupaukset muun muassa pelisuorituskykykruunun viemisestä Inteliltä. Seuraavaksi Zen 3 -arkkitehtuuri tullaan näkemään Milan-koodinimellisissä Epyc-prosessoreissa, joiden toimitukset tullaan aloittamaan vielä kuluvan vuoden puolella. Työpöytä- ja palvelinprosessoreiden jälkeen ensi vuoden alkupuolella vuorossa ovat Cezanne-koodinimelliset APU-piirit, jotka tulevat yhdistämään uuden prosessoriarkkitehtuurin nykyisistä APU-piireistä tuttuun Vega-arkkitehtuurin grafiikkaohjaimeen. Uuden sukupolven Ryzen Threadripper -prosessoreiden aikataulu on vielä tällä hetkellä avoin.
AMD on varmistanut jo aiemmin työskentelevänsä parhaillaan tulevan Zen 4 -arkkitehtuurin parissa. Arkkitehtuurin prosessorit tullaan valmistamaan TSMC:n 5 nanometrin valmistusprosessilla ja ne tullaan julkaisemaan viimeistään vuonna 2022. AMD on erikseen varmistanut jo aiemmin, että heidän roadmapeissaan viimeinen vuosiluku ei merkitse kyseisen vuoden alkua, vaan loppua. Tähän asti jokainen uusi tuote on kuitenkin julkaistu roadmapin päättävää vuotta aiemmin, kuten esimerkiksi nyt julkaistu Zen 3 -arkkitehtuuri, joka esiintyi vuoteen 2021 päättyvissä roadmapeissa.
Itse Zen 4 -arkkitehtuurista ei tiedetä vielä tällä hetkellä käytännössä mitään. Siihen perustuvien työpöytäprosessoreiden odotaan kuitenkin sopivan nykyisen AM4:n sijasta täysin uuteen prosessorikantaan ja tukevan DDR5-muisteja sekä mahdollisesti PCI Express 5.0 -väylästandardia. DDR5- ja PCI Express 5.0 -tuki tarkoittaisi samalla uutta IO-sirua, kun Zen 3:ssa voitiin vielä hyödyntää edeltävästä sukupolvesta tuttua sirua.
Ihanaa ATK-liturgiaa, josta en ymmärtänyt ihan kaikkea. Mutta jokaisen Kynärin pelaajan on hyvä nämä asiat tietää. 😉
Heh! Mutta joo, aika harva näistä saa irti kaikkea. Mutta on näillä foorumeilla niitäkin jotka osaavat näistä sanoa paljonkin. Hkultakala varmaan osaa kommentoida ja kyllä noista ihan tämmöinen tavallinenkin tallaaja ymmärtää mitä siellä on tehty ja mitä hyötyä se voi antaa… sitä ei niinkään että miten ja mistä kaikki tuo johtuu.
Mukava nähdä näitäkin artikkejeja!
Oikeiden asiantuntijoiden kommetteja artikkelista odotellessa;)
Zen1/Zen2lla molemmat haarautumisyksiköt olivat samojen suoritusporttien perässä kuin kokoniaslukuyksiköt, eli jos suoritettiin haarautumiskäsky (eli tarkastus, että osuiko >10 kellojaksoa sitten tehty ennustus oikeaan että saadaanko jatkaa mistä ollaan menossa vai pitääkö perua ja palauta siihen), pystyttiin samalla suorittamaan neljän sijasta vain 3 kokonaislukukäskyä, tai jos tarkastettiin 2 haarautumista, pystyttiin samalla kellojaksolla suorittamaan vain 2 kokonaislukukäskyä.
Nyt zen3essa toinen haarautumisyksikkö on siirretty oman suoritusporttinsa taakse, jolloin se ei kilpaile suoritusporteista kokonaislukujen laskentaoperaatioiden kanssa, vaan voidaan suorittaa vaikka 4 kokoniaslukujen laskentaoperaatiota + haarautumisentarkstus kellojaksossa.
Tämä on siitä näppärä muutos, että on paljon haarautumiskäskyjä, jotka eivät lue mitään arvojaan rekistereistä, ja suurin prosessorien leventämistä haittaava tekijä on arvojen lukeminen rekistereistä (tai bypassaaminen edellisiltä käskyiltä). AMD sanoi, että tämän uuden suoritusportin takia ei tarvittu yhtään lisää rekisterinlukuportteja tai bypass-kytkentöjä (jotka on ne hankalat asiat), eli tämä erillinen suoritusportti tälle haarautumisyksikölle voi ilmeisesti suorittaa ainoastaan sellaisia haarautumiskäskyjä, jotka eivät lue kokonaislukurekistereitä. Ne, jotka lukevat rekistereitä (esim. epäsuorat hypyt, tai funktiopointterien kutsut) suoritetaan sitten ilmeisesti toisella haarautumisyksiköllä joka edelleen jakaa porttinsa yhden ALUn kanssa ja voi luke arvoja rekistereistä.
Zenissä/Zen2ssa oli erityisesti tuolla kokonaisluku-SIMD-puolella aika paljon (uusia harvoin käytettyjä) käskyjä, joiden toteutus oli melko hidas. Aika moni näistä käskyistä on nyt zen3ssa saanut selvän nopeutuksen, eikä enää häviä Intelin prossuille nopeudessa.
Selvin on PEXT/PDEP jonka toteutus oli aiemmin ilmeisesti täysin puhtaasti mikrokoodilla ja sillä oli Zen2lla 300 käskyn viive. Nyt tämä on pudonnut kolmeen kellojaksoon, 100-kertainen nopeutus viiveessä, ja suorituskaistassa vielä suurempi.
Yksi zen/zen2n akilleen kantapäistä oli gather eli SIMD-lataus jossa osoitekin on vektori, eli käsky joka suorittaa monta eri latausta yhdellä käskyllä ja muodostaa niistä vektorin. Sen avulla voidaan vektoroida SIMD-koodiksi looppeja, joitka tekevät muistihakuja muihinkin kuin peräkkäisiin osoitteisiin, eli se mahdollistaa SIMD-käsykantojen (AVX) hyödyntämisen useammin eli esim. 4 tai kahdeksan arvon laskemisen rinnakkain yhdellä käskyllä.
Gather on nyt nopeutunut selvästi ( 4 * 32b 19 => 15 kellojaksoa, 8 * 32b 23 => 19 kellojaksoa, 2?* 64b 18 => 13 kellojaksoa, 4 * 64b 19 => 15 kellojaksoa, mutta on edelleen selvästi hitaampi kuin Intelin prossuilla.
Full ISA performance dump: http://users.atw.hu/instlatx64/AuthenticAMD/AuthenticAMD0A20F10_K19_Vermeer_InstLatX64.txt
data-unfurl="true" data-result-id="103382" data-url="https://forum.beyond3d.com/posts/2171913/" data-host="forum.beyond3d.com" data-pending="false">
class="link link--external fauxBlockLink-blockLink"
target="_blank"
rel="nofollow noopener"
data-proxy-href="">
AMD: Zen 3 Announced [2020-10-08]
data-onerror="hide-parent"/>
forum.beyond3d.com
Vaikka kellojaksossa suoritettavien latausten maksimimäärä on noussut kahdesta kolmeen ja talletusten määrä yhdestä kahteen, L1-välimuistin kaistaa ei ole kasvatettu; 3 latausta kellojaksossa voidaan suorittaa ainoastaan mikäli ei ladata 256-bittisiä AVX-vektoreita, ja 2 talletusta voidaan tehdä ainostaan mikäli ei talleteta 256-bittisiä AVX-vektoreita.
Siitä en ole varma, että onko myös 128-bittisten vektorien latausmäärä rajoitettu kahteen ja tallennusmäärä yhteen, että kolme latausta voidaan suorittaa vain kokonaislukupuolelle, ja kaksi tallennusta voidaan suorittaa vain kokonaislukupuolelta, mutta saattaa olla näin. Tätä tukisi se, että liukuluku-/SIMD-puolella edelleen selvästi mainitaan yksi tallennusyksikö (joka on nyt saanut oman suoritusporttinsa ettei tallennus ole poissa yhteenlaskuilta)
"Skeduleri" kuulostaa kyllä niin rautakanki-anglismilta, että ennemmin näkisin ihan vaan "scheduler"ia käytettävän tekstissä
Isosti risuja spoilerista, joka oli laitettu jo tähän katsausartikkeliin. Vähäiseksi jää enää mielenkiinto lukea varsinaista testiartikkelia. ”Kuten Ryzen 9 5900X ja 5950X -testiartikkelistamme voi lukea, AMD on lunastanut yhtiön toimitusjohtaja Lisa Sun tekemät lupaukset pelisuorituskykykruunun viemisestä Inteliltä kasvattaen samalla johtoaan hyötyohjelmapuolella entisestään.”
Se voi kuulostaa siltä, mutta aika laajalti se on käytössä (kts Google ja ylläty ).
Toinen vaihtoehto olisi ollut vuorontaja.
Tämä on tarkoitettu pääasiassa tukiartikkeliksi itse testiartikkeleille, ei kyllä tullut ihan rehellisesti ollenkaan mieleen että se olisi "spoileri" tuolla lopussa vaikka voihan se tietenkin niinkin päin mennä, käyn vähän viilaamassa.
"Virallinen" suomennos on "vuorontaja" joka taas kuulostaa sen verran kömpelöltä että "skeduleri" on mielestäni oikein hyvä sana.
Hyvä artikkeli ja @hkultala :lta hyvät kommentit – en tajunnut tuota haarautumisyksikkö -asiaa artikkelista mutta kommenttisi auttoivat.
Gather-käsky lataa maksimissaan 64 bitin palikoita, joten niitä pystyisi L1D:ltä lataamaan jopa 3 kellojaksossa, ja rekistereihin kirjoituskaan ei tule pullonkaulaksi, koska kaikki kirjoitetaan lopuksi samaan rekisteriin.
Silti linjojen määrän lisääntyessä (2->4->8) käskyn viive lisääntyy aina yhdellä kellojaksolla/linjojen määrä, eli Zen3n gather lataa efektiivisesti vain yhden linjan kellojaksossa (sen alkuviiveen jälkeen)
Eli tässä gather-toteutuksessa voisi olla vielä aika paljon "löysiä" optimoitavaksi melko helpolla kun vaan lataisi useampaa linjaa rinnakkain. Jos pitäisi veikata asioita mitä zen4ssa parannetaan, tämä olisi listalla. Kolme ei-kahden potenssina voisi olla liikaa vaadittu mutta kahden linjan lataus kellojaksossa pitäisi olla helppo toteuttaa.
Tuon sitten tuossa Zen2 -> Zen3 -muutoksessa muuttui CCD:n sisäinen arkkitehtuuri (2 x 4-ytimistä CCX -> 1 x 8 -ydiminen CCX) ja vielä CCX:n sisäinen mikroarkkitehtuurikin. Sen sijaan IO-piiri on sama kuin Zen2:ssa (AMD on tämän vahvistanut), ja CCD:den ja IO-sirun sekä ulkoinen kommunikaatio (sekä PCIe gen 4) säilyi ennallaan.
Aina voi keskustella, kumpi oli suurempi arkkitehtuurillinen muutos (jotkut puhuvat erikseen arkkitehtuurista ja mikroarkkitehtuurista).
Jos AMD sanoo, että Zen2-> Zen3 oli suurempi niin kai pitää heitä uskoa (vaikka saattaa siinä vähän markkinointiakin olla mukana). Oman mielipiteeni sanoinkin tuossa alussa.
Kommentoi uutista tai artikkelia foorumilla (Kommentointi sivuston puolella toistakseksi pois käytöstä)
Lähetä palautetta / raportoi kirjoitusvirheestä