Details und Analyse der Zen-Architektur nach der Hot-Chips-Konferenz

Artikel-Index:

Die Fetch-Einheit im Detail

Um die bereits gezeig짯ten Res짯sour짯cen f체r Aus짯f체h짯rung und Daten짯hal짯tung nicht ver짯hun짯gern zu las짯sen, hat AMD auch das soge짯nann짯te Exe짯cu짯ti짯on Front End, also die Befehls짯ver짯sor짯gung, gegen짯체ber Excava짯tor ausgebaut.

Das beginnt mit in drei Ebe짯nen vor짯han짯de짯nen gro짯횩en Adress짯체ber짯set짯zungs-Spick짯zet짯teln (Trans짯la짯ti짯on Loo짯ka짯s짯i짯de Buf짯fers oder TLBs), die sowohl schnell als auch in die짯ser Kom짯bi짯na짯ti짯on ener짯gie짯spa짯rend sind. Dort wer짯den ein짯mal die 횥ber짯set짯zun짯gen von vir짯tu짯el짯len in phy짯si짯ka짯li짯sche Adres짯sen von Spei짯cher짯bl철짯cken mit Pro짯gramm짯code f체r den Schnell짯zu짯griff vor짯ge짯hal짯ten. Treue Leser wer짯den sich an die TLB-Pro짯ble짯me der ers짯ten Bull짯do짯zer짯ver짯si짯on und deren Ver짯bes짯se짯run짯gen ab Vis짯he짯ra erin짯nern.

Eben짯so erw채h짯nens짯wert ist der Hash Per짯cep짯tron Pre짯dic짯tor, also eine Sprung짯vor짯her짯sa짯ge-Ein짯heit, die mit Hil짯fe eines neu짯ro짯na짯len Net짯zes das Sprung짯ver짯hal짯ten im aus짯ge짯f체hr짯ten Pro짯gramm짯code lernt und vor짯her짯sagt. Das hat짯ten auch schon die Cat-Ker짯ne und sp채짯te짯re Ker짯ne der Bull짯do짯zer-Rei짯he. Bei Zen wird gibt es jedoch die Neue짯rung, dass das mit Hash짯es ver짯kn체pft wird, um die Leis짯tung noch zu stei짯gern. Dabei bestimmt nicht allein die aktu짯el짯le Posi짯ti짯on im Pro짯gramm짯code, wel짯ches Per짯cep짯tron zust채n짯dig ist, son짯dern es wird aus der Adres짯se und deren bis짯he짯ri짯gen Sprung짯his짯to짯rie ein Hash berech짯net. Das erh철ht die Tref짯fer짯quo짯te nochmals.

Der 32 Ein짯tr채짯ge gro짯횩e Return Stack Puf짯fer ist wich짯tig f체r die immer tie짯fer ver짯schach짯tel짯ten Auf짯ru짯fe heu짯ti짯ger Soft짯ware und Betriebs짯sys짯te짯me. Das Indi짯rect Tar짯get Array unter짯st체tzt dage짯gen z. B. bei vir짯tu짯el짯len Funk짯ti짯ons짯auf짯ru짯fen oder Sprung짯ta짯bel짯len in Switch-Case-Anwei짯sun짯gen (f체r die Pro짯gram짯mie짯rer unter uns).

Der mit 64 KiB (4몏egig) aus짯rei짯chend dimen짯sio짯nier짯te Level-1-Befehls짯cache soll짯te auch mit zwei Threads im SMT-Betrieb nicht so schnell Eng짯p채s짯se auf짯kom짯men las짯sen. Bei der Bull짯do짯zer-Rei짯he, wo das Front End eben짯falls zwei Threads abar짯bei짯ten konn짯te, betrug die Gr철짯횩e die짯ses Cache anfangs auch 64 KiB (indes nur 2몏egig), wel짯che sp채짯ter auf 96 KiB (3 Wege) ab Steam짯rol짯ler auf짯ge짯stockt wur짯den. Zudem gibt es bei Bull짯do짯zer im Zusam짯men짯spiel mit einem Linux-Sicher짯heits짯fea짯ture (ASLR) Pro짯ble짯me, wo der im Cache lie짯gen짯de Pro짯gramm짯code bei bestimm짯ten Kom짯bi짯na짯tio짯nen von Spei짯cher짯adres짯sen zwei짯er oder meh짯re짯rer Pro짯gram짯me gegen짯sei짯tig wie짯der aus dem Cache gewor짯fen wurde.

Nach짯dem eine Adres짯se ermit짯telt und in die Phy짯si짯cal Request Queue f체r das Laden des n채chs짯ten Pro짯gramm짯codes aus dem Level-1-Befehls짯cache ein짯ge짯reiht wur짯de, wird par짯al짯lel 체ber ein klei짯nes Tag (쨉Tag) gepr체ft, ob die gew체nsch짯ten Befeh짯le schon im MOp-Cache vor짯lie짯gen. Lie짯fert das 쨉Tag f체r den MOp-Cache kei짯nen Tref짯fer, wer짯den die Befeh짯le in einem 32 Byte-Block aus dem L1-Befehls짯cache gela짯den und an die Deco짯der-Ein짯heit weitergereicht.