Pipelining: Software Optimeringar Av: Gustaf Lagerblad

Relevanta dokument
Lunds Tekniska Högskola Datorarkitektur med operativsystem EITF60. Superscalar vs VLIW. Cornelia Kloth IDA2. Inlämningsdatum:

Hantering av hazards i pipelines

Datorarkitekturer med operativsystem ERIK LARSSON

Parallellprogrammering i C++ 17 EDT621 Datorarkitekturer med Operativsystem Viktor Lindgren

Pipelining i Intel Pentium II

LUNDS UNIVERSITET. Parallell exekvering av Float32 och INT32 operationer

Spekulativ exekvering i CPU pipelining

Hur det går att minska effektutvecklingen i en processor genom att ändra pipeline

Öka prestanda i Shared-Cache multi-core processorer

Tentamen den 18 mars svar Datorteknik, EIT070

Superscalar Bra: Hårdvaran löser allt: Hårdvara detekterar poten6ell parallellism av instruk6oner Hårdvara försöker starta exekvering (issue) av så

DEC Alpha instruktions Arkitektur

IBM POWER4, den första flerkärniga processorn och dess pipelines.

Software Technology. Josef Svenningsson

Hantering av hazards i multi-pipelines

Forskning och utveckling inom språkteknologi Uppgift 3: Projektförslag Parallelliserad dependensparsning i CUDA

Parallellism i NVIDIAs Fermi GPU

Processor pipelining genom historien (Intel i9-intel i7)

Hyper-Threading i Intelprocessorer

Tentamen den 14 januari 2015 Datorarkitekturer med operativsystem, EDT621, 7,5 poäng

En Von Neumann-arkitektur ( Von Neumann-principen i föreläsning 1) innebär:

Mälardalens högskola

SVAR TILL TENTAMEN I DATORSYSTEM, VT2013

Arm Cortex-A8 Pipeline

Multi-ported cache En rapport om några lösningar till att få flera minnesaccesser simultant.

Parallellism i CDC 7600, pipelinens ursprung

Pipeline hos ARM Cortex-A53 och ARM Cortex-A73

Hyper Threading Intels implementation av SMT. Datorarkitekturer med operativsystem - EITF60. Felix Danielsson IDA2

Datorarkitekturer med operativsystem ERIK LARSSON

Svar till tentamen den 16 december 2013 Datorarkitekturer med operativsystem, EDT621, 7,5 poäng

Schemaläggnings metoderna AMP & SMP i en Multiprocessor

Datorarkitekturer med operativsystem ERIK LARSSON

Cacheminne i en AMD Opteron Processor

Tentamen den 12 januari 2017 Datorarkitektur med operativsystem, EDT621

Prestandapåverkan på databashanterare av flertrådiga processorer. Jesper Dahlgren

PARALLELLISERING AV ALGORITMER PROCESSORER FÖR FLERKÄRNIGA

Metoder och verktyg för funktionssäkerhet

Programmering i C++ En manual för kursen Datavetenskaplig introduktionskurs 5p

What Is Hyper-Threading and How Does It Improve Performance

CDC en jämförelse mellan superskalära processorer. EDT621 Campus Helsingborg av: Marcus Karlsson IDA

Datakom II (MNP) ht 1998 Bengt Ahlgren 1. Vad är speciellt med implementering av kommunikationsprotokoll?

Föreläsning 2 Datastrukturer (DAT037)

Objektorienterad programmering, allmänt

Viktiga egenskaper hos ett program (Meyer): Objektorienterad programmering, allmänt. Vilka egenskaper vill vi att våra program ska ha?

Datorteknik ERIK LARSSON

MESI i Intel Core 2 Duo

Tentamen den 17 mars 2016 Datorteknik, EIT070

SIMD i Intel s P5- baserade Pentium MMX

Tentamen den 9 januari 2018 Datorarkitekturer med operativsystem (EITF60)

F5: Högnivåprogrammering

F5: Högnivåprogrammering

I dag: Blockstruktur, omgivningar, problemlösning

Aktivitetsschemaläggning för flerkärninga processorer

Static vs Dynamic binding Polymorfism. Objekt-orienterad programmering och design Alex Gerdes, 2016

Emil Kristiansson Kurs: EDT621 Delmoment: Rapport. En introduktion till Smart cache

Operativsystem (IS1350) :00-12:00

Fetch-Execute. Datorteknik. Pipelining. Pipeline diagram (vid en viss tidpunkt)

Prestanda och skalbarhet

Inledning. Vad är ett datorprogram, egentligen? Olika språk. Problemlösning och algoritmer. 1DV433 Strukturerad programmering med C Mats Loock

Mer OOP. Variation i typ. Medlen repetition. Generiska klasser. Gränssnitt - Interface. Mer om klasser Några exempel UML

Pipelining i Intel 80486

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 11 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Static vs Dynamic binding Polymorfism. Objekt-orienterad programmering och design (DIT953) Niklas Broberg, 2018

Cacheminne i en Intel Core 2 Duo-processor

Programmerbara kretsar och VHDL 2. Föreläsning 10 Digitalteknik, TSEA22 Oscar Gustafsson Institutionen för systemteknik

Introduktion till programmering. Programspråk och paradigmer

Värmedistribution i plåt

Datorteknik ERIK LARSSON

Hannes Larsson - IDA 2, LTH Campus Helsingborg. NEC V R 4300i. Interlock-handling EDT621

Symboler och abstrakta system

Logging Module into the PRIME Core

Cacheprobe: programbibliotek för extrahering av cacheminnesparametrar

FÖRELÄSNING 8 INTRODUKTION TILL DESIGN AV DIGITALA ELEKTRONIKSYSTEM

Datorteknik. Föreläsning 6. Processorns uppbyggnad, pipelining. Institutionen för elektro- och informationsteknologi, LTH. Mål

Tentamen den 14 januari 2016 Datorarkitektur med operativsystem, EDT621

Quine McCluskys algoritm

1.1 Runnable och Thread

Grunderna i stegkodsprogrammering

Teoretisk del. Facit Tentamen TDDC (6)

Facit Tentamen TDDC (7)

JavaScript Block Editor:

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 3 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Datorarkitekturer med operativsystem ERIK LARSSON

Teoretisk del. Facit Tentamen TDDC (6)

PARALLELL OCH SEKVENTIELL DATABEHANDLING. Innehåll

Grundläggande datavetenskap, 4p

Tentamen: Programutveckling ht 2015

Föreläsning 2. Operativsystem och programmering

TDDIU81. Processer och trådar. Andreas Dahlberg, Jonathan Doherty, Tony Magnusson, Patrik Ottosson, Rasmus Siljedahl

Tillämpad Programmering (ID1218) :00-13:00

Objektorienterad programmering Föreläsning 2

Ett generellt träd är. Antingen det tomma trädet, eller en rekursiv struktur: rot /. \ /... \ t1... tn

Ämnesområden. Examensarbete inom datavetenskap (1DV41E) Martin Fredriksson

32 Bitar Blir 64 Sammanfattning

MESI-Protokollet. Richard Elvhammar. Lund Universitet 4/12-16

Ännu mera träd: 2-3-träd, B-träd, rödsvarta träd, träd Weiss, avsnitt 4.7, 11.5, 12.2, etc.

Datastrukturer och algoritmer. Innehåll. Tabell. Tabell - exempel. Gränsyta till Tabell. Tabell. Modell. Hashtabell Relation, lexikon.

Digitala System: Datorteknik ERIK LARSSON

Komma över Memory wall med 3D stacked minne LTH Ingenjörshögskolan vid Campus Helsingborg Institutionen för datavetenskap

Transkript:

1 Pipelining: Software Optimeringar Av: Gustaf Lagerblad Abstrakt Denna rapport är en sammanfattning av tre vetenskapliga artiklar som beskriver olika metoder för att optimera software pipelining momentet i pipelining processer. I A Simple, Verified Validator beskriver Jean-Baptiste Tristan och Xavier Leroy (2010) en algoritm som de har utvecklat som kan användas som en validator av kod för software pipelining. I An Automatic Parallel-Stage Decoupled Software Pipelining Parallelization Algorithm Based on OpenMP framför Xiaoxian Liu, Rongcai Zhao, Lin Han, och Peng Liu (2013) deras lösning på problemet är att de flesta processorerna idag har flera kärnor men många program är skrivna så att det ska köras på enkel kärnade processorer. De försöker lösa detta problemet genom att implementera en decoupler av koden för bättre anpassa den till att sätt in i en software pipeline. Det som presenteras i A Software Pipelining Algorithm in High-Level Synthesis for FPGA Architectures av Lei Gao, David Zaretsky, Gaurav Mittal, Dan Schonfeld och Prith Banerjee (2009) är hur man kan optimera FPGA arkitektur genom att implementera en software pipeline på hög nivå. De framställer denna optimeringen genom att modifiera modulo algoritm. Inledning I artikeln av Jean-Baptiste Tristan och Xavier Leroy (2010) beskriver de ett verktyg som är baserats på ett huvudkoncept. Detta koncept kan förenklas till att man ska gå från ett block av kod i en högre nivå till ett block av koden som ska in i processors pipeline. Från den slutsatsen skapade de algoritm. Denna algoritm anser Jean-Baptiste Tristan och Xavier Leroy (2010). vara så pass enkel att den kan bli implementerad i fler moment angående software pipelining. De menar att det kan användas för att optimera utvecklingsprocessen med att använda den i en debugger. Algoritmen anses av Jean-Baptiste Tristan och Xavier Leroy (2010). vara också tillräckligt kraftfull för att implementeras i kompilatorer. Xiaoxian Liu et al. (2013) presenterar i deras artikel An Automatic Parallel-Stage Decoupled Software Pipelining Parallelization Algorithm Based on OpenMP sätt att optimera program exekveringstid genom att översätt enkeltrådade applikationer till flertrådade. Deras givna anledning är på grund av att prevalensen av fler kärnade processorer och att mycket av dagens program är skrivna så att applikationen ska exekveras på en enkeltrådade processor. Att gå från enkel till flertrådade enligt Xiaoxian Liu et al. (2013) skapar problem med kontrollflödet, rekursiva datastrukturer och generella pekare. Deras lösning är att använda sig av en algoritm som frikopplar koden så at den kan struktureras om till att passa med ett parallellt pipelinesystem.

2 Det som presenterats i Lei Gao et al. artikel A Software Pipelining Algorithm in High-Level Synthesis for FPGA Architectures är deras modifiering av modulo schemaläggnings algoritm för högnivåsyntes för FPGA-arkitekturer. Lei Gao et al. variant på algoritmen är inriktad på att förbättra prestanda av FPGA genom att implementera en software pipeline. De problem som Lei et al. försöker lösa i deras modifiering av modulo algoritmen är pipeline får delar som blir beroende av varandra och så sätt uppkommer problem när en enhet vill ha information av en den enhet som fråga och skapar en paradox. Ytterligare ett problem enligt dem som uppkommer är att den klassiska implementationen av algoritmen inte använder livstids hål eller tillfälliga hål i minnesoperationer med hänsyn till att sänka intervallet mellan start och huvud blocket av kod. Bakgrund I början av 1980-talet började software pipelining som koncept enligt Monica S. Lam (1988) i hennes artikel Software Pipelining: An Effective Scheduling Technique for VLIW Machines men även i Jean-Baptiste Tristan och Xavier Leroy (2010) artikel A Simple, Verified Validator for Software Pipelining. Lam beskriver i sin artikel att historian av software pipelining börja med instruction-level parallelism (ILP) och Davidson och Patel studier i hardware pipelining. Davidson och Patel beskriver Monica S. Lam (1988) kom fram till insättning av rätt mängd förseningar och buffrar mellan resurser, till exempel ALU:n, kan öka genomströmningen och ta bort risker av resurskollisioner. De framförde även en algoritm som sätter in minimalt mäng fördröjningar i schemat för att göra så att varje operation exekverar på samma tidsintervall så kallad branch-and-bound algoritmen. Monica (1988) antyder att det är lätt att se paralleller mellan software pipelining och ILP. Hon anser detta på grund av licensen mellan varje operation i en pipeline och varje operation i en loop. Huvudbakgrund A Simple, Verified Validator Enligt Jean-Baptiste Tristan och Xavier Leroy (2010) i deras artikel A Simple, Verified Validator menar de att software pipelining kan delas upp i tre steg. Det första steg väljer man ut en inre loop från koden. Vid det här laget tar de fram några beteckningar av delar av loopen. N är en statisk variabel som dikterar antal gånger loopen körs. B är basic block alltså själva koden som exekveras vid varje genomgång av loopen. De specificerar att B inte får innehålla några funktioner, kallelser eller villkorliga hopp. Sist i som är indexet av hur många gånger loopen har genomförts. Sedan i steg två menar Jean-Baptiste Tristan och Xavier Leroy (2010) är själva omvandlingen av koden från vanlig kod till att vara anpassad för en pipeline. Denna process kallas software pipeliner. Här introduceras ytterligare några variabler S, P, E, μ och δ. Där S är en ny loopkropp kallad steady state. P är koden som utförs innan loopen, på så sätt fylls pipelinen innan loopen startar. Sedan E är koden som exekveras efter loopen så att den kan tömma pipelinen. μ är antal gånger minimalt loopen kan itereras och δ är antal unrolls av S. En genomgång av S är δ iterationer av original loopens B. Sista variabeln som beskrivs är θ som är alla variabler som finns inne i original loopen.

3 Följande i steg tre byts original loopen ut med den nya software pipelined loopen enligt Jean- Baptiste Tristan och Xavier Leroy (2010). Jean-Baptiste Tristan och Xavier Leroy (2010) algoritmen som de framför i deras artikel ligger huvudsakligen i steg två. De använder tidigare använda variabler för att jämföra den nyskapade loopen med original loopen. Deras algoritm gör detta genom att han en funktion som tar fram run-time beteende och därefter jämföra mellan variabler. (1) α(b μ ) θ α(p) och α(e) (2) α(e) och α(b δ ) θ α(s) och α(e) (3) α(b) θ (4) α(b)(i) = Op(addi(1), i 0 ) (5) α(p)(i) = α(b μ )(i) (6) α(e)(i) = α(b δ )(i) (7) α(b)(n) = α(p)(n) = α(s)(n) = α(e)(n) = N 0 Det som kontrolleras i (1) och (2) är att de kodblocken som är observerbara är ekvivalenta. I kontrollen (3) checkar den om de observerbara variablerna θ är de samma i de två blocken. I (4) till (6) säkra att indexen i ökar som förväntat med alla variabler. I sista inspektionen (7) kontrolleras om variabeln N behåller sin statiska karakteristiska egenskap. Om alla av dessa kriterier möts menare Jean-Baptiste Tristan och Xavier Leroy (2010) att software pipeliner har utförts korrekt och att koden kommer utför samma uppgift. A Software Pipelining Algorithm in High-level Synthesis for FPGA Architectures Lei Gao et al. (2009) presenterar i deras artikel A Software Pipelining Algorithm in High- Level Synthesis for FPGA Architectures en software pipelining algoritm för högnivåspråk för FPGA:er. Deras algoritm kan brytas ner till två moment som sätts ihop i själva konstruktionen av software pipelineade koden. De två stegen som beskrivs är analysen av cirkulära beroenden, alltså om variabler är beroende av andra variabler i loopen, och minnes hål under hela loopens livstid samt insättningar av förseningar. Vid Lei Gao et al. (2009) algoritmens analys av cirkulära beroenden börjar med som förra artikeln av Jean-Baptiste Tristan et al. definieras kanterna av loopen och själva huvuddelen av loopen. Sedan är begränsade upprepande MII (minimum initiation interval) uträknat av original loopen. Därefter är loopen unrolled med en faktor av två. Sist så använder deras algoritm sliding window metoden för att gå igenom den förändrade loopen och räknar om den begränsade upprepande MII. Efter dessa moment har utförts så skapar algoritmen en prolog, epilog och en ny loopkropp. Lei Gao et al. skriver att detta ger algoritmen en tidkomplexitet av O(m n) där m är antal tid steg och n antal instruktioner. I värsta fallet är enligt Lei Gao et al när m = n då får funktionen komplexiteten O(n 2 ).

4 I steg två när evalueringen om cirkulära beroenden har utförts går enligt Lei Gao et al. (2009) algoritmen vidare. Detta görs genom att analysera loopen efter minnens hål som existerar över hela loopens gång och skapar en delay på dessa platser i koden för att lösa dem. Denna process börjar med att ta fram alla minnes operationer i loopen och lägger dem i en tabell för att upptäcka minnes hazards. Efter detta så kontrolleras denna tabell och där hazards uppkommer så sätts en delay för att lösa problemet. Detta steg har en tid komplexitet på O(n 2 ) där n är mängden av operationer av loopen. När dessa två steg har exekverats genereras den nya loopen redo att användas i pipelinen. Lei Gao et al. (2009) beskriver i artikeln att om deras software pipeline algoritm generellt ökar prestandan med 35% på icke-pipelined implementationer och med 15% bättre generellt än traditionella modulu schemalagda algoritmer. An Automatic Parallel-Stage Decoupled Software Pipelining Parallelization Algorithm Based on OpenMP I artikeln av Xiaoxian Liu et al. (2013) presenterar de en algoritm som är baserad på OpenMP. Deras version av algoritmen har fokus på att implementera den nya tekniken av Decoupled Software Pipelining (DSWP) men även lägga in Parallel-Stage (PS). Detta medför att Xiaoxian Liu et al. vid utveckling fokuserade på att skapa en två stegs PS-DSWP. Dessa två steg kan ha tre kombinationer S-S, S-P och P-S. Där S är ett sekventiellt steg och P är ett parallellt steg. Algoritmen har två trådar som namnges mästar- och assistanstråd. Första kombinationen S-S exekveras koden enbart sekventiellt och detta medför att koden bara kör på en tråd. Sedan är programmets loopar uppdelade i två delare, en del till mästartråden och en del till assistanstråden. Det som hamnar i mästertråden är alla operationer och uppgifter som ska utföras och assistanstråden utför dem. Därefter delas de två trådarna in i grupper baserat på deras typ av uppgifter. Efter loopen har blivit omvandlad i S-S kan den gå vidare till S-P för att ytterligare öka parallellismen. Detta göras genom att ge assistanstråden uppgiften med att rotera mellan trådarna varje gång loopen gås igenom. Antalet av trådar är inte statiskt och kan vara flera stycken samtidigt. Om kombinationen blir P-S uppkommer problemet av att det inte längre går att använda tidigare metod som förra kombinationerna. Det som utförts först är att dela upp första steget i olika trådar. Sedan är en variabel skapad för att hålla reda på vilken tråd som används. Efter det har utförts så får det andra steget uppgiften att kontrollera operationer och uppgifter. Sist är allt synkroniserat. Efter parallelliseringen av loopen har genomförts så måste koden analyseras för att förhindra och fixa beroenden mellan trådarna. Dessa beroenden är kontroll, data inuti loopen, data utifrån som används inne och data inne som används utifrån. Kontroll beroendet uppkommer när en instruktion behöver data som finns i en annan tråd, alltså när en braching instruktion användas. Xiaoxian Liu et al. (2013) beskriver att detta beroende hanteras av två-stegs processen genom att dela upp utförandet av uppgifterna och instruktionerna i två grupper av trådar. Nästa beroende är när data är beroende av annan data inom samma loop. Detta är lös genom att skapa en ny uppgift som underlätta detta problem genom att använda metoden datadelnings firstprivate clause från OpenMP. Det löser problemet genom att spara den mängden

5 av variabler och håller de uppdaterade mellan trådarna. På samma sätt löses beroendet med data som finns utanför loopen som används inuti. Beroende-problemet med variabler som finns inuti loopen och ska användas utanför hanteras på ett liknade sätt som data inne i loopen. Istället för firstprivate clause används lastprivate clause som skickar tillbaka den till huvud tråden. Sedan när OpenMP PS-DSWP transformationen ska implementeras skapas en Program Dependence Graph (PDG) av loopen, där basic blocket är en egen node jämförelsevis med andra implementationer enligt Xiaoxian Liu et al. (2013) Därefter är basic blocken indelat baserad på vilken komponent de använd mest. Om det finns fler än en komponent som används huvudsakligen samlas alla i en nod. Om det finns bara en komponent som används huvudsakligen så stoppas implementationen på grund av att den inte kan bli uppdelad i flera trådar. Efter detta så valideras den nya loopen genom att lösa ett heuristiskt problem. Med Xiaoxian Liu et al. (2013) version av algoritmen beskriver de att de fick en maximal förbättring på exekveringstiden på 2,07 gånger snabbare och generellt fick de 1,39 gånger snabbare. Slutsatser I denna rapport gås igenom tre vetenskapliga artiklar som kan användas för att förbättra prestandan av software pipelinig steget. Denna rapport kan förbättras genom att göra en djupare analys av dessa artiklar och ämnet i helhet. Även kan det noteras att det finns en stor mängd av andra sätt att optimera software pipeling steget. Referenser Tristan, J. B. & Leroy, X. (2010). A Simple, Verified Validator. POPL '10 Proceedings of the 37th annual ACM SIGPLAN-SIGACT symposium on Principles of programming language,45(1), ss. 83-92. doi:10.1145/1707801.1706311 Liu, X., Zhao, R.,Han, L. & Liu, P. (2013). An Automatic Parallel-Stage Decoupled Software Pipelining Parallelization Algorithm Based on OpenMP. 2013 12th IEEE International Conference on, Trust, Security and Privacy in Computing and Communications, IEEE International Conference, ss. 1825-1831. doi: 10.1109/TrustCom.2013.227 Lei Gao, Zaretsky, D., Mittal, G., Schonfeld, D., Banerjee, P. (2009). A software pipelining algorithm in high-level synthesis for FPGA architectures. 2009 10th International Symposium on Quality Electronic Design, Quality of Electronic Design, 2009. ISQED 2009. Quality Electronic Design, ss. 297-303. doi: 10.1109/ISQED.2009.4810311 Lam, M. (1988). Software pipelining: an effective scheduling technique for VLIW machines. ACM / SIGPLAN Notices, ss. 318-328, 23(7). doi: 10.1145/960116.54022