Geavanceerde pipelining
en parallellisme op het
niveau van instructies
(ILP: Instruction Level
Parallellism)
Yolande Berbers
Structuur en Organisatie van Computersystemen: deel 2
slide 1
Overzicht
statisch schedulen (compiler)
pipeline scheduling en lusontrolling
afhankelijkheden
parallellisme op lus-niveau
dynamisch schedulen
dynamic scheduling met scorebord
dynamic scheduling met algoritme van Tomasulo
dynamisch voorspellen van sprongen
multiple issue
algemene kenmerken
compilerondersteuning voor gebruik ILP
hardwareondersteuning voor gebruik ILP
Yolande Berbers
Structuur en Organisatie van Computersystemen: deel 2
slide 2
inleiding
Pipeline CPI = ideale pipeline CPI + structurele stalls
+ RAW stalls + WAR stalls
+ WAW stalls + control stalls
de factoren zijn niet onafhankelijk van elkaar: we zullen zien
dat verminderen van RAW stalls en control stalls het aantal
WAR stalls en WAW stalls kan verhogen
vermindering van CPI tot minder dan 1: starten van
meerdere instructies in parallel (multiple issue)
superscalaire processoren
VLIW
2 grote technieken komen aan bod in dit hoofdstuk:
technieken om impact data en control hazards te verminderen
technieken om meer parallellisme uit een processor te halen
Yolande Berbers
Structuur en Organisatie van Computersystemen: deel 2
slide 3
pipeline scheduling en lusontrolling
parallellisme binnen 1 basisblok is klein:
gemiddeld maar 6 à 7 instructies tussen twee sprongen
en deze instructies hangen vaak van elkaar af
oplossing: parallellisme tussen iteraties van 1 lus uitbuiten:
loop-level parallellism
vb:
for (i=1; i<=1000; i=i+1)
x[i] = x[i] + s
de berekeningen van twee opeenvolgende iteraties zijn
onafhankelijk van elkaar
methodes:
– statisch (door compiler) of dynamisch (door hardware)
ontrollen van een lus
– vectorinstructies (zie later bij parallelle architecturen)
Yolande Berbers
Structuur en Organisatie van Computersystemen: deel 2
slide 4
pipeline scheduling en lusontrolling (vervolg)
vermijden van stalls: de afhankelijke instructies ver van
elkaar verwijderen
gebruikte latencies in de volgende voorbeelden
FP ALU op voor ander FP ALU op
FP ALU op voor STORE
LOAD double voor FP ALU op
3
2
1
niet-geoptimiseerde DLX code voor ons voorbeeld, met
telkens aangegeven welke klokcycli gebruikt worden
L:
Yolande Berbers
LD
ADDD
SD
SUBI
BNEZ
F0, 0(R1)
F4, F0, F2
0(R1), F4
R1, R1, 8
R1, L
1+2
3+4+5
6
7
8+9
Structuur en Organisatie van Computersystemen: deel 2
slide 5
pipeline scheduling en lusontrolling (vervolg)
eerste verbetering: herschikken van deze code
L:
LD
ADDD
SUBI
BNEZ
SD
F0, 0(R1)
F4, F0, F2
R1, R1, 8
R1, L
8(R1), F4
1+2
3
4
5
6
verbetering: van 9 naar 6
merk op: niet enkel herschikken maar ook aanpassen (SD werd
gewijzigd)
merk nog op: het eigenlijke werk in de lus (LD, ADD, SD) kost
3 klokcycli, de rest is lusoverhead en een stall
Yolande Berbers
Structuur en Organisatie van Computersystemen: deel 2
slide 6
pipeline scheduling en lusontrolling (vervolg)
volgende methode: lusontrolling
L:
LD
ADDD
SD
LD
ADDD
SD
LD
ADDD
SD
LD
ADDD
SD
SUBI
BNEZ
F0, 0(R1)
F4, F0, F2
0(R1), F4
F0, -8(R1)
F4, F0, F2
-8(R1), F4
F0, -16(R1)
F4, F0, F2
-16(R1), F4
F0, -24(R1)
F4, F0, F2
-24(R1), F4
R1, R1, 32
R1, L
1+2
3+4+5
6
7+8
9+10+11
12
13+14
15+16+17
18
19+20
21+22+23
24
25
26+27
lusoverhead werd 3 maal weggewerkt, gebruikt meer registers
gemiddeld: 6.8 klokcycli per lus
Yolande Berbers
Structuur en Organisatie van Computersystemen: deel 2
slide 7
pipeline scheduling en lusontrolling (vervolg)
volgende verbetering: lusontrolling en herschikken
L:
LD
LD
LD
LD
ADDD
ADDD
ADDD
ADDD
SD
SD
SD
SUBI
BNEZ
SD
F0, 0(R1)
F6, -8(R1)
F10, -16(R1)
F14, -24(R1)
F4, F0, F2
F8, F6, F2
F12, F10, F2
F16, F14, F2
0(R1), F4
-8(R1), F8
-16(R1), F12
R1, R1, 32
R1, L
0(R1), F16
1
2
3
4
5
6
7
8
9
10
11
12
13
14
gemiddeld: 3.5 klokcycli per lus (vergelijk met vroeger 6)
Yolande Berbers
Structuur en Organisatie van Computersystemen: deel 2
slide 8
pipeline scheduling en lusontrolling (vervolg)
lus-ontrolling vergroot hoeveelheid code tussen 2
sprongen, zodat beter kan gescheduled worden
compiler moet ontdekken dat iteraties van een lus
onafhankelijk zijn
vaak moeten instructies aangepast worden (bv de SD omdat
die na de SUBI verplaatst werd)
gebruik van veel verschillende registers maakt de instructies
onafhankelijker
lusboekhouding moet aangepast worden
in ons geval zijn de LDs en SDs uit de verschillende iteraties
onafhankelijk (dit is niet altijd zo)
onafhankelijke instructies kunnen her-ordend worden en zijn
parallel (en omgekeerd)
Yolande Berbers
Structuur en Organisatie van Computersystemen: deel 2
slide 9
pipeline scheduling en lusontrolling (vervolg)
compiler heeft analyse nodig van afhankelijkheden
tussen instructies:
dit is het onderwerp van de volgende slides
vaak kent men statisch het aantal iteraties niet
hoe ontrollen ?
schrijf 2 lussen, 1 niet-ontrolde gevolgd door een ontrolde (bv 4
maal)
dynamisch bereken je hoeveel keer je eerst de niet-ontrolde
moet doorlopen om een heel aantal ontrolde over te houden
vb:
stel iteratie 18 maal
eerst 2 maal niet ontrolde
daarna 4 maal de ontrolde (geeft 16 maal de iteratie)
Yolande Berbers
Structuur en Organisatie van Computersystemen: deel 2
slide 10
afhankelijkheden
data-afhankelijkheid: instr j is data-afhankelijk van instr i
indien i een resultaat produceert gebruikt in j
indien j data-afhankelijk is van instr k, en k data-afhankelijk is
van instr i
hoe invloed verminderen
afhankelijkheid behouden maar hazard vermijden door anders
te schedulen
afhankelijkheid wegwerken door analyse van code
vb op volgende slide toont data-afhankelijkheden
deze werden weggewerkt in ons eerder voorbeeld door de
SUBI instructies weg te laten en de berekeningen van R1
door de compiler te laten doen
Yolande Berbers
Structuur en Organisatie van Computersystemen: deel 2
slide 11
afhankelijkheden (vervolg)
voorbeeld van data-afhankelijkheden
L:
LD
F0, 0(R1)
ADDD
F4, F0, F2
SD
0(R1), F4
SUBI
R1, R1, #8
LD
F0, -8(R1)
ADDD
F4, F0, F2
SD
-8(R1), F4
SUBI
R1, R1, #8
LD
F0, -8(R1)
ADDD
F4, F0, F2
SD
-8(R1), F4
SUBI
R1, R1, #8
……..
BNEZ
Yolande Berbers
R1, L
Structuur en Organisatie van Computersystemen: deel 2
slide 12
afhankelijkheden (vervolg)
naam-afhankelijkheid: twee instructies gebruiken
hetzelfde register (of geheugenlocatie), maar geen
gegevens worden doorgegeven tussen de instructies
anti-afhankelijkheid:
output-afhankelijkheid:
komt overeen met een WAR
komt overeen met een WAW
voorbeeld van naam-afhankelijkheid
L:
LD
F0, 0(R1)
ADDD
F4, F0, F2
SD
0(R1), F4
SUBI
R1, R1, #8
LD
F0, -8(R1)
ADDD
Yolande Berbers
F4, F0, F2
SD
-8(R1), F4
SUBI
R1, R1, #8
Structuur en Organisatie van Computersystemen: deel 2
slide 13
afhankelijkheden (vervolg)
hoe naam-afhankelijkheid vermijden
verschillende registers (of geheugenlocaties) gebruiken
is eenvoudiger voor registers
kan statisch of dynamisch gebeuren
voorbeeld van vermijden van naam-afhankelijkheid
L:
LD
F0, 0(R1)
ADDD
F4, F0, F2
SD
0(R1), F4
SUBI
R1, R1, #8
LD
F6, -8(R1)
ADDD
Yolande Berbers
F8, F6, F2
SD
-8(R1), F6
SUBI
R1, R1, #8
Structuur en Organisatie van Computersystemen: deel 2
slide 14
afhankelijkheden (vervolg)
controle-afhankelijkheid: instructies hangen af van
sprongen
instructies die na een sprong staan kunnen niet zomaar
verhuisd worden naar vóór de sprong
instructies die vóór een sprong staan kunnen niet zomaar
verhuisd worden naar na de sprong
volgende slide toont de controle-afhankelijkheden zodat
eenvoudige herordening niet mogelijk is
hoe invloed verminderen
wegwerken van sprongen zoals in lus-ontrolling voorbeeld
zie later
Yolande Berbers
Structuur en Organisatie van Computersystemen: deel 2
slide 15
afhankelijkheden (vervolg)
voorbeeld van controle-afhankelijkheden
L:
LD
F0, 0(R1)
ADDD
F4, F0, F2
SD
0(R1), F4
SUBI
R1, R1, #8
BNEZ
R1, exit
LD
F6, -8(R1)
ADDD
F8, F6, F2
SD
-8(R1), F8
SUBI
R1, R1, #8
BNEZ
R1, exit
……..
BNEZ
exit:
Yolande Berbers
R1, L
……...
Structuur en Organisatie van Computersystemen: deel 2
slide 16
parallellisme op lus-niveau
in het gebruikte voorbeeld voor lus-ontrolling: de
iteraties waren volledig onafhankelijk van elkaar
for (i=1; i <= 1000; i++)
x[i] = x[i] + s;
in het volgend voorbeeld gebruikt S1 een variabele (B[i])
die in de vorige iteratie in S2 een nieuwe waarde
gekregen had
for (i=1; i <= 100; i=i+1) {
A[i] = A[i] + B[i];
B[i+1] = C[i] + D[i];
}
Yolande Berbers
/* S1 */
/* S2 */
Structuur en Organisatie van Computersystemen: deel 2
slide 17
parallellisme op lus-niveau (vervolg)
door analyse kan deze afhankelijkheid weggewerkt
worden
for (i=1; i <= 100; i=i+1) {
A[i] = A[i] + B[i];
B[i+1] = C[i] + D[i];
}
/* S1 */
/* S2 */
wordt
A[1] = A[1] + B[1];
for (i=1; i <= 99; i=i+1) {
B[i+1] = C[i] + D[i];
A[i+1] = A[i+1] + B[i+1];
}
Yolande Berbers
Structuur en Organisatie van Computersystemen: deel 2
slide 18
dynamisch schedulen
= dynamisch (tijdens de uitvoering) de volgorde van de
instructies die uitgevoerd worden bepalen
normaal voegt de hardware stalls in als een data-afh.
optreedt die niet kan worden opgelost door forwarding
vb: geen reden om derde instructie te doen wachten
DIVD F0, F2, F4
ADDD F10, F0, F8
SUBD F12, F8, F14
voordeel van dynamisch schedulen
indien compiler de data-afhankelijkheid niet kan detecteren
indien code voor andere pipeline geoptimiseerd is
vereenvoudigt de compiler
nadeel: nogal ingewikkelde hardware nodig
Yolande Berbers
Structuur en Organisatie van Computersystemen: deel 2
slide 19
dynamisch schedulen (vervolg)
principe:
issue: decoderen en testen op structurele hazards
lezen van operanden: hiermee wordt gewacht tot er geen
data hazards meer zijn
de instructies gaan in volgorde door de issue stage
maar ze kunnen elkaar voorbijsteken in de volgende stage
WAR wordt mogelijk
DIVD F0, F2, F4
ADDD F10, F0, F8
SUBD F8, F8, F14
2 methodes
met scorebord (CDC, 1964)
Tomasulo-algoritme (IBM, 1967)
Yolande Berbers
Structuur en Organisatie van Computersystemen: deel 2
slide 20
dynamic scheduling met scorebord
doel: 1 instructie uitvoeren per klok cyclus
indien een stall nodig is voor een instructie: proberen een
andere instructie uit te voeren die niet afhankelijk is
van een actieve instructie (een instructie in uitvoering)
of van een instructie die tegengehouden werd door een stall
meerdere instructies kunnen in de EX stage zijn door
meerdere functionele eenheden
ge-pipelinede instructies
combinatie van deze twee
in deze bespreking veronderstellen we meerdere functionele
eenheden (maakt geen wezenlijk verschil): 2 mult, 1 adder, 1
divider, 1 integer unit (zie fig. 4.3)
Yolande Berbers
Structuur en Organisatie van Computersystemen: deel 2
slide 21
dynamic scheduling met scorebord (vervolg)
taak scorebord
opbouw van data-afhankelijkheden tussen instructies
vervangt de stage van issue van een instructie
scorebord bepaalt wanneer een instructie zijn operanden kan
lezen en aan de uitvoering kan beginnen
scorebord controleert wanneer een instructie zijn resultaat kan
wegschrijven
Yolande Berbers
Structuur en Organisatie van Computersystemen: deel 2
slide 22
dynamic scheduling met scorebord (vervolg)
model met 4 stappen (ipv 5 stages van pipeline)
issue
test op structurele hazards (is de nodige functionele eenheid
vrij) en op WAW hazards (gaat geen actieve instr. zijn resultaat
schrijven in hetzelfde register)
indien probleem: stall en geen verdere instr. fetch
lezen van operanden
test op RAW hazards (bij actieve en wachtende instr.)
indien probleem: instructie wordt bijgehouden
uitvoering
na uitvoering wordt scorebord verwittigd
wegschrijven van resultaat
test op WAR hazards (moet oude waarde van register nog
gelezen worden in een eerdere instructie)
Yolande Berbers
Structuur en Organisatie van Computersystemen: deel 2
slide 23
dynamic scheduling met scorebord (vervolg)
eigenschappen van scorebord
maakt geen gebruik van forwarding (maar geen wacht stage
voor geh)
structurele hazards: bussen van registers naar functionele
eenheden (nodig in stap 2 en 4)
drie delen (zie fig. 4.4)
instructie status: houdt bij in welke stap elke instructie zit
status van functionele eenheden (9 velden):
– bezet status, uitgevoerde operatie
– resultaat- en bronoperanden registernummers
– functionele eenheden die deze bronoperanden eventueel
nog moeten uitrekenen (RAW)
– vlaggen die aangeven of bronregisters klaar staan
per resultaatregister: functionele eenheid die hierin gaat
schrijven
Yolande Berbers
Structuur en Organisatie van Computersystemen: deel 2
slide 24
dynamic scheduling met scorebord (vervolg)
vb van WAR: DIVD en ADD (ivm F6) in figuur 4.5 en 4.6
beperkingen van de methode met scorebord
hoeveelheid parallellisme aanwezig in de code
grootte van het scorebord
(venster = aantal instructies dat bekeken kan worden)
het aantal en het type van de functionele eenheden
(bepaalt de structurele hazards)
het aantal WAR en WAW hazards
Yolande Berbers
Structuur en Organisatie van Computersystemen: deel 2
slide 25
dynamic scheduling: alg. van Tomasulo
karakteristieken
combineert elementen van scorebord met herbenoeming van
registers
hierdoor worden de WAR en WAW hazards vermeden
in deze bespreking veronderstellen we meerdere functionele
eenheden
herbenoeming van registers door reservatiestations
per functionele eenheid is er een reservatiestation
hierin worden de operanden gebufferd zodra beschikbaar
wachtende instructies verwijzen naar de functionele
eenheden die de bronoperanden zullen leveren
bij WAW wordt enkel de laatste echt in het register
geschreven
Yolande Berbers
Structuur en Organisatie van Computersystemen: deel 2
slide 26
dynamic scheduling: alg. van Tomasulo (vervolg)
verder verschil met scorebord
reservatiestations bepalen wanneer een instructie kan beginnen
uit te voeren: beslissingen gebeuren hier gedistribueerd, en bij
scorebord centraal door scorebord
resultaten gaan direct van reservatiestations naar functionele
eenheid (en niet via registers) via CDB (common data bus)
zie fig. 4.8
Yolande Berbers
Structuur en Organisatie van Computersystemen: deel 2
slide 27
dynamic scheduling: alg. van Tomasulo (vervolg)
model met 3 stappen (ipv 5 stages van pipeline en 4 bij
scorebord)
issue: nieuwe instructie in een reservatiestation plaatsen indien
er plaats vrij is (anders geeft dit een structurele hazard en dus
een stall)
uitvoering indien operanden beschikbaar zijn; anders kijken
voor operanden op CDB
wegschrijven van resultaat via CDB naar register en
reservatiestations waar die resultaten nodig zijn
Yolande Berbers
Structuur en Organisatie van Computersystemen: deel 2
slide 28
dynamic scheduling: alg. van Tomasulo (vervolg)
belangrijke verschillen met scorebord
geen expliciete check op WAW en WAR hazards (deze worden
overbodig door de herbenoeming van registers)
CDB doet een broadcast van resultaten, men wacht niet op de
registers
de logica om hazards te detecteren is gedistribueerd (geen
bottleneck zoals bij het scorebord)
belangrijk indien 2 instructies wachten op zelfde resultaat
bij scorebord is er een conflict rond het gebruik van de
registers, dus starten de twee instructies niet tegelijk
bij Tomasulo kunnen de twee instructies tegelijk starten
loads en stores worden ook als functionele eenheden
beschouwd
Yolande Berbers
Structuur en Organisatie van Computersystemen: deel 2
slide 29
dynamic scheduling: alg. van Tomasulo (vervolg)
structuur van de reservatiestation: 6 velden
bezet status, uitgevoerde operatie
waarde van de 2 operanden, indien reeds beschikbaar
indien een operand niet beschikbaar is wordt bijgehouden van
welke functionele eenheid deze moet komen
aanpassing aan registerfile
elk registers heeft een veld met het reservatiestation waar de
huidige waarde wordt berekend
vb van WAR: DIVD en ADD (ivm F6) in fig 4.9 & 4.10
groot voordeel tov scorebord: dynamische lus-ontrolling
(zie volgende slide)
Yolande Berbers
Structuur en Organisatie van Computersystemen: deel 2
slide 30
Tomasulo: ontrollen van lussen
voorbeeld van een lus met oplossen van WAW en WAR
L:
LD
MULTD
SD
SUBI
BNEZ
F0, 0(R1)
F4, F0, F2
0(R1), F4
R1, R1, 8
R1, L
veronderstel dat de sprongen genomen worden
de lus wordt dynamisch ontrold door de hardware
de reservatiestations zorgen voor extra registers, en lossen WAW
(2 LD) en WAR (LD na MULT) hazards op
fig 4.12 geeft de initiële situatie aan
test bij elke load (iets wat voor de compiler vaak moeilijk is
vanwege het gebruik van pointers)
een load mag enkel gestart worden als het adres niet in het
reservatiestation van de store staat
Yolande Berbers
Structuur en Organisatie van Computersystemen: deel 2
slide 31
Tomasulo (vervolg)
grootste nadeel van Tomasulo
grote hoeveelheid hardware nodig om dit te implementeren
veel heel snelle associatieve geheugens
complexe controle logica
mogelijke bottleneck: CDB
grootste voordeel van Tomasulo
het kan heel effectief gebruikt worden in een architectuur die
weinig registers biedt (bv Intel)
in zulke architectuur heeft de compiler niet veel ruimte om
aan registerherbenoeming te doen
compilers kunnen niet-numerieke code vaak moeilijk statisch
schedulen
Yolande Berbers
Structuur en Organisatie van Computersystemen: deel 2
slide 32
dynamisch voorspellen van sprongen
doel: het vermijden van control hazards
belangrijker wanneer meer instructies tegelijk gestart worden
blijft anders altijd een limiterende factor (wet van Amdahl)
we bespreken hier een aantal voorspellingsschema’s
met telkens een grotere complexiteit
engels: branch prediction
= voorspelling van voorwaardelijke sprongen
= voorspelling van vertakking
maar ik noem het hier vaak sprongvoorspelling
Yolande Berbers
Structuur en Organisatie van Computersystemen: deel 2
slide 33
dynamisch voorspellen van sprongen (vervolg)
waarom kan men voorspellen ?
grootste gedeelte van uitvoeringstijd zit in lussen
elke instructie: veel kansen dat ook eerder uitgevoerd
spronginstructie
niet op toeval gebaseerd
vroeger gedrag is goede indicatie voor volgend gedrag
– meer dan 90% juiste voorspelling in meeste toepassingen
informatie over sprongen
kan bijgehouden worden
gebruikt bij volgend voorkomen van zelfde sprong
Yolande Berbers
Structuur en Organisatie van Computersystemen: deel 2
slide 34
voorbeelden van voorspelbare sprongen
lus
teller = 100
1
BEGIN:
1
: inhoud van lus
.
teller = teller - 1
.
spring naar BEGIN indien teller > 0
1
99 keer
0
Yolande Berbers
Structuur en Organisatie van Computersystemen: deel 2
slide 35
voorbeelden van voorspelbare sprongen
testen op fouten, op speciale gevallen
address = (int *) malloc(sizeof(int));
if (address == NULL)
error("memory full");
Yolande Berbers
Structuur en Organisatie van Computersystemen: deel 2
slide 36
voorbeelden van voorspelbare sprongen
herbruikbare code
de & operatie is sneller dan de deling indien b macht van 2 is
in dit voorbeeld is b een vaste waarde
int modulo(int a,int b) {
if ((b & (b -1))==0)
return(a & (b -1));
return(a % b);
}
#include "ma_librairie.h"
#define HASH_INDEX(v) modulo(v,MAXSIZE)
Yolande Berbers
Structuur en Organisatie van Computersystemen: deel 2
slide 37
voorbeelden van voorspelbare sprongen
gegevens zijn vaak niet toevallig (random)
kijken of tabel vol is: in het begin nooit, aan het einde altijd
string_code=getc(input);
while ((character=getc(input)) != (unsigned)EOF) {
index=find_match(string_code,character);
if (code_value[index] != -1)
string_code=code_value[index];
else {
if (next_code <= MAX_CODE) {
code_value[index]=next_code++;
prefix_code[index]=string_code;
append_character[index]=character;
}
output_code(output,string_code);
string_code=character;
}
}
Yolande Berbers
heel bekend
compressiealgorithme
LZW
(Lempel-ZivWelch)
Structuur en Organisatie van Computersystemen: deel 2
slide 38
voorbeelden van voorspelbare sprongen
vooringenomen betekend niet on-nuttig
de kans dat a[i] > max in de N-de interatie is 1/(N+1) en gaat
naar 0 bij hele grote N
max = a[0];
for (i=1;i<100000;i++)
if (a[i] > max)
max = a[i];
Yolande Berbers
Structuur en Organisatie van Computersystemen: deel 2
slide 39
dynamisch voorspellen van sprongen (vervolg)
sprongvoorspellingsbuffer of spronggeschiedenistabel
(Engels: branch-prediction buffer of branch history table BHT)
klein geheugen geïndexeerd via laag adresgedeelte van de
spronginstructie
bevat 1 bit die aangeeft of sprong laatst genomen werd
enkel interessant indien sprongbeslissing langer duurt dan
berekening van nieuwe PC
soort cache: sprong kan er ook niet in staan (cache miss)
Yolande Berbers
Structuur en Organisatie van Computersystemen: deel 2
slide 40
dynamisch voorspellen van sprongen (vervolg)
sprongvoorspellingsbuffer of spronggeschiedenistabel
(vervolg)
het is enkel een hint:
fetching gebeurt afhankelijk van deze hint
hint kan fout zijn
hint kan bedoeld zijn voor een andere sprong
(met zelfde laagste adres)
sprong wordt vaak 2 maal verkeerd voorspeld: eerste en laatste
keer
vb: lus wordt 10 maal uitgevoerd
sprong wordt 2 keer verkeerd voorspeld, dus 80% juist
Yolande Berbers
Structuur en Organisatie van Computersystemen: deel 2
slide 41
dynamisch voorspellen van sprongen (vervolg)
betere methode: gebruikt 2 bits
2-bits voorspellingsschema
methode: hint moet 2 maal fout zijn voordat aangepast
fig 4.13 toont de 4 mogelijke toestanden
in ons vb met een lus die 10 maal uitgevoerd wordt: 90% juist is
mogelijk met 2 bits
voorpellingsjuistheid is variabel (afhankelijk van het
programma)
groter voor wetenschappelijke programma’s
kleiner voor integer programma’s
Yolande Berbers
Structuur en Organisatie van Computersystemen: deel 2
slide 42
dynamisch voorspellen van sprongen (vervolg)
sprongadres-buffer
(Engels: branch-target buffer of branch-target cache)
cache (zie fig. 4.22)
met voorspelde adres van de instructie na een sprong
die men kan doorzoeken gebruikmakend van een PC
bevat eventueel nog voorspellingsbits
wordt reeds gebruikt in de IF stage (zie fig. 4.23)
alle instructies (ook niet-sprongen) zoeken de tabel af
indien een ‘hit’ dan hebben we met een sprong te maken
variatie: bewaar 1 of enkele instructies ipv adres van instructie
(zie volgende slide)
Yolande Berbers
Structuur en Organisatie van Computersystemen: deel 2
slide 43
dynamisch voorspellen van sprongen (vervolg)
sprongadres-buffer: variatie
bewaar 1 of meerdere instructies ipv adres van instructie
IF is niet meer nodig
– eventueel kan men meer tijd spenderen bij het opzoeken
– dit laat grotere buffers toe
bij onvoorwaardelijke sprong: sprong kan soms nog
vervangen worden door de nieuwe instructie => men wint
één cycle (zero-cycle unconditional branches)
kan in sommige gevallen ook voor conditional branches
Yolande Berbers
Structuur en Organisatie van Computersystemen: deel 2
slide 44
dynamisch voorspellen van sprongen (vervolg)
voorspelling van indirecte sprongen
indirecte sprong: adres moet opgehaald worden uit geheugen
meeste indirecte sprongen zijn het terugkeren uit procedures
dit kan ook met een branch-target buffer
maar voorspelling is veel moeilijker
procedures vanuit veel verschillende plaatsen opgeroepen
buffer die als een stapel werkt
indien de grootte van de stapel gelijk is aan de maximale
procedure-oproep-diepte: perfecte voorspelling
vanaf 8 is het al heel goed
Yolande Berbers
Structuur en Organisatie van Computersystemen: deel 2
slide 45
belang van voorspellingen
90 % juiste voorspellingen
processor van eind jaren 80
pipeline met 4 stages
debiet van max 1 instructie per cyclus
1 instructie op 5 is een spronginstructie
1 slechte voorspelling elke 50 instructies
50 volle cycli gevolgd door 3 stalls
debiet = 50 /(50 + 3) = 0.94, dus 94% van maximaal debiet
nu verandering van terminologie
men spreekt in % foutieve voorspellingen
Yolande Berbers
Structuur en Organisatie van Computersystemen: deel 2
slide 46
belang van voorspellingen
10 % foutieve voorspellingen
huidige processor
pipeline met 8 stages
– langere pipeline: meer stalls bij slechte voorspelling
debiet van max 4 instructies per cyclus
– door 4 parallelle pipelines
1 slechte voorspelling elke 50 instructies
13 (=50/4) volle cycli gevolgd door 7 stalls
debiet = 50 /(13 + 7) = 2.5
– maximaal debiet is 4
– 2.5 is 62% van maximaal debiet
Yolande Berbers
Structuur en Organisatie van Computersystemen: deel 2
slide 47
belang van voorspellingen
stel 5 % foutieve voorspellingen
huidige processor
pipeline met 8 stages
debiet van max 4 instructies per cyclus
1 slechte voorspelling elke 100 instructies
25 volle cycli gevolgd door 7 stalls
debiet = 100 /(25 + 7) = 3.1, of 78% van maximaal debiet
van 10% naar 5% gaan geeft een verbetering van 25%
(62% => 78%)
Yolande Berbers
Structuur en Organisatie van Computersystemen: deel 2
slide 48
dynamisch voorspellen van sprongen (vervolg)
gecorreleerde voorspellers
(Engels: correlating predictors)
maken gebruik van informatie over andere sprongen
voorbeeld:
if (aa==2)
aa=0;
if (bb==2)
bb = 0;
if (aa != bb) { …
twee soorten
inter-correlatie: correlatie tussen verschillende sprongen
auto-correlatie: correlatie tussen zelfde (eerdere) sprong
Yolande Berbers
Structuur en Organisatie van Computersystemen: deel 2
slide 49
meer informatie uitbuiten
Inter-correlatie tussen sprongen
cond1
cond2
cond1 AND cond2
B1: IF cond1 AND cond2 …
0
0
0
B2: IF cond1 …
0
1
0
1
0
0
1
1
1
veronderstel de 4 gevallen even waarschijnlijk
waarschijnlijkheid om B2 onafhankelijk juist te voorspellen: 50%
veronderstel resultaat B1 gekend op moment van B2
als cond1 AND cond2 waar (waarsch 1/4), voorspel cond1 waar
als cond1 AND cond2 vals (waarsch 3/4), voorspel cond1 vals
voorspelling B2 met succes rate van 1/4 + 3/4 * 2/3 = 75 %
100 % succes
66 % succes
opmerking: permuteer B1 en B2, en het is minder goed ...
Yolande Berbers
Structuur en Organisatie van Computersystemen: deel 2
slide 50
meer informatie uitbuiten
auto-correlatie
als laatste 3 richtingen 1 zijn,
voorspel 0, anders voorspel 1
100 % succes
Yolande Berbers
1
1
1
0
1
1
1
0
1
1
1
0
•
•
•
for (i=0; i<100; i++)
for (j=0;j<4;j++)
: inhoud van lus
Structuur en Organisatie van Computersystemen: deel 2
slide 51
van waar komen correlaties ?
Inter-correlaties
vertakkingen die afhangen van zelfde gegevens
vertakkingen die afhangen van gegevens waarvan de
waarde afhangt van de gevolgde control flow:
if (a>0) b=0; if (b==0) …
Auto-correlaties
tests op tellers (zie vorige slide)
tests op een suite van gegevens die een motief bevatten
motief van instructies
als volgende in een lus zit hebben we een motief
a = modulo (x,256) ; b = modulo (y,256); c = modulo(z,5);
...
Yolande Berbers
Structuur en Organisatie van Computersystemen: deel 2
slide 52
voorspeller met 2 geschiedenis-niveaus
eerste geschiedenis-niveau
globale geschiedenis om inter-correlaties te detecteren
één schuifregister van N bits voor hele programma
bevat de genomen richtingen van laatste N vertakkingen
lokale geschiedenis om auto-correlaties te detecteren
één schuifregister van N bits voor elke vertakking
bevat N laatste genomen richtingen van deze vertakking
tweede geschiedenis-niveau
elke vertakking gebruikt meerdere 2-bit tellers, bewaard in
een PHT (pattern history table)
gebruik de waarde van de lokale of globale geschiedenis om
een teller te kiezen in de PHT
Yolande Berbers
Structuur en Organisatie van Computersystemen: deel 2
slide 53
globale geschiedenis: voorbeeld
voorbeeld: globale geschiedenis
met 4 bits
B0: FOR i = 1 TO 100 ...
B1: IF cond1 AND cond2 …
B2: IF cond1 …
historiek
B0 B0 B0 B1
B2
1 1
1 1
0 (100 %)
1 (66 %)
Yolande Berbers
0 0
0 1
2 tellers 2 bits om B2 te voorspellen
Structuur en Organisatie van Computersystemen: deel 2
slide 54
lokale geschiedenis: voorbeeld
voorbeeld: lokale geschiedenis
met 3 bits
B1: for (i=0; i<100; i++)
B2:
historiek B2
1
1
0
1
1 0
0 1
1 1
1 1
for (j=0;j<4;j++)
B2
1
1
1
0
(100 %)
(100 %)
(100 %)
(100 %)
4 2-bits tellers om B2 te voorspellen
opmerking: auto-correlaties kunnen soms gedetecteerd worden met een
globale geschiedenis (bv in dit voorbeeld zijn er geen vertakkingen in lus
B2, dus globale geschiedenis met 4 bits werkt ook)
Yolande Berbers
Structuur en Organisatie van Computersystemen: deel 2
slide 55
lengte van geschiedenis
hoe langer de geschiedenis, hoe meer correlatie het bevat,
maar:
opwarmtijd verhoogt (probleem bij veel context switchen)
grootte van PHT vergroot met lengte geschiedenis
globale geschiedenis
in praktijk niet groter dan 14-16 bits
lokale geschiedenis
in praktijk niet groter dan 10-12 bits
Yolande Berbers
Structuur en Organisatie van Computersystemen: deel 2
slide 56
is het doenbaar in hardware ?
het aantal 2-bits tellers groeit niet exponentieel, maar
lineair met de lengte van de geschiedenis
de vertakkingen zijn niet random, de geschiedenis waarden
ook niet
indien geschiedenis lang, geen PHT per vertakking maar
één PHT gedeeld door alle vertakkingen
geeft problemen van interferentie, zie enkele slides verder
Yolande Berbers
Structuur en Organisatie van Computersystemen: deel 2
slide 57
voorspeller met globale geschiedenis
Centaur C6+, UltraSparc-3, AMD K6 ...
PHT
instructieadres
één 2-bits teller
per ingang
hashfunctie
globale geschiedenis
toevoeging aan geschiedenis om volgende
vertakking te kunnen voorspellen
voorspelling 0/1
Yolande Berbers
Structuur en Organisatie van Computersystemen: deel 2
slide 58
voorspeller met globale geschiedenis
als lengte globale geschiedenis nul is: de PHT is en BHT
mogelijk om globale geschiedenis te gebruiken zonder
instructieadres
indien globale geschiedenis lang is (>10 bits), zullen waarden
van globale geschiedenis de vertakkingen differentiëren
iets minder goed dan gecombineerd met het instructieadres
de globale geschiedenis wordt speculatief aangepast, dit
moet men kunnen teniet doen
Yolande Berbers
Structuur en Organisatie van Computersystemen: deel 2
slide 59
voorbeeld: voorspeller gshare
exclusieve OF tussen instructieadres en globale geschiedenis
B1: IF cond1 AND cond2 …
PHT met 16 ingangen
globale geschiedenis met 1 bit
Adres van B2 = FFF7
richting van B1 = d
B2: IF cond1 …
4 bits laag adres
van B2
0111
d=0
XOR
globale historiek 1 bit
Yolande Berbers
d=1
100 % B2=0
66 % B2=1
d
Structuur en Organisatie van Computersystemen: deel 2
slide 60
voorspeller met lokale geschiedenis
instructieadres
Tabel met
lokale
geschiedenis
lokale geschiedenis
•
•
•
Intel P6 ...
N bits
één of meerdere PHT
met 2N 2-bit tellers
voorspelling
Yolande Berbers
Structuur en Organisatie van Computersystemen: deel 2
slide 61
kwaliteit van de voorspellers
voorspeller met 2 niveaus verminderen het aantal
foutieve voorspellingen met een factor 2 à 3
globale geschiedenis
2 à 5 % foutieve voorspellingen op code algemeen doeleinde
doeltreffend op niet-wetenschappelijke code
lokale geschiedenis
meer doeltreffend op number-crunching code
Yolande Berbers
Structuur en Organisatie van Computersystemen: deel 2
slide 62
Orde van grootte in 1999
BTB
512 ingangen
associatief per groepen van 4 ingangen
PHT
32 K bits
lengte geschiedenis
globaal : 12 bits
lokaal : 10 bits
terugkeeradres-stapel (voor procedure oproepen)
diepte 8 / 32
Yolande Berbers
Structuur en Organisatie van Computersystemen: deel 2
slide 63
Probleem van interferenties
de grootte van de PHT is beperkt
2 verschillende vertakkingen kunnen ge-hashed worden
op dezelfde ingang van de PHT: interferentie
analoog probleem als met caches
Yolande Berbers
Structuur en Organisatie van Computersystemen: deel 2
slide 64
« Paradox » van de verjaardag
gegeven een klas met 23 leerlingen
wat is de waarschijnlijkheid dat 2 leerlingen hun verjaardag op
dezelfde dag hebben ?
antwoord: 50 %
wat heel groot is, is het aantal mogelijke koppels:
23 22
253 koppels
2
Yolande Berbers
Structuur en Organisatie van Computersystemen: deel 2
slide 65
klein voorbeeld
PHT met 256 ingangen
neem 20 ingangen random
herhaal dit meerdere keren :
conflict gemiddeld één keer op 2
en nochtans is er plaats !
Yolande Berbers
Structuur en Organisatie van Computersystemen: deel 2
slide 66
reden van interferenties
start-interferenties
bij eerste keer (of keren) dat men een vertakking tegenkomt
sinds laatste context switch
bij lange geschiedenis
capaciteit-interferenties
bij kleine PHT
bij grote applicatie
bij lange geschiedenis
conflict-interferenties
paradox van de verjaardag
Yolande Berbers
Structuur en Organisatie van Computersystemen: deel 2
slide 67
Simulaties trace-driven
gcc
% foutieve voorspellingen
18
globale geschiedenis 10 bits
16
BHT
14
local
12
gshare
lokale geschiedenis 10 bits,
budget 50 % geschiedenis /
50 % PHT
10
8
6
4
2
0
2k
4k
8k
16k
32k
64k
128k 256k 512k
1M
totale grootte in aantal bits
Yolande Berbers
Structuur en Organisatie van Computersystemen: deel 2
slide 68
gshare: lengte geschiedenis ?
gcc
aantal interferenties
vermeerdert met lengte van
geschiedenis
% foutieve voorspellingen
12
10
8
16k
6
64k
optimale geschiedenis =
compromis correlatie /
interferenties
4
2
0
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
globale geschiedenis
Yolande Berbers
Structuur en Organisatie van Computersystemen: deel 2
slide 69
hoe interferenties verminderen ?
vergroten van voorspeller
alsof er meer dagen zijn in een jaar
vergroten van PHT
bij lokale geschiedenis: aantal lokale geschiedenissen verhogen
lengte van geschiedenis verminderen
alsof er minder leerlingen zijn in de klas
beter gebruik maken van ruimte
Yolande Berbers
Structuur en Organisatie van Computersystemen: deel 2
slide 70
welke voorspeller kiezen ?
grote applicaties of kleine voorspeller
soort correlatie die het nuttigst is: afhankelijk van applicatie
auto-correlatie: voorspeller met lokale geschiedenis
inter-correlatie: voorspeller met globale geschiedenis
niet alle applicaties zijn even groot
eenvoudige BHT is meest performant
welke lengte geschiedenis kiezen ?
veel context switches ?
eenvoudige BHT is meest performant
Yolande Berbers
Structuur en Organisatie van Computersystemen: deel 2
slide 71
hybride voorspellers
Méta-voorspeller
wat waren de juiste
voorspellingen ?
voorspeller 1
adres en
geschiedenis
voorspeller 2
•
voorspelling
•
•
voorspeller N
Yolande Berbers
Structuur en Organisatie van Computersystemen: deel 2
slide 72
een interessante hybride : BHT/global
globale
geschiedenis
adres
BHT
voorspelling
Yolande Berbers
mp
mp
mp
bp
bp
bp
bp
gsh
XOR
gshare
mp
méta
gsh
BHT
BHT
bp
bp
bp
bp
mp
mp
mp
mp
als de voorspellingen beide juist zijn of
beide verkeerd, verandert de metavoorspeller niet
Structuur en Organisatie van Computersystemen: deel 2
slide 73
gshare vs BHT/global
bij vaste grootte van PHT
gcc
gshare: 64k tellers
% foutieve voorspellingen
12
gshare
10
BHT/global
BHT/global:
8
méta : 16k tellers
6
BHT : 16k tellers
4
gshare: 32k tellers
2
0
0
1
2
3
4
5
6
7
8
9 10 11 12 13 14 15 16
globale geschiedenis
Yolande Berbers
Structuur en Organisatie van Computersystemen: deel 2
slide 74
gshare vs BHT/global
bij vaste lengte geschiedenis (10 bits)
gcc
gshare: N tellers
%foutieve voorspellingen
16
gshare
14
BHT/global
12
BHT/global:
10
méta : N/4 tellers
8
BHT : N/4 tellers
6
gshare: N/2 tellers
4
2
0
2k
4k
8k
16k
32k
64k
128k
256k
512k
PHT (aantal 2-bits tellers)
Yolande Berbers
Structuur en Organisatie van Computersystemen: deel 2
slide 75
BHT/global: waarom werkt het goed
BHT/global is minder gevoelig aan interferenties dan
gshare
start- en capaciteits-interferenties verminderen door BHT
conflict-interferenties verminderen door meta-voorspeller
regelen van lengte geschiedenis gemakkelijker
men kan zich een langere geschiedenis veroorloven
beter gedrag bij context switchen, “warmt sneller op”
effect van BHT
Yolande Berbers
Structuur en Organisatie van Computersystemen: deel 2
slide 76
opmerkingen bij BHT/global
gshare is enkel nuttig op enkele vertakkingen
plaats gebruikt door meta-voorspeller wordt
gecompenseerd door beter gebruik ruimte
90 % van de vertakkingen worden juist voorspeld met BHT
paradoxe van de verjaardag
gshare wordt voornamelijk gebruikt bij temporele
localiteit (kleine lussen)
Yolande Berbers
Structuur en Organisatie van Computersystemen: deel 2
slide 77
voorspeller van Alpha 21264
een hybride voorspeller lokaal/globaal
adres
1k
globale
geschiedenis
van 12 bits
tabel met lokale
geschiedenissen
Totaal: 29 Kbits
10 bits
1k *3
PHT
lokaal
PHT
globaal
4k*2
Meta
4k*2
voorspelling
Yolande Berbers
Structuur en Organisatie van Computersystemen: deel 2
slide 78
voorspeller met stemming
adres
als een tabel een foutieve
voorspelling maakt, maar na
stemming is het een juiste
voorspelling, dan wordt de
tabel niet aangepast
bij gelijke groottes, zelfde
percentages juiste voorspellingen
dan bij hybride voorspeller
BHT/global
Yolande Berbers
f1
adres
f2
geschiedenis
f3
stemming
Structuur en Organisatie van Computersystemen: deel 2
slide 79
wat blijft er te doen ?
lengte van pipeline zal nog vergroten
nood aan betere sprongvoorspellers
belangrijkste probleem: interferenties
onderzoekslijnen
2 niveau voorspellers enkel gebruiken voor die vertakkingen
waar correlatie helpt
alleen « belangrijke » vertakkingen laten meespelen bij globale
geschiedenis
hulp van compiler
Yolande Berbers
Structuur en Organisatie van Computersystemen: deel 2
slide 80
dynamisch voorspellen van sprongen: conclusie
beperkingen van sprong-voorspellingen:
juistheid van voorspelling
80-95% volgens boek, is nu hoger
– 1 foutieve voorspelling per 50-100 instructies
– zonder interferentie zou dat zijn: 1 foutieve voorsp per 200-300 instr.
kost bij verkeerde voorspelling
mogelijkheid tot verlaging van deze kost: instructies
ophalen tegelijk van de 2 paden (genomen sprong en nietgenomen sprong): men begint hiermee momenteel
– geheugen moet twee instructies tegelijk kunnen ophalen
– caches moeten twee poorten hebben
– alternatief: enkele instructies van twee paden bijhouden
Yolande Berbers
Structuur en Organisatie van Computersystemen: deel 2
slide 81
multiple issue
multiple issue = meerdere instructies tegelijk starten:
de CPI kan kleiner dan 1 worden
dit kan op twee manieren
superscalaire processoren
met statische scheduling
met dynamische scheduling (gebaseerd op Tomasulo)
VLIW (very long instruction word):
in elke instructie zit een vast aantal operaties
Yolande Berbers
Structuur en Organisatie van Computersystemen: deel 2
slide 82
multiple issue (vervolg)
superscalaire processoren
variabel aantal instructies worden tegelijk uitgevoerd
(bv momenteel typisch tussen 2 en 8)
deze instructies moeten onafhankelijk zijn van elkaar en aan
een aantal voorwaarden voldoen
dynamisch wordt bepaald hoeveel instructies tegelijk kunnen
uitgevoerd worden (in tegenstelling met VLIW)
Yolande Berbers
Structuur en Organisatie van Computersystemen: deel 2
slide 83
multiple issue (vervolg)
superscalaire processoren met statische scheduling
vb van superscalaire DLX (fig. 4.26)
twee instructies tegelijk
– de ene kan zijn: load, store, branch, of integer ALU op
– de andere kan om het even welke FP operatie zijn
twee instructies vormen paren
– gealigneerd op 64 bit
– eerst integer op, daarna FP op
als tweede niet kan gestart worden samen met eerste
– volgende klokcyclus wordt tweede heropgehaald samen
met volgende
Yolande Berbers
Structuur en Organisatie van Computersystemen: deel 2
slide 84
multiple issue (vervolg)
superscalaire processoren met statische scheduling (vervolg)
dit voorbeeld is alleen interessant indien er meerdere FP units
zijn die elk zoveel mogelijk gepipelined zijn
anders vormt de FP-unit toch een bottleneck
voordeel van integer en FP operaties te scheiden
ze gebruiken verschillende registers en verschillende
functionele eenheden
– er moet dus niet veel gerepliceerd worden
– opdat FP-loads en FP-stores in parallel kunnen verlopen
met FP-op., moet FP-register-file extra poorten hebben
dynamisch beslissen of 2 instructies te samen kunnen
gestart worden: zelfde methode als structurele hazards
Yolande Berbers
Structuur en Organisatie van Computersystemen: deel 2
slide 85
multiple issue (vervolg)
superscalaire processoren met statische scheduling (vervolg)
lange hazard: een FP-load gevolgd door een FP-op die het
resultaat van de load gebruikt
kan niet tegelijk gestart worden
ook niet volgende cyclus, maar pas daarna
drie instructies kunnen nu niet nuttig uitgevoerd worden
zelfde geldt voor branch hazards
belang van compilers die goed schedulen wordt belangrijker !!
toepassing op de ontrolde lus uit begin van het hoofdstuk
om maximaal processor te benutten moet men 5 x ontrollen
(zie figuur 4.27)
gemiddelde duur van 1 lus: 2.4 (te vergelijken met 3.5 voor
de ontrolde lus voor de gewone DLX pipeline)
Yolande Berbers
Structuur en Organisatie van Computersystemen: deel 2
slide 86
multiple issue (vervolg)
superscalaire processoren met dynamische scheduling
kan zowel met scorebord als met Tomasulo
twee instructies (of meer) in dezelfde klokcyclus gestart
pipeline van de issue-stage zodat die dubbel zo snel gaat
ontdubbelen van issue-stage, maar probleem met gelijk
gebruik van sommige elementen
– probleem vooral bij combinatie van FP-load en FP-op.
– queues vervangen reservatiestations voor load en store
– dynamisch wordt op adressen gecheckt (vb een load die
volgt op een nog niet uitgevoerde store naar hetzelfde
adres wordt tegengehouden)
– term: decoupled architecture
Yolande Berbers
Structuur en Organisatie van Computersystemen: deel 2
slide 87
multiple issue (vervolg)
VLIW
in elke instructie zitten een vast aantal operaties
1 per functionele eenheid
niet alle operaties zijn gevuld
het is de compiler die het parallellisme bepaalt wanneer de
instructies opgebouwd worden (dus inherent statisch)
voordeel: geen complexe hardware nodig die dynamisch kan
bepalen of instructies tegelijk mogen uitvoeren (voordeel wordt
groot bij veel functionele eenheden)
vb. een VLIW zou kunnen bevatten: 2 int-op., 2 FP-op., 2 gehop. en 1 sprong
compiler moet geavanceerde scheduling technieken gebruiken
om instructies allemaal nuttig te vullen (bv trace scheduling,
zie verder)
Yolande Berbers
Structuur en Organisatie van Computersystemen: deel 2
slide 88
multiple issue (vervolg)
VLIW (vervolg)
nadelen
code densiteit is lager (gaten die niet nuttig gevuld worden)
compilatie is voor één bepaalde architectuur
geen oude code kan nog uitgevoerd worden
voorbeeld van VLIW instructies: fig. 4.29
gemiddelde duur van 1 lus: 2.5
te vergelijken met 3.5 voor de ontrolde lus voor de gewone
DLX pipeline, en 2.4 bij multiple issue met statische
scheduling
Yolande Berbers
Structuur en Organisatie van Computersystemen: deel 2
slide 89
multiple issue: beperkingen
beperkingen van het aanwezige ILP in programma’s
gemiddeld aantal onafhankelijke instructies die nodig zijn =
diepte van de pipeline * aantal functionele eenheden
zeer complexe hardware
dupliceren van de nodige elementen (lineaire kost)
de geheugenbandbreedte moet volgen
vanuit de registers
– aantal poorten naar register-file vergroot erg
– kloksnelheid kan erdoor verminderen
vanuit het hoofdgeheugen
– geheugen volledig met twee poorten (erg duur)
– geheugen in banken verdelen, in parallel aanspreken
– twee maal per cyclus naar het geheugen gaan
Yolande Berbers
Structuur en Organisatie van Computersystemen: deel 2
slide 90
multiple issue: beperkingen (vervolg)
zeer complexe hardware (vervolg)
logica nodig om multiple issue te realiseren
een extreem: dynamisch gescheduled met scorebord of
Tomasulo
– vraagt zeer veel hardware
ander extreem: VLIW
– vraagt weinig hardware
veel huidige processoren ergens in het midden
superscalaire processoren met statische scheduling
variaties in soorten instructies die samen kunnen, in aantal
dat tegelijk uitgevoerd worden enz.
nieuwste processoren
superscalaire processoren met dynamische scheduling
DSP processoren: soms VLIW (zie later)
Yolande Berbers
Structuur en Organisatie van Computersystemen: deel 2
slide 91
multiple issue: beperkingen (vervolg)
beperkingen eigen aan VLIW
grootte van code
lussen wordt zwaar ontrold om voldoende ILP te hebben;
dit vergroot al de code
de niet totaal gevulde instructies zijn verloren ruimten
– oplossing: encoderen van deze instructies
lock-step uitvoering
stall van een functionele eenheid zorgt ervoor dat alles
gestopt wordt (o.a. cache miss)
compatibiliteit van binaire code
voor elke nieuwe versie van de processor (om de 2 jaar ?)
moet code gehercompileerd worden (of object-code migratie
of emulatie)
Yolande Berbers
Structuur en Organisatie van Computersystemen: deel 2
slide 92
compilerondersteuning voor gebruik ILP
drie belangrijke technieken komen hier aan bod
het detecteren en verwijderen van afhankelijkheden
software pipelining
trace scheduling
Yolande Berbers
Structuur en Organisatie van Computersystemen: deel 2
slide 93
compilerondersteuning voor gebruik ILP
het detecteren en verwijderen van afhankelijkheden
nodig voor technieken zoals lusontrolling
sterk bemoeilijkt door gebruik van pointers
probleem is in het algemeen NP-compleet
in de praktijk zijn er een aantal veel voorkomende gevallen die
gemakkelijker opgelost kunnen worden
software pipelining
herorganiseren van lussen zodat in elke nieuwe versie van de
lus instructies zitten uit verschillende lussen van
oorspronkelijke versie (zie figuur 4.30)
zie voorbeeld op volgende slide
methode: pak een lus, ontrol die een beetje, en combineer
instructies uit verschillende iteraties
Yolande Berbers
Structuur en Organisatie van Computersystemen: deel 2
slide 94
compilerondersteuning voor gebruik ILP (vervolg)
software pipelining: oorspronkelijke lus
L:
LD
ADDD
SD
SUBI
BNEZ
F0, 0(R1)
F4, F0, F2
0(R1), F4
R1, R1, 8
R1, L
ontrolling van deze lus
iter 1
iter 2
iter 3
Yolande Berbers
LD
ADDD
SD
LD
ADDD
SD
LD
ADDD
SD
F0, 0(R1)
F4, F0, F2
0(R1), F4
F0, 0(R1)
F4, F0, F2
0(R1), F4
F0, 0(R1)
F4, F0, F2
0(R1), F4
nieuwe lus
L:
SD
ADDD
LD
SUBI
BNEZ
0(R1), F4
F4, F0, F2
F0, -16(R1)
R1, R1, 8
R1, L
Structuur en Organisatie van Computersystemen: deel 2
slide 95
compilerondersteuning voor gebruik ILP (vervolg)
software pipelining (vervolg)
nog nodig: opbouw en einde lus moet aangepast worden
voordeel van software pipelining tov lusontrolling
– hoeveelheid code vergroot niet te erg
verschil tussen software pipelining en lusontrolling
– doel van lusontrolling
– wegwerken van de lusoverhead
– beter kunnen schedulen van instructies
– doel van software pipelining
– eenmaal pipeline opgezet, processor 100% bezig
houden
Yolande Berbers
Structuur en Organisatie van Computersystemen: deel 2
slide 96
compilerondersteuning voor gebruik ILP (vervolg)
trace scheduling
gaat verder dan lusontrolling
methode
voorspelt hoe een sprong (of meerdere elkaar opvolgende
sprongen) zal genomen worden
verplaatst dan code van na de sprong naar voren zodat een
groter stuk code zonder sprong ontstaat die dan beter kan
gescheduled worden
als misvoorspeld: verkeerde moet teniet gedaan worden
verplaatste code mag geen exception veroorzaken
2 stappen: trace selection en trace compaction
verplaatsen van code is speculatief: het voert sneller uit alleen
indien men de sprong goed gekozen heeft
Yolande Berbers
Structuur en Organisatie van Computersystemen: deel 2
slide 97
hardwareondersteuning voor gebruik ILP
meerdere methodes met hardware ondersteuning
uitbreiding van instructieset met conditionele instructies
speculatie
statische speculatie (compilerspeculatie met hardware hulp)
dynamische speculatie (hardware gebaseerde speculatie)
conditionele instructies
Engelse termen: conditional or predicated instructions
idee:
instructie bevat een conditie die ge-evalueerd wordt samen
met de uitvoering van de instructie
als de conditie onwaar is wordt de instructie een no-op
meest gebruikte vorm: conditionele move
gebruikt bij heel eenvoudige if-then-code
Yolande Berbers
Structuur en Organisatie van Computersystemen: deel 2
slide 98
hardwareondersteuning voor gebruik ILP (vervolg)
conditionele instructies (vervolg)
vb
C-code
if (A=0) { S=T; }
ass.-code
L:
BNEZ
MOV
R1, L
R2, R3
nieuwe code
CMOVZ
R2, R3, R1
(indien R1 0 is dan moet de move uitgevoerd worden)
wordt gemakkelijk gebruikt voor functies als absolute waarde
dubbel voordeel:
minder sprongen (en alle geassocieerde vertragingen)
stukken code zonder sprongen zijn langer
Yolande Berbers
Structuur en Organisatie van Computersystemen: deel 2
slide 99
hardwareondersteuning voor gebruik ILP (vervolg)
conditionele instructies (vervolg)
wordt gebruikt in combinatie met trace speculation om code te
verplaatsen naar voren
beperkingen
ge-annuleerde conditionele instructies nemen toch tijd in
(niet van belang als dit een ongebruikt slot gebruikt in een
superscalaire processor)
gelimiteerd gebruik als then-gedeelte veel instructies bevat
gelimiteerd gebruik als if-test een AND of OR bevat
dit soort instructies kan de oorzaak zijn van een tragere klok
(denk aan RISC-CISC discussie)
Yolande Berbers
Structuur en Organisatie van Computersystemen: deel 2
slide 100
hardwareondersteuning voor gebruik ILP (vervolg)
compiler-speculatie met hardwareondersteuning
beperkingen van compilergebaseerde speculatie
teniet doen van instructies door misvoorspelde sprong
enkel instructies die geen uitzondering kunnen veroorzaken
mogen verplaatst worden
3 methoden van hardwareondersteuning voor speculatie
samenwerking tussen hardware en OS om exceptions te
negeren
gebruik van status-bits bij resultaatregisters bij uitzondering
hardware buffers resultaten totdat zeker is dat een instructie
niet speculatief was
deze 3 methoden worden nu één voor één besproken
Yolande Berbers
Structuur en Organisatie van Computersystemen: deel 2
slide 101
hardwareondersteuning voor gebruik ILP (vervolg)
samenwerking tussen hardware en OS om uitzonderingen te negeren
speculatieve instructies zijn speciaal gemarkeerd
– alle uitzonderingen die een programma niet stoppen
(page fault, interrupts, ...) worden gewoon uitgevoerd
– bij andere uitzondering stopt het programma niet maar
is het resultaat van de speculatieve instructie
waarschijnlijk verkeerd
– indien de speculatieve instructie niet moest
uitgevoerd worden: geen probleem (resultaat toch
niet gebruikt)
– ander geval: programma werkt verder met verkeerd
resultaat
Yolande Berbers
Structuur en Organisatie van Computersystemen: deel 2
slide 102
hardwareondersteuning voor gebruik ILP (vervolg)
samenwerking tussen hardware en OS om uitzonderingen te negeren
(vervolg)
in zulk een schema kan aan de compiler ook gevraagd
worden om een programma te compileren zonder
speculatie, waar de uitzonderingen wel voorkomen
herbenoeming is hier nu vaak een beperking (kan enkel
voor registers, en alleen als er voldoende registers zijn)
Yolande Berbers
Structuur en Organisatie van Computersystemen: deel 2
slide 103
hardwareondersteuning voor gebruik ILP (vervolg)
gebruik van status-bits bij resultaatregisters bij uitzondering
benaming: vergif-bit (poison-bit)
methode
– elk register heeft een vergif bit
– wanneer een register een resultaat krijgt van een
speculatieve instructie die een uitzondering veroorzaakte
wordt de vergif-bit gezet
– als een register met vergif-bit gezet gebruikt wordt, dan
wordt een uitzondering gegenereerd
uitzondering treedt weldegelijk op, maar iets later
Yolande Berbers
Structuur en Organisatie van Computersystemen: deel 2
slide 104
hardwareondersteuning voor gebruik ILP (vervolg)
hardware buffers speculatieve resultaten
belangrijkste nadeel van vorige twee methoden:
herbenoeming is vaak een beperking (kan enkel voor
registers, en alleen bij voldoende registers)
oplossing: bufferen door hardware van resultaat van
speculatieve instructies (lijkt op Tomasulo)
Engelse term: boosting
Yolande Berbers
Structuur en Organisatie van Computersystemen: deel 2
slide 105
hardwareondersteuning voor gebruik ILP (vervolg)
hardware buffers speculatieve resultaten (vervolg)
methode
– een boosted instructie wordt speculatief uitgevoerd,
gebaseerd op een (nog niet uitgevoerde) sprong
– het resultaat wordt gebufferd, en eventueel gebruikt
door andere boosted instructies
– na uitvoering sprong
– of boosted instructies worden ‘commit’
– of boosted instructies worden genegeerd
Yolande Berbers
Structuur en Organisatie van Computersystemen: deel 2
slide 106
hardwareondersteuning voor gebruik ILP (vervolg)
hardware-gebaseerde speculatie
combinatie van 3 methodes
dynamische sprong-voorspelling
speculatie (om instructies uit te voeren voordat men de
uitkomst van een sprong kent)
dynamisch schedulen van instructies (opdat instructies
elkaar mogen ‘voorsteken’)
in essentie is dit een data-flow methode: operaties mogen
uitvoeren van zodra hun operanden gekend zijn
Yolande Berbers
Structuur en Organisatie van Computersystemen: deel 2
slide 107
hardwareondersteuning voor gebruik ILP (vervolg)
hardware-gebaseerde speculatie (vervolg)
voordelen tov compilergebaseerde speculatie
compilers hebben problemen om afhankelijkheden te
ontdekken bij gebruik van pointers
– hardware-gebaseerde sprongvoorspelling is voor
sommige toepassingen veel beter (integer-toepassingen)
behoudt een precies uitzonderings-model
vraagt geen extra code van compiler om speculatie te-niet te
doen bij verkeerde voorspelling
oude, of niet speciaal hiervoor gecompileerde code, kan
gebruik maken van deze techniek
nadeel: complex, vraagt veel extra hardware
Yolande Berbers
Structuur en Organisatie van Computersystemen: deel 2
slide 108
hardwareondersteuning voor gebruik ILP (vervolg)
hardware-gebaseerde speculatie (vervolg)
methode die hier besproken wordt: uitbreiding van Tomasulo
basisgedachte
splitsen van doorgeven van resultaten naar andere instructie
met het echt beëindigen van de instructie
wachten tot een instructie commit voordat resultaten echt
weggeschreven worden
gevolg
uitvoeren van instructies mag uit volgorde
committen van instructies moet wel in juiste volgorde
nodige hardware: reorder buffer (zie volgende slide)
Yolande Berbers
Structuur en Organisatie van Computersystemen: deel 2
slide 109
hardwareondersteuning voor gebruik ILP (vervolg)
hardware-gebaseerde speculatie (vervolg)
reorder buffer (vervolg)
buffer die resultaten bijhoudt tot commit
zijn extra virtuele registers (operanden hier uitgehaald)
reorder buffer en vroegere store buffer hebben een
gelijkaardige functie; ze worden nu bij elkaar gevoegd
(samen met load buffer)
elke ingang heeft drie velden
– type van instructie (sprong, store, of ALU op.)
– bestemmingsveld (registernummer)
– waarde
reservatie stations blijven bestaan
organisatie: zie figuur 4.34
Yolande Berbers
Structuur en Organisatie van Computersystemen: deel 2
slide 110
hardwareondersteuning voor gebruik ILP (vervolg)
hardware-gebaseerde speculatie (vervolg)
4 stappen in de uitvoering
issue
– kan gebeuren als er een vrije plaats is in het goede
reservatiestation en in de reorder buffer
– het nummer in de reorder buffer wordt doorgegeven
aan het reservatie station (voor het resultaat)
execute
– als beide operanden van een instructie in een reservatie
tabel aanwezig zijn kan de instructie uitgevoerd worden
write result
– als het resultaat aanwezig is wordt het op de CDB gezet
commit (zie volgende slide)
Yolande Berbers
Structuur en Organisatie van Computersystemen: deel 2
slide 111
hardwareondersteuning voor gebruik ILP (vervolg)
hardware-gebaseerde speculatie (vervolg)
4 stappen in de uitvoering (vervolg)
commit
– als hoofd van reorder buffer een instructie is waar een
resultaat aanwezig is, wordt deze instructie ge-commit
– resultaat gaat naar register
– ingang in reorder buffer wordt vrijgegeven
– als hoofd van reorder buffer misvoorspelde sprong is,
dan wordt de hele reorder buffer leeggemaakt en begint
men uit te voeren vanaf het juiste adres
– als hoofd van reorder buffer een juist voorspelde sprong
is, dan niets
Yolande Berbers
Structuur en Organisatie van Computersystemen: deel 2
slide 112
hardwareondersteuning voor gebruik ILP (vervolg)
hardware-gebaseerde speculatie (vervolg)
behandelen van exceptions
wanneer een instructie een exception veroorzaakt wordt dit
bijgehouden in de reorder buffer
als hoofd van reorder buffer een instructie is die een
uitzondering veroorzaakte: voer de uitzondering uit
dit geeft preciese exceptions
voorbeelden: fig. 4.35 en fig. 4.36
Yolande Berbers
Structuur en Organisatie van Computersystemen: deel 2
slide 113
haalbare resultaten
mogelijke kenmerken van de processoren van de jaren
2000 - 2005
tot 64 instructies die tegelijk gestart worden
(zover zijn we nog niet)
sprong voorspeller met 1K ingangen en een return voorspeller
met 16 ingangen (we zijn al verder)
register herbenoeming met 64 extra integer en 64 extra FP
registers (ja, dit doen we al)
fig. 4.47 geeft mogelijk parallellisme aan bij variërend window
op programma (bemerk verschil tussen FP programma's en
integer programma's)
fig. 4.60: “huidige” mogelijkheden (boek is van 1996)
Yolande Berbers
Structuur en Organisatie van Computersystemen: deel 2
slide 114