Izvršni endžin
Ako bacimo pogled na broj izvršnih jedinica koje mogu paralelno da operišu sa celim brojevima i pokretnim zarezom, videćemo da je Zen do sada „najširi“ x86 CPU. „Količina“ hardvera koju sadrži ovo jezgro je veća nego količina hardvera koju sadrži jedan Piledriver modul sa dva jezgra. Sa po četiri ALU jedinice, raspoložive za jedan ili dva treda i dve AGU jedinice, ovaj procesor je prava zver, slična Haswell-u ili Skylake-u. Za razliku od Haswell-a, Zen koristi odvojene FP i INT blokove, kao i do sada što je bila praksa. Broj instrukcija koje može da odjednom „otpusti“ na obradu je čak 10, dok je kod Haswell-a taj broj 8. Organizacija je totalno drugačija kod AMD-a. Svaka izvršna jedinica ima po jedan „port“ kojim je povezana sa scheduler-om, koji predstavlja svojevrsni bafer instrukcija koje treba da se izvrše. Kod Intela je to rešeno što je na svaki od izvršnih portova „naređano“ nekoliko izvršnih jedinica, po principu steka. Izvršavanje preko datog porta je moguće samo na jednoj izvršnoj jedinici istovremeno. Tako na primer kod Intela imamo na portu 0 ALU, 256-bitnu vektorsku integer i 256-bitnu FMA, odnosno FADD. To znači kada se mikrooperacija šalje na port nula, u tom trenutku sve ostale jedinice čekaju da se port oslobodi i nije mnoguće istovremeno koristiti ALU0 i FADD. Srećom, tu je još 6 izvršnih portova, a veliki broj instrukcija u „letu“ omogućuje da se instrukcija izvrši naknadno, kada je port „oslobođen“.
Zen ima 10 potpuno nezavisnih portova, 4 ALU, 2 AGU i 4 FPU. AMD sa Zen arhitekturom poseduje jednak broj instrukcija u letu kao Haswell, čak 192 za integer rename, odnosno ROB (Reorder Buffer), PRF (Physical Register File) sadrži 168 registara za integer, takođe jednako Haswell-u, ali manje od Skylake-a i 160 registara za PRF za FP instrukcije, što je marginalno manje nego za Skylake i Haswell koji poseduju 168.
Kada je u pitanju OoO izvršavanje, Zen bi trebalo da bude negde na nivou Haswell-a u single thread-u, na istom kloku, ali IPC ne zavisi isključivo od ovih parametara, već i od rada sa keš memorijom, od hendlovanja load/store operacija. Kada je u pitanju rad sa celim brojevima, perormanse Zen jezgra bi mogle biti vrlo blizu Haswell-u ili Skylake-u, naročito ako se uzme u obzir da je povećanje broja instrukcija u letu na Skylake-u donelo vrlo malo poboljšanja u odnosu na Haswell. Ovde bi mogli da računamo na 0-10% u odnosu na Skylake na istom kloku u single threadu. Physical Register File je za FPU identične veličine kao i na Bulldozer i Piledriver modulima, dok je za INT blok znatno povećan, konkretno Bulldozer poseduje 96-entry PRF, kao i Piledriver, dok je taj buffer kod Zen-a povećan na 168. Razlog ovome je i SMT po jezgru, da bi uspešno hendlovao dva treda, neophodna je solidna dubina register file-a i veliki broj instrukcija u letu. Intel u svakoj novoj generaciji povećava ovaj „instrukcijski prozor“, baš da bi povećao efikasnost HyperThreading-a, odnosno „throughput“.
FP pipeline-a ima ukupno četiri i to 128-bitna. 2x FADD i 2x FMUL. Izvršavanje 256-bitnih AVX i FMA instrukcija može da rezultuje povećanom latencijom. Za razliku od ovoga Haswell koristi 2×256 bitnu FMA + 1 x 256b shuffle. Ako posmatramo throughput, ove četiri FP jedinice bi mogle da rade kao 2×256 bit FMA, što je ekvivalentno Haswell-ovim FP jedinicama. Zen će koristiti ukupno 4 mikrooperacije za 2×256-bit FMA, dok Haswell i Skylake koriste dve. Međutim, Zen može da dekodira do 6 mikrooperacija, dok Haswell može samo 4. Interne putanje su šire po ovom pitanju u Zen mikroarhitekturi. Četiri dekodera mogu da dispatch-uju po 2 mikroopa za FMA3 instrukcije i još dva za single OP instrukcije, čime je obezbeđeno više nego dovoljno decoding bandwidth-a od strane front-enda, prema tome, Zen može paralelno da izvrši 2×256-bit FMA3 i ima po jezgru jednak broj DP FLOPS-a kao Haswell ili Skylake, a dvostruko veći nego Piledriver.
Dvostruki dispatch donekle povećava latenciju ovih instrukcija, što nije prednost, ali sa druge strane, FP jedinica je fleksibilna, te može da radi i kao dve odvojene FP jedinice sa po dva FP bloka, što bi u SMT režimu Zen-u davalo znaćajniju prednost u odnosu na Haswell, naročito kada se radi o izvršavanju običnih SSE instrukcija, koje su podrazumevane u 64-bitnom režimu, kod 64-bitnih aplikacija. Zen može da izvrši 2x više SSE instrukcija nego Haswell, što bi u SMT režimu bi trebalo da mu omogući značajnu prednost.
Podržana su dva grananja po ciklusu, što je korisno za SMT, ali je isto tako korisno i za single thread izvršavanje. Ono što je zanimljivo je da AMD kod integer jedinica ponovo koristi separatni „scheduler“, kao što je to bio slučaj od prvog K7 pa sve do K10. Piledriver je koristio unifikovani scheduler za 4 izvršne jedinice, 2xALU i 2xAGU, dok Zen koristi 6 odvojenih schedulera dubine 14 mikrooperacija, 4x za ALU i 2x za AGU. Šest mikrooperacija se šalje na odvojene scheduler-e paralelno, gde se u svakom scheduler-u formira niz (queue) mikrooperacija, koje se redom izvršavaju na već određenoj ALU ili AGU.
Dodaj komentar