1
Superscalar Bra: Hårdvaran löser allt: Hårdvara detekterar poten6ell parallellism av instruk6oner Hårdvara försöker starta exekvering (issue) av så många instruk6oner som möjligt parallellt Hårdvara löser register renaming Kompa6bla binärer: Om en ny funk6onell enhet läggs 6ll i en ny version av arkitekturen eller några andra förbäeringar göra (utan ae ändra instruk6onsuppsäeningen) så kommer äldre program (kompilerade för äldre arkitektur) ae kunna dra nyea av förbäeringar efersom den nya hårdvaran kan exekverar det gamla programmet (dess ordning av instruk6oner) mer effek6vt. Problema6skt: Väldigt komplext: Behövs mycket hårdvara för run- 6me detektering av möjlig parallellism EffekNörbrukningen kan bli hög, pga mycket hårdvara Begränsat instruk6ons fönster: Det gör ae det blir svårare ae hiea instruk6oner som har möjlighet ae exekveras parallellt. 3
6
Fördelar: - Enklare hårdvara. - Antalet FU kan ökas utan behov av mer och sofis6kerad hårdvara för ae detektera parallellism - EffekNörbrukning kan reduceras - Kompilatorn kan detektera parallellism genom en global analys av hela programmet (inget problem med begränsat instruk6ons fönster) Nackdelar: - Många register behövs för ae hålla alla FU ak6va (lagring av operander och resultat) - Stor bandbredd behövs mellan: FU och register Register och minne - Instruk6ons cache och fetch unit (exempel: en instruk6on med 7 opera6oner där varje opera6on behöver 24, krävs 168 bitar per instruk6on) - Stora program (många instruk6oner) pga icke använda opera6oner i instruk6oner - Binär (exekverbar kod) är inte kompa6bel. Om en ny processor har fler FU så kan parallellism öka (fler opera6oner). Problemet är ae instruk6onerna ändras. Gammal kod kan inte exekvera på den nya processorn. Och om den kan det så utnyejas inte alla FUs. 7
Very long instruc6on word (VLIW) processorer använder kompilatorn för detektering av parallellism Kompilatorn analyserar och detekterar opera6oner som kan exekveras parallellt. Dessa opera6oner packas in i en large instruk6on När en long instruk6on hämtats, exekveras alla dess opera6oner parallellt Ingen hårdvara behövs för run 6me detektering av parallellism Problemet med litet instruk6ons fönster är löst; kompilatorn kan vid kompilering använda hela programmet för detektera parallellism. 11
Antag en VLIW processor FUs för följande: Två minnesreferencer Två flyeals opera6oner En heltals opera6on eller ee hopp Heltalsberäkningar tar en klockcykel Word load tar två klockcykler FlyEalsberäkningar tar tre klockcykler 13
14
15
16
17
18
Givet ee antal resurser (processor arkitektur) och en given loop, finns det en gräns på hur många itera6oner en loop ska unrollas. Över denna gräns ges ingen mer vinst. Loop unrolling ökar minnesbehovet för ae lagra program. En bra kompilator hiear op6mal nivå för loop unrolling I exemplet ovan, illustreras behovet av hårdvarustöd för ae hålla en VLIW processor ak6v: Stort antal register (för ae lagra data 6ll opera6oner som är ak6va parallellt Stor bandbredd för: Register <- > minne Register <- > funk6onella enheter 19
21
Trace scheduling är också en kompilatorteknik som syfar 6ll ae utnyeja parallellism över villkorliga hopp Problemet är ae långa sekvenser av instruk6oner måste undersökas för ae detektera parallellism Blockgränser måste passeras Trace scheduling baseras på branch prediktering som görs under kompilering Trace scheduling görs i tre steg: Val av trace Schemaläggning av instruk6oner ErsäEning och kompensa6on 22
Trace selec6on Välj en sekvens av basic blocks (ee basic block är en sekvens av instruk6oner som saknar hopp och villkor, dvs en start instruk6on och en slut instruk6on), vilka har stor sannolikhet ae exekveras som ofast. Denna sekvens kallas ee trace. Trace selec6on baseras på branch predic6on som görs vid kompilering Kvaliten på predikteringen kan förbäeras genom profiling ; man kör programmet med typisk indata och samlar states6k för hur programmet beter sig. 23
25
26
Trace scheduling är inte samma sak som spekula6v exekvering Trace scheduling är en kompilatorteknik som op6merar exekveringen genom ae op6mera exekveringen av den väg (path) som är mest sannolik Pris? Kan leda 6ll extra instruk6oner (compensa6on code) som exekveras när den mindre sannolika vägen tas RäE väg (path) kommer all6d tas, men om det inte är den väg som kompilatorn antog så kommer det ta lite längre 6d Utöver trace scheduling kan VLIW processorer också använda branch predic6on och spekula6v exekvering (liksom vilken annan processor) 27
Alla instruk6oner kan referera 6ll ee predicate register: <Pi> opera6on i predicate register En opera6on blir avslutad (commiead) och resultated blir synligt när respek6ve predicate register är sant Om predicate register för en viss opera6on är sann när opera6on startar (issued), exekveras instruk6onern Om prediacte register inte är sae, kan instruk6onen exekveras. Om predicate visar sig inte vara sann så ignoreras resultat av instruk6on Om inget predicate register säes för en instruk6on, så exekveras och commieas opera6on villkorslöst Branch predica6on är en kompilatorteknik som försöker generera så parallell kod som möjligt För ae öka graden av parallellism, exekveras båda branches parallellt Fördel, hopp tas bort och ersäes med villkorlig exekvering Hårdvarustöd behövs Branch predica6on bygger på instruk6oner för predicated exekvering (Intel IA- 64) Ide: starta båda branches och när villkor (condi6on) om vilket branch som är räe, välj. Hårdvara tar hand om ae säea villkor på vad som verkligen exekveras. Inga förluster. 32
34
35
36
37
38
För ae möta det konstanta behov av prestanda så har super scalar processorer blivit väldigt komplexa VLIW processorer undviker komplexitet genom ae låta kompilatorn hantera detektering av parallellism Opera6onsnivå parallellism ges direkt av instruk6onerna i VLIW processorer I och med ae en VLIW processor inte behöver hårdvara för ae hantera parallellism kan VLIW processorer ha fler funk6onella enheter för ae öka möjligheter 6ll parallellism. Dock, leder det 6ll ae behoven ökar för fler register och mer bandbredd för kommunika6on 39
För ae hålla alla funk6onella enheter ak6va, måste kompilatorer för VLIW vara offensiva i sökandet efer parallellism. Tekniker som används är: Loop unrolling; flera itera6oner unrollas för ae hanteras parallellt Trace scheduling (villkorliga hopp); kompilatorn försöker förutse (predikt) vilken branch som tas. Instruk6oner i den branchen schemaläggs så ae de exekveras så snabbt som möjligt. Kompensa6onskod kan behöva läggas 6ll för ae få programmet korrekt. DeEa leder 6ll extra 6d när dessa instruk6oner exekveras Branch predica6on baseras på predicated exekvering. Exekvering av en opera6on kan kopplas 6ll ee villkor. Opera6onen blir verklig om villkoret är sant (men opera6onen kan exekveras innan). Båda branch exekveras och när man vet vilken som är räe, blir den verklig Specula6v load försöker minska 6d för minnesläsning. Instruk6oner kan flyeas och görs så ae sidfel minimeras 40
42