AMD Ryzen 7 1800X Review ‚Äď Teil 1

Artikel-Index:

AMD Ryzen ‚Äď Die Architektur im Detail: Decoder-Einheit

In der Deco¬≠der-Ein¬≠heit lan¬≠den die 32 aus dem Befehls¬≠cache gelie¬≠fer¬≠ten Bytes mit Pro¬≠gramm¬≠code im Ins¬≠truc¬≠tion Byte Buf¬≠fer. Aus die¬≠sem selek¬≠tiert ein Picker vier iden¬≠ti¬≠fi¬≠zier¬≠te x86-Befeh¬≠le und lei¬≠tet sie an die Deco¬≠der-Ein¬≠heit, wel¬≠che die¬≠se dann in ein inter¬≠nes Befehls¬≠for¬≠mat (MOp) √ľber¬≠setzt und an einen MOp-Puf¬≠fer schickt. Im Fal¬≠le eines Tref¬≠fers im MOp-Cache k√∂n¬≠nen von die¬≠sem sogar bis zu 6 MOps in einem Takt¬≠zy¬≠klus an den Puf¬≠fer gelie¬≠fert wer¬≠den, was auf Sky¬≠la¬≠ke-Niveau liegt. Beim Weg √ľber die Deco¬≠der liegt der Intel-Pro¬≠zes¬≠sor dage¬≠gen mit bis zu 5 Befeh¬≠len pro Takt leicht vorn. Nicht gezeigt ist der Weg der deco¬≠dier¬≠ten Befeh¬≠le von der Deco¬≠der-Ein¬≠heit in den MOp-Cache. Falls im Pro¬≠gramm¬≠code ein nicht kor¬≠rekt vor¬≠her¬≠ge¬≠sag¬≠ter Sprung statt¬≠fin¬≠det, ver¬≠k√ľrzt sich dank des Caches auch die soge¬≠nann¬≠te Branch Mis¬≠pre¬≠dic¬≠tion Penal¬≠ty, also die Dau¬≠er bis zur Aus¬≠f√ľh¬≠rung der kor¬≠rek¬≠ten ange¬≠sprun¬≠ge¬≠nen Befeh¬≠le. Der Cache spart hier meh¬≠re¬≠re Takt¬≠zy¬≠klen, was die Leis¬≠tung steigert.

Aus dem MOp-Puf¬≠fer (¬ĶOp-Queue)) her¬≠aus wird f√ľr kom¬≠ple¬≠xe¬≠re, nicht direkt in Hard¬≠ware imple¬≠men¬≠tier¬≠te Befeh¬≠le die Aus¬≠ga¬≠be der daf√ľr not¬≠wen¬≠di¬≠gen Micro¬≠code-Befeh¬≠le aus dem Micro¬≠code-Spei¬≠cher (ROM) ange¬≠sto¬≠√üen. Zudem unter¬≠sucht eine Stack Engi¬≠ne den Code im Puf¬≠fer auf Stack-Befeh¬≠le, wel¬≠che √ľbli¬≠cher¬≠wei¬≠se f√ľr die Zwi¬≠schen¬≠spei¬≠che¬≠rung von Wer¬≠ten oder √úber¬≠ga¬≠be von Para¬≠me¬≠tern ver¬≠wen¬≠det wer¬≠den. Sind sol¬≠che vor¬≠han¬≠den, kann die Engi¬≠ne die Adres¬≠sen dank typi¬≠scher¬≠wei¬≠se ein¬≠fa¬≠cher Off¬≠set-Adres¬≠sie¬≠rung (z.B. RSP+8) schon hier berech¬≠nen. Das gab es auch schon in fr√ľ¬≠he¬≠ren Kern¬≠ar¬≠chi¬≠tek¬≠tu¬≠ren, wie z.B. der Bull¬≠do¬≠zer-Linie. Da dien¬≠te es aber nur dem Zweck, die Abh√§n¬≠gig¬≠kei¬≠ten zwi¬≠schen Stack-Befeh¬≠len auf¬≠zu¬≠l√∂¬≠sen, um die¬≠se par¬≠al¬≠lel aus¬≠f√ľh¬≠ren zu k√∂n¬≠nen. Die eigent¬≠li¬≠chen Stack-Spei¬≠cher¬≠zu¬≠grif¬≠fe muss¬≠ten wei¬≠ter¬≠hin kom¬≠plett aus¬≠ge¬≠f√ľhrt wer¬≠den, was Res¬≠sour¬≠cen beleg¬≠te und Ener¬≠gie verbrauchte.

Ein neu¬≠er Ansatz hier ist nun, sich die Adres¬≠sen von Stack-Schreib¬≠zu¬≠grif¬≠fen (z.B. PUSH RAX) zu mer¬≠ken und die¬≠se Daten an sp√§¬≠ter auf die glei¬≠che Adres¬≠sen zugrei¬≠fen¬≠den Lese¬≠be¬≠feh¬≠len (z.B. ein dar¬≠auf fol¬≠gen¬≠des POP RCX) direkt wei¬≠ter¬≠zu¬≠lei¬≠ten. Da nicht wei¬≠ter auf das Mem¬≠file ein¬≠ge¬≠gan¬≠gen wur¬≠de, gehen wir spe¬≠ku¬≠la¬≠tiv davon aus, dass es wie ein klei¬≠ner Stack Cache funk¬≠tio¬≠niert. Es k√∂nn¬≠te daf√ľr die Imme¬≠dia¬≠te-/Dis¬≠pla¬≠ce¬≠ment-Ein¬≠heit ver¬≠wen¬≠den, wel¬≠che hier nicht expli¬≠zit gezeigt wur¬≠de, obgleich schon in der Bull¬≠do¬≠zer-Rei¬≠he pr√§¬≠sent. Dort legt das Front-End die bei x86-Befeh¬≠len mit einem Kon¬≠stan¬≠ten¬≠wert mit¬≠ge¬≠lie¬≠fer¬≠ten Wer¬≠te ab und stellt die¬≠se bei Befehls¬≠aus¬≠f√ľh¬≠rung ggf. bereit. F√ľr die¬≠se Zugrif¬≠fe kann also auf die Nut¬≠zung einer Address Gene¬≠ra¬≠ti¬≠on Unit (AGU) und der Load-/Sto¬≠re-Ein¬≠heit sowie des Level-1-Daten¬≠caches ver¬≠zich¬≠tet und damit Ener¬≠gie gespart wer¬≠den. Frei¬≠lich muss die Engi¬≠ne noch √ľber¬≠wa¬≠chen, ob irgend¬≠wel¬≠che ande¬≠ren Spei¬≠cher¬≠zu¬≠grif¬≠fe sich mit den Stack-Zugrif¬≠fen √ľber¬≠lap¬≠pen, um Kon¬≠flik¬≠te zu ver¬≠hin¬≠dern und immer die kor¬≠rek¬≠ten Daten zu verwenden.

Nach all die¬≠sen Vor¬≠ar¬≠bei¬≠ten k√∂n¬≠nen die ver¬≠ar¬≠bei¬≠te¬≠ten Befeh¬≠le an den Dis¬≠patch-Puf¬≠fer gesen¬≠det und dort vor¬≠ge¬≠hal¬≠ten wer¬≠den. In die¬≠sem Puf¬≠fer wer¬≠den die Befeh¬≠le von der kom¬≠pak¬≠te¬≠ren MOp-Form in ein¬≠zel¬≠ne ¬ĶOps f√ľr die ver¬≠schie¬≠de¬≠nen Funk¬≠ti¬≠ons¬≠ein¬≠hei¬≠ten auf¬≠ge¬≠split¬≠tet. Hier¬≠bei k√∂n¬≠nen in einem Takt bis zu 6 ¬ĶOps an die Inte¬≠ger-Ein¬≠heit sowie 4 ¬ĶOps an die Flie√ü¬≠kom¬≠ma-Ein¬≠heit gesen¬≠det wer¬≠den. Wie in der Fra¬≠ge¬≠run¬≠de zu ver¬≠neh¬≠men war, wer¬≠den zum Bei¬≠spiel kom¬≠ple¬≠xe¬≠re Ope¬≠ra¬≠tio¬≠nen wie 256 bit brei¬≠te AVX(2)-Befehle erst hier von einer MOp in 2 ¬ĶOps auf¬≠ge¬≠teilt. Dies ist n√∂tig, da AMDs FPU nur halb so breit ist. Genaue¬≠res folgt dazu in der FPU-Beschrei¬≠bung. Das spart Band¬≠brei¬≠te f√ľr MOps im Front End, wel¬≠che dann f√ľr ande¬≠re Befeh¬≠le zur Ver¬≠f√ľ¬≠gung steht. Somit k√∂n¬≠nen mehr Befeh¬≠le aus dem Deco¬≠der-Front-End in die Rechen¬≠wer¬≠ke des Back-Ends flie¬≠√üen. Intels Mar¬≠ke¬≠ting¬≠ab¬≠tei¬≠lung w√ľr¬≠de die¬≠ses Fea¬≠ture ver¬≠mut¬≠lich AVX-Fusi¬≠on o.√§. nennen ūüėČ