Keš arhitektura
Zen sadrži i dve Load/Store jedinice, što je u principu više nego dovoljno, a dubina LS buffer-a je 72 LS operacije, što je jednako Skylake-u i Haswell-u. Nije poznato koliko Store operacija ovaj buffer može da buffer-uje, ali kod Haswell-a je taj broj dosta manji od 72 i iznosi 42, dok je kod Skylake-a 56. Moguće su čak tri memorijske operacije iako postoje samo dve AGU jedinice, ukupno 2×128-bit LOAD i 1×128-bit STORE. Ovde je Zen dosta ograničen u odnosu na Haswell, koji može da odradi 2×256-bit LOAD i 1×256-bit STORE, pa je Zen ovde na nivou Ivy Bridge-a. Ovo u prevodu znači da bi Haswell mogao da učita podatke za dve 256-bitne vektorske instrukcije u jednom ciklusu i da ih izvrši, dok je Zen tu ograničen na jednu. To ne znači da Zen ne može paralelno da izvrši dve 256-bitne instrukcije, već da je potrebno dva ciklusa za učitavanje dva 256-bitna vektora iz L1 data keša, umesto jednog, iako dekoderi mogu da dekodiraju u jednom ciklusu dve 256-bitne AVX ili FMA instrukcije, koje se razbijaju u 4 mikro OP-a. Takođe je potrebno i 2 ciklusa u pipeline-u da bi se upisao 256-bitni rezultat iz registara u L1 keš.
Što se tiče Load/Store jedinica i upisa u L1-D cache, slično kao i kod Haswell arhitekture, imamo odvojene L/S buffer-e, ali samo dve AGU jedinice. Nasuprot ovome Haswell koristi tri AGU – adress generation jedinice, od kojih su dve za LOAD/STORE, dok je treća samo STORE i one računaju memorijske adrese na koje će se podaci upisivati ili čitati. Takođe Haswell koristi odvojenu Store Data jedinicu za upis podataka u L1D keš, što je ubedljivo najkompleksniji memorijski podsistem, čemu Haswell i Skylake najverovatnije delom duguju dobre performanse i visok IPC. Haswell može potpuno OoO (Out Of Order) da izvrši nezavisno tri memorijske operacije po ciklusu u bilo kakvoj situaciji, 2xLOAD i 1xSTORE. AMD je specifikovao da Zen takođe može da u ciklusu izvrši 2×128-bit LOAD i 1×128-bit STORE, ali nije poznato pod kojim uslovima. Ovo je i dalje usko grlo i Zen je ovde na nivou Sandy Bridge-a, ali uz dosta veći broj FLOPS-a po ciklusu, što znači da izvršni endžin Zen mikroarhitekture može biti u problemu zbog malog keš protoka. Osim toga, Zen ne poseduje zaseban „Store“ pipe, kao Sandy i Haswell, već AGU kada izgeneriše adrese, tek onda može da se računa na L/S operacije. Zen poseduje odvojene L/S bafere, koji nezavisno vrše L/S operacije.
L1 Data keš je znatno unapređen u odnosu na Bulldozer derivate, iznosi 32KB i ima osmostruku asocijativnost, baš kao i kod Intel Core i7 procesora.
Nova mikroarhitektura eliminiše „tradeoff“ koji je postojao kod Bulldozer-a. L1 Data keš više nije „write trough“, nego je „write back“, kao što je bio kod K7-K10, ali i kod Intelovih procesora. Write Trough je prilikom upisa morao da izbaci keš liniju iz L1 u L2 i iz L2 u L3, iz L3 u RAM itd… da bi došlo do upisa. Osim ovoga, L1D i L2 keš su inkluzivni, te je u L2 uvek sadržana kopija L1D keša, čime se značajno smanjuje latencija prilikom pristupa iz L1 u L2. Ekskluzivna keš arhitektura datira još od Athlon Thunderbird-a i tada je imala smisla jer je L2 bio relativno malog kapaciteta – 256KB, a inkluzija 128K L1 keša u L2 bi značila da je L2 skraćen za polovinu za svoj kapacitet. Postojanje većeg L2 keša i L3 keša dobrim delom isključuje potrebu za veličinom keša i „hit rate“ je na nivou ekskluzivne keš arhitekture, ako ne i bolji, a latencija značajno manja jer se dovlači značajno manja količina podataka u slučaju L1 promašaja. Najverovatnije je u pitanju MOESI keš protokol, tj. Modified Exclusive Shared Invalid, gde je se keš linija nalazi u kešu i ona je modifikovana u odnosu na originalan sadržaj u L1 kešu, vrednstima iz memorije ili L3 keša.
Modified – Keš zahteva upis podatka u memoriju u budućem vremenu pre dozvoljenog bilo kojeg sledećeg čitanja (nevalidnog) memorijskog stanja iz memorije. Write Back protokol menja keš liniju u „shared“ stanje.
Exclusive – Keš linija koja je prisutna samo u L1 kešu je čista, nije u nju upisano ništa. Ona može biti prebačena u Shared stanje ili Modified po potrebi, kada se u nju upisuje. To znači da se u L2 kešu nalaze kopije onih keš linija koje su upisane u L1 (koje nisu prazne).
Shared – Ovo stanje keš linije nam govori da ona može biti pohranjena i u drugim nivoima keša. Na rimer u L2 kešu i da je ona čista, tj. da se slaže sa realnim stanjem radnoj memoriji. Keš linija može biti prebačena u invalidno stanje u bilo kojem trenutku.
Invalid – Keš linija je invalidna (ne poklapa se sa bilo kojim stanjem u RAM-u), prazna i/ili nekorišćena.
Za razliku od prethodnih arhitektura koje koriste MOESI protokol, ova keš arhitektura ne zahteva „broadcast“ na ostale nivoe keša koji dele istu keš liniju. Konkretna keš memorija treba da vrši „snoop“ saobraćaj ka ostalim nivoima keša da bi se izvršio „update“ keš linija, što smanjuje efektivan protok i povećava latenciju.
Data TLB, odnosno Translate Look Aside buffer-i za podatke su za prvi nivo odnosno L1 jednaki kao na Piledriver arhitekturi, dok su drugostepeni povećani sa 1K na 1.5K pozicija, što nije neki radikalni pomak, ali ovaj podatak se ne razlikuje drastično ni na Intel arhitekturama i kod Haswell-a on iznosi 64 pozicije za L1 DTLB, odsnosno 1K za L2 DTLB, tako da je ZEN ovde u blagoj prednosti u odnosu na Haswell.
L2 Keš je 512KB, inkluzivni, prefetcheri su optimizovani. L3 je deljen ka svim jezgrima, dok je L2 deljen na dva SMT treda. L3 arhitektura je ekskluzivna, četiri jezgra su konektovana na L3 putem L3 kontrolera, asocijativnost L3 keša je 16-tostruka, što je manje nego na prethodnim procesorima, ali je latencija i bandwidth značajno snižena. Keš slajsovi su konektovani tako da svako jezgro ima pristup bilo kojem slajsu sa jednakom prosečnom latencijom.
Dodaj komentar