Nya kompilatorer erbjuder ett stort antal flerskiktsoptimeringar som riktar sig till olika kodsegment i ett program. Att välja bland dessa optimeringar kan avsevärt påverka prestandan hos den kod som optimeras. Valet av rätt uppsättning av kompilatorer optimeringar för ett visst kodsegment är ett mycket svårt problem, men att hitta den bästa beställningen av dessa optimeringar ger ytterligare komplexitet. Att hitta den bästa beställningen innebär ett långvarigt problem i sammanställningsforskningen, som kallas fas-order problemet. Det traditionella tillvägagångssättet att bygga kompilatorheuristik för att lösa detta problem kan helt enkelt inte hantera den enorma komplexiteten i att välja rätt beställning av optimeringar för varje kodsegment i en applikation. Denna artikel föreslår en automatisk optimering ram vi kallar MiCOMP, som Mitigates Compiler fas-ordering problem. Vi utför fasbeställning av optimeringarna i LLVM:s högsta optimeringsnivå med hjälp av optimeringsundersekvenser och maskininlärning. Tanken är att samla optimeringspassen från LLVM:s O3-inställning i olika kluster för att förutsäga hastigheten hos en komplett sekvens av alla optimeringskluster istället för att behöva hantera beställningen av mer än 60 olika individuella optimeringar. Den prediktiva modellen använder (1) dynamiska funktioner, (2) en kodad version av kompilatorn sekvens, och (3) en prospektering heuristic för att ta itu med problemet. Experimentella resultat med hjälp av LLVM-kompilatorramverket och Cbench-sviten visar effektiviteten hos de föreslagna kluster- och kodningsteknikerna för applikationsbaserad omordning av passerkort, samtidigt som man använder ett antal prediktiva modeller. Vi utför statistisk analys på resultaten och jämföra mot (1) slumpmässig iterativ sammanställning, (2) standard optimeringsnivåer, och (3) två senaste förutsägelser tillvägagångssätt. Vi visar att MiCOMPs iterativa sammanställning med dess undersekvenser kan nå en genomsnittlig prestandahastighet på 1,31 (upp till 1,51). Dessutom visar vi att MiCOMP:s förutsägelsemodell överträffar -O1, -O2 och -O3 optimeringsnivåer inom bara några få förutsägelser och minskar felprocenten till endast 5%. Sammantaget uppnår den 90% av den tillgängliga upphastigheten genom att utforska mindre än 0,001% av optimeringsutrymmet. utoronto.ca; A. Bignoli, G. Palermo, och C. Silvano, DEIB, Via G. Ponzio 34/5, Milano, Italien; e-post: andrea.bignino@mail. polimi.it, {gianluca.palermo, cristina.silvano}@polimi.it; S. Kulkarni och J. Cavazos, EEGIS, Newark, DE 19716, USA; e-post: {ameer, cavazos}@udel.edu. Tillstånd att göra digitala eller papperskopior av hela eller delar av detta arbete för personligt bruk eller klassrum beviljas utan avgift, förutsatt att kopiorna inte görs eller distribueras för vinst eller kommersiella fördelar och att kopiorna är försedda med detta meddelande och den fullständiga hänvisningen på första sidan. Upphovsrätt till delar av detta verk som ägs av andra än ACM måste hedras. Abstraktering med kredit är tillåten. För att kopiera på annat sätt, eller återpublicera, för att posta på servrar eller för att omfördela till listor, krävs tidigare specifik behörighet och/eller avgift. Begär tillstånd från authoritys@acm.org.  Compiler utvecklare designoptimering passerar för att omvandla varje kod segment av ett program för att generera en optimerad version av ett program. Kodsegmentet kan vara ett basblock, en funktion, en källkodsfil eller hela programmet. Optimeringarna kan tillämpas i olika skeden av sammanställningsprocessen. Optimering källkod för hand är en tråkig och lång uppgift; därför, kompilator optimeringar tillhandahålls för att automatiskt omvandla koden. Dock är kodoptimering beroende av programmeringsspråk, program och arkitektur. Dessutom är ordet optimering en felsägare och det finns ingen garanti för att den omvandlade koden kommer att prestera bättre än den ursprungliga versionen. Aggressiva optimeringar kan till och med försämra kodens prestanda. Förstå beteendet hos optimeringar, deras faktiska effekter på källkoden, och interaktionen av optimeringar till varandra är komplexa modelleringsproblem. Problemet är särskilt svårt eftersom kompilatorutvecklare måste hantera hundratals olika optimeringar som kan tillämpas under de olika sammanställningsfaserna och detta skapar fasorderproblem. Fasregleringsproblemet har varit ett öppet problem inom kompileringsforskningen i många årtionden [32, 56]. Forskarnas oförmåga att lösa fasregleringsproblemet har lett till betydande framsteg i det enklare problemet att välja rätt uppsättning av optimeringar, men även detta problem har ännu inte lösts [8, 12, 15]. Denna process för att välja rätt optimeringar för varje kodsegment görs vanligtvis manuellt, och sekvensen av optimeringar är konstruerad med liten insikt om samspelet mellan föregående kompilatoroptimeringar i sekvensen. Manuellt bygga heuristik för att välja rätt sekvens av kompilatoroptimeringar är ogenomförbart med tanke på det ständigt växande antalet kompilatoroptimeringar som integreras i kompilatorramar. Som ett exempel har GCC mer än 200 kompilator passerar, och LLVM: s cang och LLVM: s opt har mer än 100 omvandlingar. Dessutom tillämpas dessa optimeringar vid mycket olika faser av sammanställningen, inklusive analyspass och loop-nestpass. De flesta optimeringsflaggor är avstängda som standard, och kompilatorutvecklare förlitar sig på programutvecklare för att veta vilka optimeringar som kommer att gynna deras kod. Compiler utvecklare ger standard optimeringsnivåer, t.ex., -O1, -O2, -Os, för att införa en fast sekvens av kompilator optimeringar som i genomsnitt kan ge bra prestanda på en uppsättning riktmärken som kompilatorn utvecklare testade. Att hitta den bästa beställningen av kompilatoroptimeringar kan ha betydande fördelar för prestandamått som exekveringstid, strömförbrukning och kodstorlek. För detta ändamål är användning av fördefinierade optimeringar vanligtvis inte tillräckligt bra för att ge bästa möjliga tillämpningsspecifika prestanda. I den här artikeln föreslår vi ramverket för MiCOMP för att minska komplexiteten i fasordningsproblemet. Hittills finns det två möjliga tekniker som vi kan använda för att förutsäga bra optimeringsbeställningar för koden som optimeras:
Iterativ sammanställning har visat sig vara en effektiv teknik för att ta itu med både problemen med att välja rätt uppsättning transformationer och för att beställa dem för att maximera deras effektivitet REF.
MiCOMP: Mitigating the Compiler Phase-Ordering Problem Using Optimization Sub-Sequences and Machine Learning
{'venue': 'TACO', 'journal': None, 'mag_field_of_study': ['Computer Science']}