Forsinkelsesspor x86

CS641 klasse 26 В.

Handout pa MIPS og x86 Branch Eksempler.

• Optimalisering # 2: Omdefinere grener.

• Gammel definisjon: Hvis vi tar avdelingen, blir ingen av instruksjonene etter grenen utfort ved et uhell.

• Ny definisjon: om vi tar avdelingen, blir den eneste instruksjonen umiddelbart etter avdelingen henrettet (kalt grenforsinkelsessporet)

• Notater om Branch-Delay Slot.

• Verste situasjonsscenario: kan alltid sette opp en no-op i gren-forsinkelsessporet.

• Bedre sak: kan finne en instruksjon som gar foran avdelingen, som kan plasseres i grenforsinkelsesplassen uten a pavirke strommen av programmet.

• re-bestilling instruksjoner er en vanlig metode for a oke programmene.

• kompilatoren ma v re veldig smart for a finne instruksjoner for a gjore dette.

• kan vanligvis finne en slik instruksjon minst 50% av tiden.

• Hoppene har ogsa en forsinkelse

Eksempel: mer eller inn i forsinkelsesspor:

Noen RISCer som PowerPC og ARM har ikke en forsinkelsesplass, men for eksempel MIPS, SPARC, PA-RISC har det.

° Instruksjonsspor etter en belastning kalles for lastforsinkelsesspor.

° Hvis denne instruksjonen bruker resultatet av belastningen, vil maskinvareinnkoblingen stoppe den for en syklus.

° Hvis kompilatoren legger en ikke-relatert instruksjon i det sporet, sa ingen stall.

° Lase maskinvarestallet instruksjonen i forsinkelsessporet svarer til a sette en nop i sporet В (bortsett fra at sistnevnte bruker mer kodeplass)

Grener i MIPS og x86 kode «se handout.

Branchprediksjon: Procedurisering er ikke kostbar i dag.

Dette er viktig a forsta for programvareutviklere. В Mange mennesker vet litt om grenen boder og misapply det til enkle samtaler og returnerer. Dagens prosessorer er veldig kloge nar det gjelder a forutse grener involvert i samtaler og retur, selv om malet er beregnet, som vi har sett i MIPS-koden. В Sa proseduriserende kode har ingen alvorlig overhead. В Med andre ord, det er ikke overordnet.

Dynamisk grenprediksjonsteknikker.

Oppbevar data etter grenadresse, om hvordan grenen har gatt.

Enkeleste: en bit, men for enkel.

Neste: To biter, brukt av AMD Opteron, CPU for sf06.

Ideen til oppmattning opp / ned-teller, vist pa s. 381, men veldig enkelt:

00 & lt; 01 10