DDR5:ssa muistiväylän leveys on puolitettu. Samalla purskeen oletuspituus on kaksinkertaistettu. Kun siirtoviive ensimmäiseen siirtoon on pysynyt suunnilleen samana (fysiikan lakeja ei voi sanottavasti muuttaa),
Mistähän fysiikan laeista nyt oikein puhut?
Argumentointi termillä "fysiikan lait" kertomatta mitä lakeja tarkkaanottaen tarkoittaa yleensä tarkoittaa siitä, että on pihalla niistä fysiikan laesta ja mutuilee.
Jos ymmärtää niitä fysiikan lakeja, sanoo tarkkaan mistä fysiikan laista on kyse.
Kaikki mitä tässä fyysisessä maailmassa tapahtuu "fysiikan lakien mukaan", mutta siihen viiveeseen vaikuttaa ziljoona asiaa systeemin arkkitehtuurissa, ja ne muuttuu sen mukaan millainen se arkkitehtuuri on, vaikka fysiikan lait ovat samat.
saadaan tuplapurskeella ja selvästi nopeammalla kellolla siirrettyä puolella väyläleveydellä sama datamäärä kuin aikaisemmin täydellä.
Tämän sanoin jo edellisessä viestissäni, jos olisit malttanut lukea sen loppuun asti
Ja alkuperäisessä viestissäsi et tätä tajunnut, vaan väitit että se tulee eri ajassa, mikä ei todellakaan pidä paikkaansa.
MOS6510 sanoi:
DDR5-muistien latenssi siirron käynnistymiseen on suunnilleen samaa tasoa kuin DDR4-muisteilla. Kuitenkin prosessorin kannalta latenssi on se missä ajassa koko purske on siirtynyt välimuistiin ja selvästi nopeamman siirtonopeuden vuoksi koko purskeen latenssi on selvästi pienempi.
Tämä ei päde edes silloin kun DDR5 käy tuplasti suuremmalla data ratella, koska yksittäinen siirto joka tulee yhdestä kanavasta tulee tismalleen samassa ajassa kuin DDR4sta joka toimii tuplasti pienemmällä data ratella.
Sen sijaan niitä siirtoja voidaan tehdä tuplasti suurempi määrä rinnakkain.
Mutta yksinkertaistettuna tuplakello eliminoi latenssia (koko siirron näkökulmasta katsottuna).
EI eliminoi. Yksittäiseen siirtoon kuuluva aika on
tismalleen sama koska väylän leveys on puolitettu.
Yksittäisen siirron pituus on CPUlla käytännössä aina yksi välimuistilinja ja
koska DDR5 on tuplannut efektiivisen minimipurskeen koon, on sen väylä pitänyt kaventaa jotta yleisin 64-bittinen välimuistilinja voidaan siirtää järkevästi.
Tuplakello eliminoisi latenssia ainoastaan, mikäli sen voisi tehdä minimipursketta pidentämättä.
Tämä on käytännössä toki teoreettista, kun se väylä on puolitettu ja tällaista 64 bitin leveydellä tapahtuvaa tuplapituista pursketta ei käytännössä ole olemassa. Jos olisi, tulisi hyöty helpommin vertailtavissa DDR4:een ja latenssiin tuleva hyöty näkyisi paperilla paremmin.
Nyt puhuttiin todellisista tietokoneista todellisilla muistipiireillä ja todellisilla muistiohjaimilla. Se mitä on saavutettavissa hypoteettisilla prosessoreilla olemattomilla välimuistilinjan pituuksilla muistikonfiguraatioilla joita ei ole olemassa on täysin irrelevanttia.
Ja sitten jos ruvetaan puhumaan niistä hypoteetisista tapauksista joissa siirrettäisiin 128-tavuisia välimuistilinja niin sitten DDR4lla kannattaisi muisti organisoida siten että välimuistilinja osuu kahteen kanavaan ja käyttää kahta kanavaa rinnakkain ja saataisiin tällä
taas edelleen tismalleen sama siirtoaika.
Mutta: Käytännössä DDR5 ei aluksi käy tuplasti suuremmalla kellotaajuudella kuin DDR4, jolloin sen yksittäisen välimuistilinjan siirtoaika on
hitaampi kuin DDR4lla.
DDR5 on tehty erityisesti palvelemaan yhä lisääntyviä ydinmääriä. Kun siirrettävän datan määrä saadaan samalla pinnimäärällä (jopa) tuplattua, voidaan samalla muistiväylän leveydellä tunkea prosessoriin taas selvästi enemmän ytimiä.
Tosin ytimet eivät tosin kuluta muistikaistaa, vaan se softa, jota niillä ajetaan.
Ja se, paljonko softa tarvii kaistaa minkäkinkokoiselle muistialueelle vaihtelee
erittäin paljon eri softien välillä.
Jos softan efektiivinen working set on pieni niin se ajautuu melkein kokonaan kakuista ja muistikaistaa ei tarvita kuin laskennan alussa ja lopussa.
Mutta joo, useammalla ytimellä toki softalta poistuu muita pullonkauloja siten että softalla on usein edellytyksiä tehdä myös enemmän (keskusmuistiin asti meneviä) muistiaccesseja aikayksikköä kohden.
Tämän olen tuonut täällä viimeisen vuoden aikana useammassa postauksessa eri muodoissa esille jo useammankin kerran.
PS: Sanot: "DRAM-muistien kokonaisviive on monien kymmenien nanosekuntien luokkaa, mutta kokonaisen välimuistilinjan (64B) siirtoon kuluva aika on nykyisillä muistien nopeuksilla (3200 MHz data-rate) yhdelläkin kanavalla n. 2.5 nanosekunnin luokkaa."
DDR4-3200-muistin CAS-latenssilla 14 on viive ensimmäiseen siirtoon hieman alle 9ns, ei "kymmeniä". 1.25 ns on jo merkittävä parannus näillä nykyisillä muisteilla.
Ensinnäkin: Voisitko opetella lukemaan?
Puhuin
kokonaisviiveestä koko tiedonsiirrolle, en yhdestä osaviiveestä joka on hyvin pieni osa kokonaisviiveestä.
CAS-viive on viive muistiohjaimen ja muistipiirin välillä
siinä optimaalisessa tilanteessa että muistista on jo valittuna aktiivisesi oikea bankki ja oikea rivi on jo sisäisesti ladatttu muistipiirin puskureihin. Se ei sisällä kaikkia niitä viiveitä mitä tapahtuu ytimen ja muistiohjaimen välillä kumpaankaan suuntaan, ja tilanteessa jossa pitää alkaa vaihtamaan aktiivista bankkia tai latailemaan eri riviä muistin puskureihin ja näistä tulee aika paljon lisäviivettä.
Toisekseen: Ei taida olla paljoa CAS14@3200 MHz data rate -muisteja markkinoilla.
ps. kannattaa myös katsoa millaisia CAS-viiveitä JEDEC on speksannut niille DDR5lle ja verrata niitä tuohon yllä mainitsemaasi DDR4een:
www.anandtech.com
Eli nopeimman JEDECin speksaaman DDR5n CAS-viive onkin 13.75ns, ja jos mennään tuohon 6400-nopeuteen mihin kaikki laskusi perustat, nopein JEDEin speksaama viive on 46 kellojaksoa eli 14.38ns.
Eli siis, mikäli yllä väittämiäsi 14 kellojakson CAS-viiveen omaavia DDR4-muisteja on olemassa, niin todellinen optimitilanne muistiohjaimen ja muistin välillä lienee:
DDR4lla 8.75ns CAS-viive + 2.5 ns siirtoaika, yht 11.5ns.
DDR5lla 14.38ns CAS-viive + 2.5ns siirtoaika, yht 16.88ns.
Eli siis yhden välimuistilinjan siirtoaika DDR5-6400lla onkion selvästi hitaampi kuin sinun esimerkkinä heittämälläsi DDR4lla.
Jos taas otetaan molempien viivet samasta paikasta, päästään lukuihin
DDR4 13.75ns + 2.5ns siirtoika, yht 16.25ns
DDR5 14.38ns + 2.5ns siirtoaika, yht 16.88ns.
Edelleen DDR4 nopeampi.
Jos taas mietitään sitä todellista tilannetta DDR5n alkuaikoina, eli että DDR5 ei käy tuplasti suuremmalla vaan vain 1.5x suuremmalla väyläkellolla, saadaan tilanne:
DDR4 13.75ns + 2.5ns siirtoaika, yht 16.25ns vs
DDR5 14.17ns + 3.33ns siirtoaika, yht 17.5ns
Kaikissa skenaariossa siis viive pienempi DDR4lla.
Mutta kaikissa tilanteissa efektiivinen kokonaismuistiviive ytimelle asti on kuitenkin kymmeniä nanosekuntenteja enemmän, mm. koska muistiaccessia tyypillisesti aletaan tehdä vasta kun on selvinnyt, että haluttua dataa ei löydy L3-kakusta. Ja sitten vielä viiveet L3-ohjaimelta muistiohjaimelle, ja toisaalta kaikki viiveet takaisin muistiohjaimelta välimuistien läpi ytimelle asti datan saapuessa muistista.
DDR5n viive on DDR4sta pienempi vain tilanteissa, joissa halutaan tehdä montaa yhtäaikaista DRAM-accessia(eli on monta yhtäaikaista viimeisen tason välimuistihutia, tai monta yhtäaikaista prefetchiä, tai näiden yhdistelmä), ja suuremman kanavamäärän takia näitä voidaan tehdä enemmän rinnakkain, jolloin DDR4lla joudutaan odottelemaan kanavan vapautumista, DDR5lla ei jouduta tai odotusaika on lyhempi koska jono/kanava on lyhempi.