Front end
Kao i svaki superskalarni CPU i Zen poseduje pipeline. Stanja u pipeline-u su podeljena na dovlačenje (fetch) instrukcija, dekodiranje, izvršavanje, pristup memoriji i upis rezultata. Dakle, ovo je osnovni 5 stepeni pipeline koji je kod modernih procesora usitnjen u daleko veći broj stanja, minimum 10, a taj broj stanja u pipeline-u može da dostigne i cifru od 20-30. U teoriji procesori koji imaju duži pipeline mogu da postignu veće radne frekvencije, međutim produženje pipeline-a povećava i latencije u samom procesoru, te je za svako nepredviđeno grananje, penal onoliki broj procesorskih ciklusa koliko je dugačak pipeline. Na frekvenciju takođe utiče i broj paralelnih pipeline-a, odnosno broj instrukcija i mikrooperacija koje CPU može istovremeno da procesira. Zen sam po sebi ima ukupno 10 paralelnih izvršnih jedinica, što je poprilično široka mikroarhitektura. U poređenju sa ovim, Skylake i Haswell imaju ukupno 8 izvršnih portova. Da bi se „nahranio“ ovako širok CPU potreban je veoma dobro dizajniran front-end.
Prva novost u odnosu na Bulldozer/Piledriver arhitekture je trostepeni TLB – Translate Look Aside Buffer za instrukcijski keš. Ovi baferi su svojevrsne keš memorije za pamćenje memorijskih stranica, čime se značajno skraćuje traženje podataka u memoriji. L1 i L2 nisu bitno veći ili manji nego na prethodnim procesorima, a L0 i TLB je bez ikakvih ograničenja po pitanju asocijativnosti, sa tabelom od maksimalno 8 memorijskih strana i bez ograničenja po pitanju veličine memorijske strane za L0 i L1 instrukcijski TLB.
Da pojasnimo stvari: TLB keš (TLB – Translate Look Aside Buffer – memorija za keširanje memorijskih stranica) je organizovan u dva nivoa. Nulti nivo iznosi 8 pozicija, dok prvi nivo iznosi 64 pozicije, potpuno je asocijativan, kao i prvi. Ukoliko se tražena stranica ne nalazi ukeširana na L0 DTLB, traži se u prvom nivou, a ako nije ni u prvom nivou, onda se traži u drugom koji iznosi 512 lokacija. U poređenju sa Piledriver arhitekturom, broj L1 TLB-a je nešto manji, 64 vs 72 entry-ja, ali postoji L0 i L2 identične veličine, od 512 entry-ja, u ovom slučaju nepoznate asocijativnosti, najverovatnije četvorostruke, što bi trebalo da je više nego dovoljno. L1 instrukcijski keš je vraćen na veličinu koju je posedovao u vreme Athlona, Phenoma itd… Sada je 64KB, ali je asocijativnost povećana na četvorostruku, umesto dvostruke koliko je bila na svim AMD procesorima od 1999.
Prediktor grananja u kodu je odvojen od pipeline-a, slično kao i kod Bulldozer arhitekture. Veličina BTB tabela nije poznata izuzev da je moguće pamtiti dva grananja po svakom mestu u BTB tabeli, najverovatnije za dva treda kojima procesor može da upravlja. Novost u celoj priči je Op Cache, koji kešira već dekodirane mikrooperacije, koji je opet povezan sa branch predictorom, čime se smanjuje latencija, odnosno penal u slučaju nepredviđenog grananja. Ovakav keš postoji na Intel procesorima još od Sandy Bridge jezgra, ali ovde nije poznata njegova veličina. Osim ovoga, Op Cache funkcioniše odlično prilikom izvršavanja petlji, odnosno u loop kodu, čime se značajno štedi energija koja je potrebna za ponovno dekodiranje instrukcija.
Dekoder je u stanju da dekodira maksimalno 4 x86 instrukcije, što je dovoljno za izvršavanje dva solidna treda, odnosno jednog, ali efikasno izvršavanog. Stack engine, branch fusion, store to load forwarding su noviteti koji su odavno poznati kod Intelovih Core procesora i koji su jedan od razloga njihove efikasnosti. Zen-ov front end je u stanju da spoji instrukcije skoka (branch) sa spojivim instrukcijama u jednu operaciju, odnosno micro Op. Stack Engine Memfile poseduje tabelu, odnosno stek strukturu u kojoj se čuvaju memorijske operacije koje treba da se izvrše. Po prirodi stvari, upis ide uvek nakon čitanja, međutim pošto se ovde radi o Out Of Order procesorima, bitno je da se kod izvršava što efikasnije, pa je moguć upis u memoriju one varijable koja ne poseduje zavisnost od one koja treba da se pročita. Stack mašina ima zadatak da otkrije da li je upis koji je na steku zavisan od čitanja koje se nalazi pre njega. S obzirom da je stek LIFO struktura, zadnji koji je ušao prvi silazi, prema tome, zadnji upis se skida sa steka i stek se lista dalje dok se ne utvrdi zavisnost promenljive koja se čita.
Dodaj komentar