Spekulativ exekvering i CPU pipelining Max Faxälv Datum: 2018-12-05 1
Abstrakt Speculative execution is an optimisation technique used by modern-day CPU's to guess which path a computer code will take, and optimistically start executing code in-advance before knowing if it is the right decision or not. In case of a correct guess the CPU can achieve signicant speed improvement, however in case of a faulty guess the CPU gets a penalty by having to undo the wrong path and instead execute the correct code. Spekulativt exekvering är en optimeringsteknik som används av moderna processorer för att gissa vilken väg en datorkod ska ta och optimistiskt börja exekvera kod i förväg innan den vet om det är rätt beslut eller ej. Vid en korrekt gissning kan CPU'n uppnå betydande hastighetsförbättringar, men i händelse av felaktig gissning får CPU en stratid genom att kasta bort dom felaktiga instruktionerna och istället utföra den korrekta koden. Innehåll 1 Introduktion 3 2 Varianter 3 2.1 Static branch prediction..................... 3 2.2 Dynamic branch prediction.................... 3 2.2.1 One-level prediction................... 3 2.2.2 Two-level prediction................... 4 2.2.3 Loop-identiering..................... 4 2.3 Neural branch prediction..................... 4 3 Sammanfattning 4 2
1 Introduktion Syftet med detta dokument är att ge en bättre inblick i hur CPU-pipelines använder spekulativ exekvering för att uppnå högre prestanda för instruktionsexekvering. Moderna mikroprocesser använder pipelines för att implementera parallellitet på instruktionsnivå inom en enda processor genom att dela upp instruktionerna i separata steg och genom att försöka hålla alla delar av processorn upptagen. Svårigheten att genomföra pipelining uppstår när koden innehåller en villkorlig gren, och processorn måste i förväg bestämma vilken väg som ska börja körs innan man vet vilken väg som faktiskt är korrekt. 2 Varianter Exempel på spekulativa exekveringsmetoder: 2.1 Static branch prediction Statiskt branch prediction är den mest simpla gissningstekniken p.g.a att den inte förlitar sig på dynamisk information (information vid körning). Enkel statisk har ingen som helst analysering och antar alltid att hoppet aldrig tas, och därmed att nästa instruktion alltid laddas. Mer avancerad statisk gissning analyserar destinationsaddressen och antar att hoppet alltid tas om utrycket hoppar bakåt i koden"(tidigare address) och att hoppet aldrig tas om utrycket har en address längre fram i koden. Detta för att optimisera för loopar som ofta hoppar tillbaka och är mer ofta tagen. 2.2 Dynamic branch prediction Dynamisk branch prediction samlar information vid körning av programmet om tidigare tagna val och gissar därutifrån baserat på vad som tidigare hade varit rätta val. 2.2.1 One-level prediction En 1-bit's räknare kommer ihåg vilket val var det rätta vid förra hoppet, och tar samma igen vid framtida hopp. Detta har en mycket hög miss-ratio. En 2-bit's räknare är en tillståndsmaskin som kommer ihåg dom två sista hoppen, och är därför minde kännslig mot mindre avvikelser. Två hopp tagna och ett hopp inte taget resulterar i att nästa hopp fortfarande tas p.g.a det tidigare mönstret. 3
2.2.2 Two-level prediction Andragrads gissning sparar tidigare tagna val i en histora-tabell som är i formen av ett shift register. Fördelen med andragrads analysering är att den snabbt kan lära sig nya repetitiva mönster. Historietabellen sparar dom n senaste valen och använder en förstagradsräknare för varje möjlig mod 2, n historiekombination. 2.2.3 Loop-identiering I en villkorlig loop identieras den sista hopp-instruktionen i loopen. Om loopen repeterar N antal gånger så tas den sista instruktionen N-1 gånger och sedan inte. Ett avbrott som identieras att hoppas många gånger och sedan en gång inte identieras som ett loop-hoppinstruktion, vars beteende kan enkelt identieras men en enkel räknare. 2.3 Neural branch prediction Neurala-nät gissningar använder maskinlärning med vektormatematik för att abstrakt identiera mönster och smart kunna välja om ett hopp ska tas eller inte. Fördelen med att använda förtränad AI är att kunna utnyttja längre historik och intensiv för-träning medans endast kräva linjär resursanvändning. Klassiska problem som andragrads dynamisk identiering kräver exponensiell resursförbrukning. Nackdelen med maskinseende för att avgöra val är fördröjningen vid exekvering av kretsen. Exekveringstiden av neurala nätet är relativt hög jämfört med enkla aritmetiska uträkningar. 3 Sammanfattning Spekulativ exekvering är en optimiseringsteknik som avänder olika sorters analyser för att försöka spå vilken kod som i framtiden kommer exekveras. Detta för att mer eektivt kunna fylla upp CPU'ns pipeline och undvika att processorn måster rulla tillbaka och därmed undvika borttappad tid. 4
Referenser [1] Kocher, P, Genkin, D, Gruss, D, Haas, W, Hamburg, M, Lipp, M, Mangard, S, Prescher, T, Schwarz, M & Yarom, Y 2018, 'Spectre Attacks: Exploiting Speculative Execution', viewed 5 December 2018. [2] Lee, JH, Lee, SE, Yu, HC & Suh, T 2012, 'Pipelined CPU Design With FPGA in Teaching Computer Architecture' IEEE Transactions on Education, vol. 55, no. 3, pp. 341348, viewed 5 December 2018,. [3] 'Computer Architecture and Implementation' 2001, Measurement Science and Technology, vol. 12, no. 10, p. 1744, viewed 5 December 2018. 5