Konstrukce podporující polyedrický model - Frameworks supporting the polyhedral model

Použití polyedrický model (nazývané také polytop model) v rámci a překladač vyžaduje software, aby reprezentoval objekty tohoto rámce (sady bodů s celočíselnou hodnotou v oblastech různých prostorů) a prováděl s nimi operace (např. testování, zda je sada prázdná).

Další podrobnosti o objektech a operacích v tomto modelu a příklad týkající se modelu s programy, které se kompilují, najdete na stránce mnohostěnného modelu.

Je jich mnoho rámce podporující polyedrický model. Některé z těchto rámců používají k provádění mnohostěnných operací jednu nebo více knihoven. Jiné, zejména Omega, kombinují vše do jednoho balíčku. Některé běžně používané knihovny jsou Omega Library[1] (a novější vidlice),[2] piplib,[3][4] PolyLib,[5][6] PPL,[7] ostrov,[8]generátor kódů Cloog polyhedral,[9][10] a knihovna barvinok pro počítání celočíselných řešení.[11]Z těchto knihoven se PolyLib a PPL zaměřují hlavně na racionální hodnoty, zatímco ostatní knihovny se zaměřují na celočíselné hodnoty. gcc se nazývá grafit.[12] Máňa[13] poskytuje mnohostěnné optimalizace pro LLVM a R-Stream[14] má polyedrický mapovač od ca. 2006.

Společné silné stránky

Polyedrické rámce jsou navrženy tak, aby podporovaly techniky překladačů pro analýzu a transformaci kódů s vnořenými smyčkami a vytvářejí přesné výsledky pro hnízda smyček s hranicemi afinních smyček a dolními indexy ("Statické ovládací prvky" programů). Mohou být použity k reprezentaci a uvažování popravy (iterace) příkazů, spíše než zacházet s příkazem jako s jedním objektem představujícím vlastnosti všech provedení daného příkazu. Polyedrické rámce obvykle také umožňují použití symbolických výrazů.

Polyedrické rámce lze použít pro analýzu závislostí pro pole, včetně tradiční analýzy aliasů i pokročilejších technik, jako je analýza toku dat v polích nebo identifikace podmíněných závislostí. Mohou být také použity k reprezentaci transformace kódu a poskytují funkce pro generování transformovaného kódu v jazyce na vysoké úrovni. Systémy transformace a generování obvykle zvládnou nedokonale vnořené smyčky.

Příklad pro srovnání polyedrických rámců s předchozí prací

Porovnat polyedrický model založený na omezeních s předchozími přístupy, jako je individuální smyčkové transformace a unimodulární přístup zvažte otázku, zda můžeme paralelizovat (provádět současně) iterace následující nepřirozené, ale jednoduché smyčky:

pro i: = 0 na N dělat      A (i): = (A (i) + A (N-i)) / 2

Přístupy, které nemohou představovat symbolické pojmy (jako je například smyčka invariantní množství N ve smyčce vázané a dolní index), nemohou uvažovat o závislostech v této smyčce. Budou buď konzervativně odmítat paralelně jej spouštět, nebo v některých případech spekulativně spouštět úplně paralelně, určovat, že to bylo neplatné, a znovu jej spustit postupně.

Přístupy, které zpracovávají symbolické výrazy, ale představují závislosti pomocí směrových vektorů nebo vektorů vzdáleností, určí, že smyčka i nese závislost (neznámé vzdálenosti), protože například když N = 10 iterace 0 smyčky zapíše prvek pole (A (0) ), který bude čten v iteraci 10 (jako A (10-10)) a načte prvek pole (A (10-0)), který bude později přepsán v iteraci 10 (jako A (10)). Pokud víme jen to, že smyčka i nese závislost, nemůžeme ji znovu bezpečně spustit paralelně.

Ve skutečnosti existují pouze závislosti od první iterace N / 2 do poslední N / 2, takže můžeme tuto smyčku provést jako sekvenci dvou plně paralelních smyček (od 0 ... N / 2 a od N / 2 + 1 ... N). Charakterizaci této závislosti, analýzu paralelismu a transformaci kódu lze provést z hlediska instančních informací poskytovaných jakýmkoli polyedrickým rámcem.

Instanční analýza a transformace umožňuje polyedrickému modelu sjednotit další transformace (jako je rozdělení indexové sady, loupání smyčky, obklady, fúze nebo štěpení smyčky a transformace nedokonale vnořených smyček) s těmi, které jsou již sjednoceny unimodulárním rámcem (například smyčka výměna, zkosení a obrácení dokonale vnořených smyček). Rovněž stimuloval vývoj nových transformací, jako je segmentace iteračního prostoru Pugha a Rossera (instanční verze programového segmentu; všimněte si, že kód nebyl nikdy vydán s knihovnou Omega).

Zajímavější příklad

Autoři polyedrických rámců prozkoumali jednoduchou jednorozměrnost konečný rozdíl rovnice tepla výpočet šablony vyjádřeno následujícím pseudo kód:

pro t: = 0 na T dělat    pro i: = 1 na N-1 dělat        new (i): = (A (i-1) + A (i) + A (i) + A (i + 1)) * .25 // explicitní dopředný rozdíl s R = 0,25 konec    pro i: = 1 na N-1 dělat        A (i): = nový (i) koneckonec

Tento kód zaměňuje mnoho transformačních systémů 20. století kvůli potřebě optimalizovat nedokonalé smyčkové hnízdo. Polyhedrální rámce mohou analyzovat tok informací mezi různými provedeními příkazů ve smyčkovém hnízdě a transformovat tento kód tak, aby současně využíval škálovatelný paralelismus a škálovatelná lokalita.

Re-cap zde, ze dvou přístupů v tomto příkladu, může být hezký, ale zatím si přečtěte jednotlivé články Wonnacott,[15][16] a Sadayappan et al.[17] stejně jako další, kteří tento kód studovali pomocí různých rámců, například Song a Li.[18]

Rozdíly v prezentaci nebo slovní zásobě

Porovnání práce využívající různé rámce komplikují jak technické rozdíly (o nichž pojednává níže), tak rozdíly ve slovní zásobě a prezentaci. Níže jsou uvedeny příklady, které pomáhají při překladu:

Klasifikace závislostí

Polyhedrální rámce podporují analýzu závislostí různými způsoby, pomáhají zachytit dopad symbolických termínů, identifikují podmíněné závislosti a oddělují účinky aliasingu paměti. Účinky aliasingu v paměti byly popsány zejména dvěma způsoby: mnoho autoři rozlišují mezi „skutečnými“ datovými závislostmi (odpovídajícími skutečnému toku informací) od falešných závislostí vyplývajících z aliasingu paměti nebo omezené přesnosti analýzy závislostí.

Publikace projektu Omega používají specifické termíny k identifikaci konkrétních účinků na analýzu. Zachovávají tradiční rozlišení závislostí toku, výstupu a antirezistence na základě typů přístupu k poli (zápis na čtení, zápis na zápis nebo čtení na napsat).Závislosti lze samostatně klasifikovat jako založené na paměti nebo na základě hodnoty - první odpovídá aliasingu paměti a druhá nezahrnuje závislosti přerušené intervenujícími zápisy. test závislosti může produkovat informace, které jsou přesné nebo přibližné, v závislosti na povaze analyzovaného programu a algoritmech použitých v testu. Nakonec budou výsledky analýzy závislostí uvedeny v abstrakce závislostikterý poskytuje určitý stupeň přesnosti.

Například „relace závislostí“ vytvořené Omega testem a „kvasy“ produkované algoritmy Feautriera nebo Maydana a Lama obsahují přesné informace (i když v různých formách) o iteracích smyček zapojených do závislosti. Výsledky kteréhokoli z testů lze převést do tradičnější formy „vektoru závislosti“, ale protože tato abstrakce poskytuje menší přesnost, mnoho informací o závislosti bude ztraceno. Obě techniky produkují přesné informace pro programy s afinní kontrolou a výrazy dolního indexu a musí aproximovat pro mnoho programů mimo tuto doménu (tj. v přítomnosti neafinických indexů, jako jsou indexová pole). Původní práce Feautrier se zaměřila na popis skutečný závislosti, které by byly označovány jako přesné hodnoty závislé na toku Projekt Omega. Projekt Omega také popsal použití jejich algoritmů pro hodnotově závislé výstupy a antirezistence, ačkoli Feautrierovy výtvory by se podle toho mohly snadno také přizpůsobit.

Vizualizace transformací a obkladů

Existuje mnoho způsobů, jak vytvořit vizuální zobrazení procesu transformace a skládání iteračního prostoru. Někteří autoři zobrazují transformace změnou umístění bodů na stránce, v podstatě zarovnáním obrázku s osami souřadnic transformovaného prostoru; v takových diagramech se dlaždice zobrazují jako osově zarovnané obdélníky / obdélníkové tělesa obsahující iterace. Příklady tohoto přístupu lze nalézt v publikacích a transformačně-vizualizačním softwaru Michelle Mills Strout.[19]

Jiní autoři zobrazují různé transformace jako různá provedení, která se pohybují napříč body původního souřadnicového systému v různých úhlech. V takových diagramech se dlaždice zobrazují jako rovnoběžníky / rovnoběžnostěny. Příklady tohoto přístupu lze najít v zkreslení času publikace Davida G. Wonnacotta.[20]

Rozdíly v přístupu nebo stavu implementace

Některé z knihoven zaznamenaly na počátku dvacátých let rozsáhlejší vývoj než knihovna Omega a na mnoha místech mají mnohem propracovanější algoritmy. Zejména uživatelé ohlásili dobré výsledky pomocí generátoru kódu Cloog (jak z hlediska generovaného kódu, tak z hlediska schopnosti kontrolovat kompromisy při generování kódu) a s algoritmy pro počítání celočíselných řešení (Alexander Barvinok je[21] práce vyžaduje vertexový popis polytopu, který není v knihovně Omega podporován).

Existuje několik dalších bodů, ve kterých se rámce liší, konkrétně:

Přesnost a rychlost

Programování celého čísla je NP-kompletní a Maydan ukázali, že problém kontroly aliasingu polí ve vnořených smyčkách s afinními mezemi a dolními indexy je ekvivalentní celočíselnému programování; další operace, jako je analýza toku dat pole, jsou ještě složitější (algoritmy knihovny Omega zpracovávají celý jazyk Presburger Arithmetic, což je O (2 ^ 2 ^ 2 ^ n)). Je tedy zjevně nereálné očekávat přesné rychlé výsledky pro libovolné problémy aliasingu pole nebo toku dat pole, dokonce i přes afinní doménu. Naštěstí mnoho problémů spadá do podmnožiny této domény, kde obecné algoritmy mohou vytvořit přesnou odpověď v polynomiálním čase.[22][23]

Mimo tuto doménu knihovna Omega, piplib a isl zdůrazňují produkci přesného výsledku (s výjimkou případů určitých použití neinterpretovaných funkčních symbolů v Omeze), a to navzdory vysoké složitosti. V některých případech, jako je například eliminace proměnných („projekce“), PolyLib a PPL primárně používají algoritmy pro racionální doménu, a tak vytvářejí aproximaci výsledku pro celočíselné proměnné. Může se stát, že to sníží běžné zkušenosti s knihovnou Omega, ve kterých může malá změna jednoho koeficientu způsobit dramatický posun v reakci na algoritmy knihovny.

Polylib má některé operace, které produkují přesné výsledky Z-mnohostěn (celočíselné body ohraničené mnohostěnem), ale v době psaní tohoto článku byly hlášeny významné chyby.[24] Všimněte si, že v knihovně Omega existují také chyby, včetně spoléhání se na celočíselné typy dodávané s hardwarem a případů úplných aritmetických algoritmů Presburger, které nebyly v knihovně implementovány. Uživatelé, kteří potřebují přesné výsledky pro celočíselné proměnné, si možná budou muset dávat pozor na kteroukoli knihovnu.

Barvinokovy techniky počítání celočíselných řešení vyžadují popis vrcholů (a hraničních paprsků) mnohostěnu, ale poskytují přesnou odpověď způsobem, který může být mnohem efektivnější než techniky popsané Pughem. Barvinokův algoritmus je vždy polynomiální ve vstupní velikosti, pro pevnou dimenzi polytopu a pevný stupeň vah, zatímco „štěpení“ v Pughově algoritmu může růst s hodnotami koeficientů[25] (a tedy exponenciálně, pokud jde o velikost vstupu, navzdory pevné dimenzi, pokud neexistuje nějaký limit na velikosti koeficientů).

Výčet vrcholů

Polyedrické knihovny jako PolyLib a PPL využívají dvojí popis mnohostěnů, a proto přirozeně podporujívýčet vrcholů na (neparametrických) polytopech. Knihovna Omega interně provádí výčet vrcholů během výpočtu konvexního trupu. PolyLib a isl poskytují výčet vrcholů na parametrických polytopech, což je zásadní pro použití Barvinokova algoritmu na parametrické polytopy.

Indikace přibližného výsledku

V některých částech kompilátoru je v určitých případech přijatelný přibližný výsledek. Například když analýza závislosti slouží k vedení transformace smyčky, je obecně přijatelné použít nadmnožinu skutečných závislostí - to může zabránit optimalizaci, ale neumožňuje nelegální transformace kódu. Když knihovna Omega vytvoří přibližnou odpověď, je odpověď odpovídajícím způsobem označena jako horní hranice (např. Prostřednictvím „a NEZNÁMÉ“) nebo dolní hranice (např. Prostřednictvím „nebo NEZNÁMÉ“). Takto neznačené odpovědi jsou přesným popisem sad bodů s celočíselnou hodnotou (kromě případů chyb v softwaru).

Zpracování nelineárních podmínek

Pokud kód obsahuje směs afinních a neafinických výrazů, lze v zásadě použít polyedrické knihovny k získání přibližných výsledků, například jednoduchým vynecháním takových výrazů, pokud je to bezpečné. Kromě toho, že poskytuje způsob, jak označit takové přibližné výsledky, umožňuje knihovna Omega omezené použití „neinterpretovaných funkčních symbolů“ pro jakýkoli nelineární výraz, poskytuje systém, který mírně zlepšuje výsledek analýzy závislostí a (pravděpodobně významněji) poskytuje jazyk pro komunikaci o těchto pojmech (k podpoře další analýzy nebo komunikace s programátorem). Pugh a Wonnacott diskutovali o trochu méně omezené doméně, než je povoleno v knihovně, ale toto nebylo nikdy implementováno (popis existuje ve Wonnacottově disertační práci).

Transitivní uzavírací operace

Některé druhy analýz, například Pugh a Rosser krájení iteračního prostoru, lze nejsnadněji určit z hlediska přechodného uzavření informací o závislosti. Knihovna Omega i isl poskytují operaci přechodného uzavření, která je přesná pro mnoho případů, které vznikají v programech s jednoduchými vzory závislostí. V ostatních případech knihovna Omega produkuje podmnožinu přechodného uzavření, zatímco isl produkuje nadmnožinu. V případě knihovny Omega může být podmnožina sama přibližná, což má za následek horní hranici (označenou) dolní hranice (ne označené) přechodného uzavření. Všimněte si, že výpočet přesného přechodného uzavření je nerozhodnutelný.[26]

Viz také

  • Optimalizace hnízda smyčky
  • Jean-Francois Collard Odůvodnění transformací programu,[27] pokrývá některé společné filozofie těchto projektů.
  • Práce Cédrica Bastoula[28] představuje úvod do polyedrického modelu.
  • Položka „Omega Test“ v připravované Springerově encyklopedii paralelních počítačů[29] popisuje aplikace a algoritmy Knihovny Omega s uvedením hlavních publikací projektu Omega, kde lze nalézt další podrobnosti. Dřívější koncept tohoto obsahu lze nalézt ve formuláři technické zprávy jako Haverford College Computer Science Tech Report.[30]
  • Odkazy na příslušné knihovny open-source jsou uvedeny v prvním odstavci tohoto článku.
  • Reservoir Labs[31] poskytuje „Jolylib“, implementaci Java Polylib atd., která „poskytuje vylepšený výkon, stabilitu a funkce“. Jolylib je k dispozici pro komerční a akademické použití.

Reference

  1. ^ „Rámečky a algoritmy pro analýzu a transformaci vědeckých programů“. Cs.umd.edu. Citováno 2012-08-20.
  2. ^ "Nástroje". Technologie kompilátoru pro optimalizaci výkonu. University of Utah. Citováno 2012-08-20.
  3. ^ Cédric Bastoul. „www.PipLib.org domov programování parametrických celých čísel“. Piplib.org. Citováno 2014-06-04.
  4. ^ Paul Feautrier. Parametrické programování celého čísla. 1988
  5. ^ „Polylib“. Icps.u-strasbg.fr. Citováno 2012-08-20.
  6. ^ Wilde, Doran K. (1993). „Knihovna pro mnohostěnné operace“. technická zpráva. Ftp.irisia.fr.
  7. ^ „PPL“. Bugseng. Citováno 2012-08-20.
  8. ^ "isl - Freecode". Freshmeat.net. Citováno 2012-08-20.
  9. ^ Cédric Bastoul. „www.CLooG.org domov generátoru smyčkové smyčky“. Cloog.org. Citováno 2014-06-04.
  10. ^ Cedric Bastoul. Generování kódu v polyedrickém modelu je snazší, než si myslíte. Mezinárodní konference IEEE PACT'13 o paralelní architektuře a technikách kompilace (2004)
  11. ^ gvy (2007-04-28). "barvinok - freecode". Freshmeat.net. Citováno 2012-08-20.
  12. ^ Sebastian Pop, Albert Cohen, Cedric Bastoul, Sylvain Girbal, Pierre Jouvelot, Georges-André Silber et Nicolas Vasilache. Grafit: Optimalizace smyčky založené na polyedrickém modelu pro GCC. 4. summit vývojářů GCC. Ottawa, Kanada, červen 2006.
  13. ^ „Polly - Polyhedral optimizations for LLVM“. Polly.llvm.org. Citováno 2014-06-04.
  14. ^ Benoit Meister, Nicolas Vasilache, David Wohlford, Muthu Baskaran, Allen Leung a Richard Lethin. Překladač R-Stream. V Encyclopedia of Parallel Computing, David Padua Ed., Str. 1756-1765, Springer, 2011.
  15. ^ David Wonnacott. Dosažení škálovatelné lokality pomocí Time Skewing. International Journal of Parallel Programming 30.3 (2002)
  16. ^ Wonnacott, D. (2000). "Použití zkosení času k eliminaci doby nečinnosti kvůli šířce pásma paměti a omezením sítě". Sborník 14th International Parallel and Distributed Processing Symposium. IPDPS 2000. 171–180. doi:10.1109 / IPDPS.2000.845979. ISBN  0-7695-0574-0. S2CID  9949169.
  17. ^ Uday Bondhugula, Muthu Manikandan Baskaran, Sriram Krishnamoorthy, J. Ramanujam, Atanas Rountev, P. Sadayappan. Automatické transformace pro paralelizaci s minimalizací komunikace a optimalizaci lokality v polyedrickém modelu. CC 2008 - Mezinárodní konference o konstrukci překladačů
  18. ^ Yonghong Song, Zhiyuan Li. Nové techniky obkladů ke zlepšení dočasné mezipaměti lokality. Sborník konference ACM SIGPLAN z roku 1999 o programování a implementaci programovacích jazyků (PLDI)
  19. ^ „Michelle Mills Strout“. Cs.colostate.edu. Citováno 2012-08-20.
  20. ^ „David G. Wonnacott“. Cs.haverford.edu. Citováno 2012-08-20.
  21. ^ "Alexander Barvinok". Math.lsa.umich.edu. 16. 06. 2012. Citováno 2012-08-20.
  22. ^ Pugh, William. „Test Omega: rychlý a praktický celočíselný programovací algoritmus pro analýzu závislostí | Sborník konferencí ACM / IEEE z roku 1991 o superpočítačích“. Portal.acm.org.
  23. ^ Seater, Robert; Wonnacott, Davide. "Analýza toku polynomiálního časového pole | Jazyky a překladače pro paralelní výpočty 2003". Springelink.com. doi:10.1007 / 3-540-35767-X_27. Citovat deník vyžaduje | deník = (Pomoc)
  24. ^ „Rámečky podporující polyedrický model“. lipforge.ens-lyon.fr.[trvalý mrtvý odkaz ]
  25. ^ Verdoolaege, Sven; Seghir, Rachid; Beyls, Krištof; Loechner, Vincent; Bruynooghe, Maurice. „Počítání celých bodů v parametrických polytopech pomocí Barvinokových racionálních funkcí]. Sekce 6.1 pojednává o Pughově metodě a rozštěpení.“ (PDF). Lirias.kuleuven.be.
  26. ^ Wayne Kelly, William Pugh, Evan Rosser, Tatiana Shpeisman. Přechodné uzavření nekonečných grafů a jeho aplikací. Jazyky a překladače pro paralelní výpočty, 8. mezinárodní workshop (LCPC 1995)
  27. ^ Jean-Francois Collard, Odůvodnění transformací programu,, 2003 Springer-Verlag
  28. ^ Cedric Bastoul. Zlepšení lokality dat v programech statické kontroly [1]
  29. ^ „Encyclopedia of Parallel Computing“. Springer.com. Citováno 2012-08-20.
  30. ^ Wonnacott, David G. „Retrospektiva projektu Omega“ (PDF). Haverford Computer Science Tech Report 2010-01. Haverford College.
  31. ^ „Reservoir Labs, Inc“. Reservoir.com. Citováno 2014-06-04.