| Hardver | Procesori | AMD FX procesori
Procesori

AMD FX procesori

 

FlexFP – nova FPU jedinica

 

FlexFP je deljen između dva integer bloka, koji „rukuju“ load/store operacijama, poseduju svoj thread monitoring i koji upravljaju svim aritmetičko logičkim i adresnim operacijama. Kao i kod K10 arhitekture, Bulldozer je organizovan po koprocesorskom principu: „integer cluster + floating point cluster“.

FPU se sastoji od dve 128-bitne FMAC FPU jedinice koje mogu da izvrše operacije množenja i sabiranja sa realnim brojevima. Pored toga tu su i još dve jedinice za rad sa pakovanim celobrojnim vektorima (MMX). FPU jedinica koristi PRF- Physical Register File, koji predstavlja novi trend u arhitekturama mikroprocesora. Zajednički scheduler koristi se za oba threada. FPU odatle bira koju će instrukciju da izvrši nezavisno od toga iz kojeg thread-a je potekla, što je i glavni princip deljenog resursa.

 

Zambezi_17

 

Nasuprot ovome Intelova Core arhitektura, kao i svi P6 derivati, poseduju jedan zajednički scheduler za integer i FP operacije, što znači da se sve instrukcije i integer i floating point raspoređuju iz zajedničkog „instruction pool-a“, preko 6 nezavisnih izvršnih portova. Koliko je ovo dobro, toliko je i loše. Jedinice na portovima kod Core arhitekture rade na principu steka i moguće je na jednom izvršnom portu koristiti samo jednu izvršnu jedinicu, a ima ih više.

Organizacija izvršnih jedinica je uređena tako što FMAC „pipe“ 0 upravlja svim FP operacijama izuzev shuffle vektorskih instrukcija, koje su dosta česte. Za shuffle operacije i operacije pomeranja sadržaja u registrima zadužena je FMAC pipe 1 XBAR jedinica, dok je za rad sa celobrojnim SIMD operacijama (MMX, t.j. integer SSE), zaduzena MAL pipe 2 i MAL pipe 3.

FlexFP može da nezavisno izvršava integer i floating point SIMD operacije, kao i bilo koju od čestih operacija, FADD i FMUL na bilo kojoj FMAC jedinici. Na Phenomu je bilo moguće izvršiti integer SIMD operaciju na FPU bloku i to sabiranje na FADD jedinici, a množenje na FMUL jedinici. Kod Bulldozer-a MAL pipe 3, t.j. poslednja integer SIMD izvršna jedinica se koristi i za FSTORE operacije, a od K10 je nasleđen superforward-ing, čime se direktno prosleđuje mikrooperacija odgovarajućoj FMAC ili MAL jedinici. S’ druge strane, najverovatnije da je AMD i ovde upotrebio unifikovani schedluer za FMAC operacije, pa je moguće odatle bilo koji slobodan pipeline „nahraniti“ odgovarajućom mikrooperacijom. U praksi gledano, Bulldozer FMAC je veoma moćna FPU jedinica sa praktično dvostruko većim izvršnim kapacitetima u odnosu na K10. FlexFP je organizovan kao dva 128-bitna bloka, ali može biti spojen u jedan 256-bitni, sa troughput-om AVX ADD i MUL operacija jednakim onom koji poseduje Sandy Bridge arhitektura. Što se tiče sirovih performansi, tj. FLOPS Linpack testa, sa AVX instrukcijama BD modul iako ima troughput od 1 256-bitne operacije, FlexFP može da vrati samo jednu 256-bitnu FP AVX operaciju – 256-bit ADD ili 256-bit MUL po ciklusu, dok Sandy može da izvrši jednu 256-bitnu ADD i jednu 256-bitnu MUL, što je usko grlo ukoliko se ne koriste FMA4 instrukcije. Ovo se naročito primećuje u radu sa matričnim proračunima. Uvek fali taj dodatni FPU pipeline za 256-bitne AVX operacije. Generalno gledano, Buldožeru AVX-256 nije jača strana.

 

AMD_Bulldozer_13_V

 

Opet, ukoliko se koristi specifična FMA4 optimizacija na kojoj AMD radi i koja je podržana od strane OpenSource kompajlera, BD modul može da izvrši daleko fleksibilnije, jednom instrukcijom 256-bit FADD i FMUL jer je oblik FMA4 operacija: A=B+CxD; uz daleko preciznije izračunavanje. FMA operacije za razliku od AVX imaju veću preciznost prilikom računanja operacija kao što su skalarni proizvod, množenje matrica, hornerovo pravilo, njutnove metode za interpolaciju itd…Zbog ovoga je Bulldozer mikroarhitektura, osim sirovog broja FLOPS-a daleko bolje rešenje za konstruktore superračunara. U HPC primeni svakako neće biti problem iskoristiti potencijal FMA – Fused Multiply Accomulate instrukcija.

S’ druge strane, AMD je možda mogao da uredi da se 256-bitne AVX instrukcije dekodiraju tako da se izvršavanje VADDPD preklapa sa izvršavanjem VMULPD, ali to ipak nije urađeno.

Standardno, Bulldozer ne može da preklopi ove dve operacije vektorskog sabiranja i množenja, zato što ovo zahteva spajanje određenih množenja sa određenim sabiranjima, što nije dozvoljeno od strane IEEE754 standarda, pa je za 8 DP operacija po ciklusu neophodan FMA.

S’ druge strane MXCSR registar već sadrži dva fleg-a sa istom namenom, flush-underflow-to-zero i denormals-as-input-are-zero, koji mogu biti postavljeni da dozvole ovakvo ponašanje zarad povećanja AVX performansi, ali je ovo zabranjeno standardom u kojem se vrši Floating Point zapis. Ova dva flega su mnogo opasnija nego fleg koji bi dozvolio automatsko spajanje MUL i ADD operacija. Ignorisanje underflow-a (podkoračenja preciznosti zapisa) može voditi u gubitak preciznosti izračunavanja. Različit način zaokruživanja izveden uz pomoć FMA operacije u odnosu na množenje, a zatim sabiranje, obično povećava preciznost izračunavanja, a retko je degradira. Nije nemoguće da će buduće unapređenije verzije Bulldozer modula imati mogućnost da izvrše zajedno VADDPD i VMULPD 256-bitne AVX instrukcije. Do tada pun troughput FleX FP moguće je iskoristiti uz pomoć optimizacije na nivou kompajlerske biblioteke. Ovo u principu neće uticati značajno na FP performanse, osim u HPC primeni, ali verujemo da će korišćenje FMA instrukcija preuzeti primat, naročito kada u narednim godinama i Intel uvede ovaj set instrukcija. FMA od strane Intela je najavljen tek za Haswell mikroarhitekturu i ova arhitektura će podržavati poseban FMA3 set instrukcija. Piledriver će takođe doneti podršku za FMA3.

 

Ivan Vujić

Software, storage, network etc editor @ AXE
Database migration @ RC ETF

Dodaj komentar

Kliknite ovde da biste poslali komentar