Nove vektorske instrukcije AVX
Uvođenje novih setova instrukcija svaki put nas podseti na vreme izlaska Pentium III Katmai jezgra, koji je bio zapravo ništa drugo nego Pentium II + SSE. Nakon izlaska PIII procesora pojavio se AMD K7 koji je predstavljao pravi proboj po pitanju performansi. Da li se istorija ponavlja i da li je Sandy Bridge zapravo Nehalem kome su samo dodate nove instrukcije? Najpre ćemo se pozabaviti samom prirodom novih instrukcija. Može se reći sa sigurnošću da su danas softverske kompanije daleko ažurnije u pisanju softvera koji podržavaju nove setove instrukcija, kao i u pisanju novih i naprednijih biblioteka koje koriste prednosti ovakvih ekstenzija. AVX je ništa drugo nego običan 256-bitni SIMD – Single Instruction Multiple Data set instrukcija. Registar je širine 256-bita, za razliku od 128-bita koliko je bila širina registara kod SSE setova instrukcija. AVX koristi naziv YMM0-YMM15 za nove 256-bitne registre. U AVX procesorima, SSE instrukcije koriste „nižih“ 128-bita za operacije.
Glavna prednost AVX seta instrukcija je što koristi sintaksu instrukcija sa 3 operanda. Primera radi SSE koristi standardnu 2-operand formu gde je npr. sabiranje u obliku a:=a+b. Sada je moguće koristiti ne-destruktivnu formu gde imamo c:=a+b, gde se čuva sadržaj source operanada. Ovakav oblik instrukcija i način rada smanjuje opterećenje na registre, ukoliko je potrebno sačuvati međurezultat u izračunavanju. Kod tradicionalnog SSE seta instrukcija za čuvanje međurezultata potreban je još jedan privremeni (temporary) registar. AVX u svojoj prvoj verziji ne podržava FMA koji će biti podržan od strane AMD-ovog Bulldozer procesora. FMA – Fused Multiply Add je instrukcija koja koristi istovremeno operacije sabiranja i množenja. Tako na primer FMA3 koji će biti podržan od strane budućih Intelovih procesora, tek od Haswell arhitekture, moći će da vrši operacije oblika A=A+BxC. FMA4 koji će biti podržan od strane AMD-a koristiće ne-destruktivnu formu ciljnog registra koja je oblika A=B+CxD.
Prema izjavama Intelovih zvaničnika FMA nije implementiran unutar SANDY BRIDGE arhitekture već je namenjen za buduće procesore, prvenstveno zbog toga što bi implementacija u postojeći dizajn Core arhitekture bila preskupa. Korišćenje FMA instrukcija zahteva specifičan dizajn FPU jedinice. Da nije neko rekao FMAC?
Pitanje koje se često postavljalo na raznim forumima je koliki „troughput“ ima Sandy Bridge pri korišćenju 256-bitnih AVX instrukcija. Intelova PR menadžerija tvrdi da je SANDY BRIDGE sposoban za čak dve 256-bitne AVX operacije + jedan 256-bitni Load. Ovo znači da je Sandy Bridge jezgro u stanju da izvrši do 8 DP – Double Precision operacija po ciklusu ili čak 16 SP operacija sa pokretnim zarezom. Kako je ovo moguće ako znamo da Sandy Bridge koristi identične datapath magistrale unutar izvršnog jezgra, ako ima dvostruki 128-bitni Load po ciklusu i jedan 128-bitni Store. U Intelu tvrde da je moguće tako što su „pozajmili“ dodatnih 128-bita interne magistrale od SSE ALU jedinica za rad sa celim brojevima. Na ovaj način moguće je izvršiti 256-bitnu AVX operaciju na svakom izvršnom portu, što teoretski daje mogućnost izvršenja 8 DP operacija po ciklusu. Ovo nije dovoljno da se ostvari kontinuiran protok podataka od 48-bajta podataka po ciklusu. Kako je ovo ostvareno? Za kontinuirano izvršavanje instrukcija u petlji koristi se µOp keš, koji može da sadrži do 1500 dekodiranih mikrooperacija. Ovo je ekvivalentno L0 kešu od nekih 6 KB, ako uzmemo u obzir da svaka operacija koristi oko 4 bajta. Ovime se štedi prvenstveno na energiji, jer dekoderi u front-end delu procesora ne dekodiraju instrukcije koje se iznova ponavljaju u programskoj petlji. Time je rešeno pitanje keširanja mikrooperacija bez povećanja fetch bandwidth-a koji je i dalje 16-bajta po ciklusu. Za razliku od Nehalem arhitekture, Sandy Bridge poseduje mogućnost dvostrukog 128-bitnog LOAD-a. Dotok podataka iz L1 Data keša 2×128-bita po ciklusu. Pored ovoga u odnosu na Nehalem, Sandy Bridge sada ima 2 AGU jedinice koje mogu da vrše adresne kalkulacije i za „load“ i za „store“ operacije.Ovo je neophodno da bi se ostvario planirani „troughput“. Kako je bandwidth AVX jedinica u SANDY BRIDGE jezgru 2×256-bita po ciklusu, sigurno se pitate na koji način SANDY BRIDGE uspeva da zaobiđe „usko grlo“ 2×128-bitnog LOAD-a. Na sreću dobar deo operacija u SIMD kodu su registar-registar operacije, pa je tako nekih 50% operacija memorijskog karaktera, pa je 2×128-bita dotoka podatak iz L1 Data cache-a sasvim dovoljno za kontinuirano izvršavanje. Postoji još jedan problem koji su rešili Intelovi inženjeri. Problem neporavnatog pristupa podacima iz L1 keša. Primera radi, ako imamo AVX vektor, tj. podatak dužine 256-bita, tj. 32 bajta, zbog keša koji može da isporuči podatak u dva dela, 2×16 bajta (tj. 2×128-bita). Oba 128-bitna porta su opremljena algoritmom koji se efikasno snalazi sa neporavnatim memorijskim pristupima. Dva 128-bitna pristupa kešu se dešavaju u jednom ciklusu, i istovremeno kompletiraju jednu 256-bitnu mikrooperaciju. Svaki pod portova u L1D kešu učitava nižih i viših 128-bita. U odnosu na Nehalem arhitekturu, L1-D cache bandwidth je dupliran, kao i broj FP operacija po ciklusu. Ovo naravno važi samo ukoliko se koriste nove AVX 256-bitne instrukcije. Sandy Bridge može da izvrši jednak broj instrukcija kao i Nehalem, ali pri korišćenju 256-bitnih vektorskih operacija, radi sa većim brojem podataka po instrukciji.(SIMD Single Instruction Multiple Data)
Troughput standardnih SSE 128-bitnih operacija je identičan kao i na Nehalem arhitekturi. AVX koristi SIMD ALU jedinice + SIMD FP SSE jedinice za aritmetičke i bitovske operacije. Širina portova, odnosno data magistrala na RS – Reservation Station (Scheduleru) je najverovatnije povećana na 256-bita, da bi se u jednom ciklusu „nahranile“ izvršne jedinice koje vrše obradu nad vektorima dužine 32-bajta u jednom ciklusu. Ostaje nepoznato koliko mikrooperacija koriste AVX ekstenzije. Ukoliko SIMD ALU i SIMD FPU jedinice u SANDY BRIDGE jezgru rade kao jedna jedinica, onda je najverovatnije potrebna jedna mikrooperacija. Ako rade kao dva zasebna bloka, onda su potrebne 2 mikrooperacije. SANDY BRIDGE je u stanju da u kontinuitetu isporuči do 4 mikrooperacije u ciklusu, što je dovoljno za izvršavanje do 2 AVX ekstenzije po ciklusu, odnosno do 8DP operacija. Pretpostavka je da su Intelovi inženjeri iskoristili registre i data magistralu od SIMD ALU jedinica za FP SIMD kalkulacije, čime nisu bitno povećali površinu jezgra, a dobili su na upotrebljivosti. S’ obzirom da SANDY BRIDGE jezgro ne sadrži FMAC FPU jedinicu, nije moguće izvršiti istovremeno dve iste operacije. Moguće je izvršiti npr. jednu operaciju vektorskog množenja i jednu shuffle operaciju. Ili jednu operaciju sabiranja i jednu množenja.
Register File u ovom slučaju Physical Register File PRF koji je novost kod Sandy Bridge arhitekture, koristi 256-bitne lokacije za smeštanje vrednosti o statusu registara i stanju instrukcija koje se izvršavaju, čime je omogućeno nesmetano Out Of Order izvršavanje AVX vektorskih operacija. PRF je novitet u dizajnu mikroarhitektura i objasnićemo detaljnije u daljem tekstu kako on funkcioniše. Ovakav pristup je korišćen još kod Netburst arhitekture.
Dodaj komentar