Marcus Havrell Dahl - 941206 Arm Cortex-A8 Pipeline Sammanfattning Arm Cortex-A8 processorn är en energisnål men samtidigt kraftfull enhet. Beroende på implementationen kan den ha en klockhastighet på 1GHz och samtidigt en energiförbrukning på endast 2W (Patterson & Hennessey, 2014), vilket innebär att processorn är lämpad för mobila enheter som till exempel surfplattor, spelkonsoler eller mobiltelefoner. Den höga prestandan är en följd av att den använder många nya eller förbättrade teknologier, som till exempel NEON SIMD, Thumb2 och en 13-stegs pipeline. Pipelinen är en 13 steg djup superscalar dual-in order issue integer pipeline. Uppdelad i tre delar kan de olika stegen namnges enligt: fetch instruction, decode instruction och execute instruction där Fetch Instruction delen består av tre steg, Decode Instruction består består av 5 steg och Execute Instruction delen består det 6 steg. En pipeline i sig behöver inte betyda en stor förbättring för processorn då en djup men dåligt designad pipeline inte alls behöver göra processorn snabbare. Därför finns det i Arm Cortex-A8 tillhörande teknologier för att förstärka den djupa pipelinen och processorn än mer. Inledning ARM Cortex-A8 processorn var den första av Cortex-designerna från ARM Holdings, där ARM står för Advanced RISC Machine, att bli anammad på en stor skala för hemelektronik, såsom mobiltelefoner, spelkonsoler och surfplattor (Gupta, 2013). Processorns prestanda har ett stort spann beroende på implementationen. Detta på grund av att ARM endast skapar designen och licensierar den, för att sedan lämna själva implementationen till olika partners. Beroende på implementationen kan den leverera över 2000 DMIPS (Dhrystone MIPS, som anses vara ett slags mått för CPU-prestanda (Weiss, 2002)) för hög-krävande consumer applications, medans den å andra sidan för mobila apparater, där energiförbrukning har ett stort fokus, endast behöver förbruka 300mW (ARM Developer).
ARM Cortex-A8 är den första ARM processorn att inkorporera all nya teknologier tillgängliga i ARMv7 arkitekturen. Några av dom nya teknologierna är till exempel NEON SIMD, Jazelle RCT och en 13-stegs pipeline. Jämfört med äldre modeller, som bara haft en integer pipeline (Design & Reuse, 2018), ser Arm Cortex-A8s pipeline annorlunda ut. Förutom att den är 13 steg djup har den även tillhörande enheter som förstärker pipelinen, bland annat en två-nivå global history branch predictor som används för att minimera förluster kopplade till branching. Eftersom hela processorn och alla nya teknologier är alldeles för omfattande att skriva om kommer därför en begränsning att ske till att innefatta processorns pipeline. Pipeline Arm Cortex-A8 processorn används oftast i batteridrivna portabla enheter som till exempel mobiltelefoner eller surfplattor. Eftersom processorn har en Reduced Instruction Set Computing(RISC) -arkitektur behöver den en signifikant mängd färre transistorer jämfört med andra traditionella processorer som finns i datorer. På grund av de relativt få antalet transistorer krävs det därför en minimal mängd kraft för att driva processorn, endast 2 Watt, jämfört med till exempel en Intel Core i7 920 som använder 130 Watt (Patterson & Hennessy, 2014). Som tidigare nämnt kommer fokus läggas på pipelinen i processorn. Arm Cortex-A8 har en 13-stegs pipeline med superscalar arkitektur, med förmågan att dynamiskt behandla flera instruktioner åt gången. Pipelinen är även av typen static in-order, i den benämningen att instruktioner hämtas, exekveras och skickas i den ordningen. Detta för att hålla nere energiförbrukningen, då andra exekveringspolicies som out-of-order, kan kräva omfattande mängder logik som i sin tur höjer energiförbrukningen. Som syns på bilden har pipelinen 13 steg, vilka kan delas upp i tre delar: tre stycken Fetch Instruction steg, fem Decode Instruction, och slutligen sex stycken Execute Instruction steg, med load och store inkluderat. Anledningen till att pipelinen bara anses har 13 steg istället för 14 som uppmärksamma läsare kanske har märkt, är på grund av att detta första fetch-steget, F0, inte räknas med eftersom det endast genererar adresser (Design & Reuse, 2018).
Källa: ARM Developer 2018 Tack vare superscalar arkitekturen kan de tre första stegen hämta 2 instruktioner åt gången, vilket i sin tur ökar potentialen för en högre instruktion per cykel ratio. Instruktionerna hämtas från en 12-instruction entry prefetch buffer som processorn försöker hålla fylld för att öka prestandan. Prefetch buffern fungerar på så sätt att den hämtar instruktioner från ett långsammare minne till sig självt, då instruktioner kan läsas snabbare från buffern. Efter instruktionerna har hämtats, läggs de i en buffer för framtida konsumtion av decode pipelinen. I den andra delen av pipelinen som består av fem steg, hämtas de lagrade instruktionerna och avkodas för att processorn skall veta vad instruktionerna innebär. I denna delen bestäms beroenden mellan de nyligen hämtade instruktionerna, vilket i sådana fall skulle innebära att de behövs exekveras sekventiellt. Här bestäms också till vilken pipeline i execute-delen som instruktionerna skall skickas.
Den sista delen (Execute Instruction) består av sex steg. I denna delen finns det en adress generator för load och store instruktioner, två symmetriska Arithmetic Logical Unit(ALU) pipelines och en pipeline för multiplikation. Exekveringsenheten genererar också virtuella adresser för load och store, bidrar med formaterad data för stores, och forwardar data och flaggor. Den kan även bearbeta branches och andra ändringar i instruktionsflödet för att sedan utvärdera villkoren för dessa. Sista stegen i exekveringsdelen består av load/store pipelinen. Här är instruktionernas ändstation där datan som genererades av instruktionerna antingen sparas undan i andra delar av processorn, till exempel ett långsammare minne (store) eller används för att till exempel laddas in i register för snar framtida användning (load). Detta känns igen genom instruktioner som LOAD F1, (R2) eller STORE (R1), F4. Branch Prediction För att förbättra prestandan hos en processor genom en pipelining, är en djupare pipeline inte det enda som spelar roll. Signifikant speedup av processorn genom pipelining erhålls bara om pipelinen är konstruerad på rätt sätt. Några saker som innefattar hur bra en pipeline är kan anses vara balanseringen mellan stegen, alltså att tiden för varje steg är lika, då långsamma steg skulle skapa en förstoppning. En annan avgörande del av prestandan hos en pipeline är en enhet för branch predictions. Eftersom en pipeline delar upp en instruktion i flera delar kan det uppstå olika problem, hazards i pipelinen. Dessa problem innefattar Strukturella hazards, data hazards och kontroll hazards. Den klassiska formeln för speed-up genom pipelining lyder enligt: Tid mellan instruktioner = tid mellan instruktioner (ej pipelined) / antal pipeline steg. Men denna formel kan intetsägas av tidigare nämnda problem som obalans och hazarder. ARM Cortex-A8 processorn innehåller Program Flow Prediction hårdvara, även känt som Branch Prediction (BP). BP används för att gissa när branches tas och inte tas, för att undvika hazarder som orsakar stalls eller stop i pipelinen. Med BP avaktiverat resulterar alla tagna branches i en 13-cykel förlust, medans en aktiverad BP innebär att all felgissade branches också resulterar i en 13-cykel förlust. Förlusten innebär att det blir en pipeline flush vilket innebär att pipelinen töms, och all följande instruktioner invalideras.
För att minimera förlusten skapat av olika problem sitter BP:ns hårdvara i början av instruktionspipelinen. Denna hårdvaran består av en 512 entry 2-level set associative Branch Target Buffer (BTB). BTB är en slags cache som används för att säkerställa att instruktionen som skall utföras verkligen är en branch-instruktion och inget annat. En annan del av hårdvaran är en 4K Global History Buffer (GHB) som används av en möjlig prefetch algoritm för att reducera utdaterad data, öka chansen för rätt gissning och för att reducera trafik till minnet genom att innehålla en historik över tidigare missar (Nesbit, Smith, 2004). Det finns även en 8-entry Return Stack (RS) som används för return-adresser till subrutiner. Slutsats Arm Cortex-A8 var under tiden då den först kom ut på marknaden den mest energieffektiva och snabbaste processorn som skapats, jämfört med andra ARM modeller. Detta tack vare många nya mikro arkitekturer som till exempel den integrerade level-2 cachen, NEON SIMD eller den nya dual issue, in-order superscalar pipeline som var betydligt djupare än i föregående ARM processorer. En bra designad pipeline är uppenbarligen något som ökar prestandan i processorer signifikant. Dock krävs det inte bara en djupare pipeline för att förbättra prestandan utan även rätt kringutrustning, som till exempel branch prediction units. Källförteckning Alan R. Weiss - Dhrystone Benchmark: History, Analysis, Scores and Recommendations - 2002. Rahul Gupta 2013 - ARM Cortex: The force that drives mobile devices. https://www.themobileindian.com/news/arm-cortex-the-force-that-drives-mobile-devices-7980 Kyle J. Nesbit, James E. Smith - Data cache prefetching using a global history buffer - 2004.
David A. Patterson, John L. Hennesey - Computer Organization and Design - The Hardware/Software Interface 5th Edition 2014. ARM Developer 2018. Cortex-A8 Technical Reference Manual. Hämtad 2018-12-05. https://developer.arm.com/docs/ddi0344/k Design & Reuse 2018. Architecture and Implementation of the ARM Cortex-A8 Microprocessor. Hämtad 2018-12-05. https://www.design-reuse.com/articles/11580/architecture-and-implementation-of-the-arm-cortex -a8-microprocessor.html