Nástroj pro automatickou paralelizaci - Automatic parallelization tool

Po několik let byl paralelní hardware k dispozici pouze pro distribuované výpočty, ale v poslední době se stává dostupným i pro počítače nižší třídy. Proto se stalo nevyhnutelným, aby softwaroví programátoři začali psát paralelní aplikace. Je zcela přirozené, že programátoři uvažují postupně, a proto jsou méně obeznámeni s psaním vícevláknových nebo paralelních zpracovatelských aplikací. Paralelní programování vyžaduje řešení různých problémů, jako je synchronizace a zamezení zablokování . Programátoři vyžadují pro psaní takových aplikací další odborné znalosti, kromě svých odborných znalostí v doméně aplikací. Programátoři proto raději píší sekvenční kód a většina populárních programovacích jazyků to podporuje. To jim umožňuje více se soustředit na aplikaci. Proto existuje potřeba převést tyto sekvenční aplikace na paralelní pomocí automatizovaných nástrojů. Potřeba není také triviální, protože je třeba znovu použít a paralelizovat velké množství původního kódu napsaného v posledních několika desetiletích.

Potřeba automatické paralelizace

Minulé techniky poskytovaly řešení pro jazyky jako FORTRAN a C; to však nestačí. Tyto techniky se zabývaly paralelizačními částmi s konkrétním systémem, jako je smyčka nebo konkrétní část kódu. Identifikace příležitostí pro paralelizaci je zásadním krokem při generování vícevláknové aplikace. Tato potřeba paralelizovat aplikace je částečně řešena nástroji, které analyzují kód, aby využily paralelismu. Tyto nástroje používají buď techniky kompilace času, nebo techniky běhu . Tyto techniky jsou integrovány v některých paralelizujících kompilátorech, ale uživatel musí identifikovat paralelní kód a označit kód speciálními jazykovými konstrukcemi. Kompilátor identifikuje tyto jazykové konstrukce a analyzuje označený kód pro paralelizaci. Některé nástroje paralelizují pouze speciální formu kódu, jako jsou smyčky. Proto je vyžadován plně automatický nástroj pro převod sekvenčního kódu na paralelní kód.

Obecný postup paralelizace

1. Proces začíná identifikací sekcí kódu, o kterých se programátor domnívá, že mají možnosti paralelismu. Tento úkol je často obtížný, protože programátor, který chce kód paralelizovat, původně tento kód nenapsal. Další možností je, že programátor je v doméně aplikace nový. Ačkoli se tedy tato první fáze procesu paralelizace zdá být zpočátku snadná, nemusí to tak být.

2. Další fází je užší výběr částí kódu z identifikovaných, které jsou ve skutečnosti paralelizací. Tato fáze je opět nejdůležitější a nejobtížnější, protože zahrnuje spoustu analýz. Obecně je obtížné analyzovat kódy v C / C ++, kde jsou zahrnuty ukazatele. K určení, zda je část kódu závislá na jakémkoli jiném kódu, je zapotřebí mnoho speciálních technik, jako je analýza aliasů ukazatelů, analýza vedlejších účinků funkcí. Pokud jsou závislosti v identifikovaných sekcích kódu více, možnosti paralelizace se snižují.

3. Někdy jsou závislosti odstraněny změnou kódu a toto je další fáze paralelizace. Kód se transformuje tak, že se nezmění funkčnost a tím i výstup, ale odebere se závislost, pokud existuje, na jiné sekci kódu nebo jiné instrukci.

4. Poslední fází paralelizace je generování paralelního kódu. Tento kód je vždy funkčně podobný původnímu sekvenčnímu kódu, ale má další konstrukce nebo sekce kódu, které při spuštění vytvářejí více vláken nebo procesů.

Technika automatické paralelizace

Viz také hlavní článek automatická paralelizace .

Skenovat

Toto je první fáze, kdy skener načte vstupní zdrojové soubory, aby identifikoval všechna statická a externí použití. Každý řádek v souboru bude zkontrolován podle předdefinovaných vzorů, aby se oddělil do tokenů . Tyto tokeny budou uloženy v souboru, který bude později použit v gramatickém stroji. Program gramatiky zkontroluje vzory tokenů, které odpovídají předdefinovaným pravidlům, aby identifikoval proměnné, smyčky, ovládací prvky, funkce atd. V kódu .....

Analyzovat

Analyzátor se používá k identifikaci částí kódu, které mohou být provedeny současně. Analyzátor používá statické informace o datech poskytované analyzátorem skenerů. Analyzátor nejprve zjistí všechny funkce, které jsou na sobě zcela nezávislé, a označí je jako jednotlivé úkoly. Poté analyzátor zjistí, které úkoly mají závislosti.

Plán

Plánovač budou uvedeny všechny úkoly a jejich závislosti na sebe navzájem, pokud jde o provádění a spuštění krát. Plánovač vytvoří optimální plán, pokud jde o počet procesorů, které mají být použity, nebo celkovou dobu provedení aplikace.

Generování kódu

Plánovač vygeneruje seznam všech úkolů a podrobnosti jader, na kterých budou provádějí spolu s časem, že budou vykonávat pro. Generátor kódu vloží do kódu speciální konstrukce, které budou čteny během provádění plánovačem. Tyto konstrukce budou instruovat plánovače, na kterém jádru bude konkrétní úkol vykonán, spolu s počátečním a koncovým časem ......

Paralelizační nástroje

Existuje řada nástrojů pro automatickou paralelizaci pro Fortran, C, C ++ a několik dalších jazyků.

JUKA

YUCCA je nástroj pro automatický převod kódu sekvenční k paralelnímu vyvinutý společností KPIT Technologies Ltd. Pune. Bere vstup jako zdrojový kód C, který může mít více zdrojových a hlavičkových souborů. Poskytuje výstup jako transformovaný vícevláknový paralelní kód pomocí funkcí pthreads a konstrukcí OpenMP . Nástroj YUCCA provádí paralelizaci na úrovni úkolů a smyček.

Par4All

Par4All je automatický paralelizující a optimalizující překladač (pracovní stůl) pro sekvenční programy C a Fortran. Účelem tohoto kompilátoru zdroj-zdroj je přizpůsobit stávající aplikace různým hardwarovým cílům, jako jsou vícejádrové systémy, vysoce výkonné počítače a GPU . Vytvoří nový zdrojový kód a umožní tak původní zdrojový kód aplikace zůstat beze změny.

Cetus

Cetus je infrastruktura kompilátoru pro transformaci softwarových programů od zdroje ke zdroji. Tento projekt byl vyvinut Purdue University . Cetus je napsán v jazyce Java . Poskytuje základní infrastrukturu pro psaní automatických paralelizačních nástrojů nebo kompilátorů. Základní techniky paralelizace, které Cetus v současné době implementuje, jsou privatizace , rozpoznávání redukčních proměnných a substituce indukčních proměnných .

Nové grafické uživatelské rozhraní (GUI) bylo přidáno v únoru 2013. Výpočty zrychlení a zobrazení grafu byly přidány v květnu 2013. V květnu 2013 byl přidán vzdálený server Cetus v modelu klient – ​​server a uživatelé mohou volitelně transformovat kód C prostřednictvím serveru . To je zvláště užitečné, když uživatelé používají Cetus na platformě jiné než Linux. V květnu 2013 byla také implementována experimentální verze Cetus Hubzero a uživatelé mohou také spustit Cetus prostřednictvím webového prohlížeče.

PLUTO

PLUTO je automatický paralelizační nástroj založený na polyedrickém modelu . Polyedrický model pro optimalizaci kompilátoru je reprezentací programů, které usnadňují provádění transformací na vysoké úrovni, jako jsou optimalizace smyčkového hnízda a paralelizace smyčky. Pluto transformuje programy C ze zdroje na zdroj pro hrubozrnný paralelismus a lokalitu dat současně. Rámec transformace jádra funguje hlavně hledáním afinních transformací pro efektivní obklady a fúzi, ale neomezuje se pouze na ně. Paralelní kód OpenMP pro vícejádra lze automaticky generovat ze sekvenčních sekcí programu C.

Překladač Polaris

Překladač Polaris převezme program Fortran77 jako vstup, transformuje tento program tak, aby fungoval efektivně na paralelním počítači , a vydá tuto verzi programu v jednom z několika možných paralelních dialektů FORTRAN . Polaris provádí své transformace v několika „kompilačních průchodech“. Kromě mnoha běžně známých průchodů obsahuje Polaris pokročilé funkce provádějící následující úkoly: privatizace polí, testování závislosti na datech , rozpoznávání indukčních proměnných , interprocedurální analýza a analýza symbolických programů.

Překladač Intel C ++

Funkce automatické paralelizace kompilátoru Intel C ++ automaticky převádí sériové části vstupního programu do sémanticky ekvivalentního vícevláknového kódu. Automatická paralelizace určuje smyčky, které jsou dobrými kandidáty na sdílení práce, provádí analýzu toku dat za účelem ověření správného paralelního provedení a rozděluje data pro generování kódu se závitem podle potřeby při programování se směrnicemi OpenMP . Aplikace OpenMP a Auto-paralelizace poskytují zvýšení výkonu ze sdílené paměti v systémech s více procesory.

Intel Advisor

Intel Advisor 2017 je optimalizace vektorizace a nitě prototypování nástroj. Integruje do svého pracovního postupu několik kroků k hledání paralelních webů, umožňuje uživatelům označit smyčky pro vektorizaci a threading, kontrolovat závislosti nesené smyčkami a vzory přístupu do paměti pro označené smyčky a vložit pragma pro vektorizaci a threading.

AutoPar

Image
Pracovní postup nástroje AutoPar

AutoPar je nástroj, který dokáže automaticky vložit pragma OpenMP do vstupních sériových kódů C / C ++. U vstupních programů se stávajícími směrnicemi OpenMP nástroj při zapnutí správné možnosti dvakrát zkontroluje správnost. Ve srovnání s konvenčními nástroji může AutoPar začlenit uživatelské znalosti (sémantiku) a objevit další příležitosti pro paralelizaci.

iPat / OMP

Tento nástroj poskytuje uživatelům pomoc potřebnou pro paralelizaci OpenMP sekvenčního programu. Tento nástroj je implementován jako sada funkcí v editoru Emacs. Všechny činnosti související s paralelizací programu, jako je výběr cílové části programu, vyvolání asistenčního příkazu a úprava programu na základě asistenčních informací zobrazených nástrojem, lze provádět v prostředí editoru zdrojového programu.

Kompilátor Vienna Fortran (VFC)

Jedná se o nový paralelizační systém zdroj-zdroj pro HPF + (optimalizovaná verze HPF), který řeší požadavky nepravidelných aplikací.

Překladač SUIF

SUIF ( Stanford University Intermediate Format) je bezplatná infrastruktura určená k podpoře společného výzkumu při optimalizaci a paralelizaci kompilátorů. SUIF je plně funkční kompilátor, který bere Fortran i C jako vstupní jazyky. Parallelized code is output as an SPMD (Single Program Multiple Data) parallel C version of the program that can be compiled by native C compilers on a variety of architectures.

Kompilátor Omni OpenMP

Překládá programy C a Fortran s pragmaty OpenMP do kódu C vhodného pro kompilaci s nativním kompilátorem propojeným s běhovou knihovnou Omni OpenMP. Dělá to pro paralelizaci smyčky.

Optimalizace Timing-Architects

Využívá přístup založený na simulaci ke zlepšení přidělování úkolů a paralelizace úkolů na více jader. Pomocí výkonu založeného na simulaci a analýzy v reálném čase jsou navzájem srovnávány různé alternativy přidělování úkolů. Zvažují se závislosti i efekty specifické pro platformu procesoru. TA Optimizer se používá v inženýrství vestavěných systémů.

TRACO

Využívá Iteration Space Slicing a Free Schedule Framework. Jádro je založeno na presburgerské aritmetice a operaci tranzitivního uzavření. Závislosti smyčky jsou reprezentovány vztahy. TRACO používá kalkulačku Omega, knihovny CLOOG a ISL a analyzátor závislosti Petit. Kompilátor extrahuje lepší lokalitu s jemným a hrubozrnným paralelismem pro aplikace v C / C ++. Tento nástroj byl vyvinut týmem West-Pomeranian University of Technology; (Bielecki, Palkowski, Klimek a další autoři) http://traco.sourceforge.net .

SekvenceL

SequenceL je univerzální funkční programovací jazyk a sada auto-paralelních nástrojů, jejichž primárními cíli jsou výkon na hardwaru vícejádrových procesorů, snadné programování, přenositelnost / optimalizace platformy a srozumitelnost a čitelnost kódu. Jeho hlavní výhodou je, že jej lze použít k psaní přímého kódu, který automaticky plně využívá veškerý dostupný výpočetní výkon, aniž by se programátoři museli zabývat identifikací paralelismů, specifikací vektorizace, vyhýbáním se rasovým podmínkám a dalším výzvám manuálního direktivního programovací přístupy, jako je OpenMP.

Programy napsané v SequenceL lze zkompilovat do vícevláknového kódu, který běží paralelně, bez explicitních indikací od programátora, jak nebo co paralelizovat. Jak 2015, verze kompilátoru SequenceL generují paralelní kód v C ++ a OpenCL, což mu umožňuje pracovat s nejpopulárnějšími programovacími jazyky, včetně C, C ++, C #, Fortran, Java a Python. Runtime specifický pro platformu spravuje vlákna bezpečně a automaticky poskytuje paralelní výkon podle počtu dostupných jader.

OMP2MPI

OMP2MPI Automaticky generuje zdrojový kód MPI z OpenMP . Umožnění toho, aby program využíval architektury bez sdílené paměti, jako je klastr, nebo Network-on-Chip založené (NoC) Multiprocesory-System-onChip (MPSoC). OMP2MPI poskytuje řešení, které umožňuje další optimalizaci odborníkem, který chce dosáhnout lepších výsledků.

OMP2HMPP

OMP2HMPP, nástroj, který automaticky převádí kód vysoké úrovně C zdrojového kódu ( OpenMP ) do HMPP . Vygenerovaná verze se zřídka bude lišit od ručně kódované verze HMPP a poskytne důležité zrychlení, téměř 113%, které by později mohlo být vylepšeno ručně kódovanou CUDA .

emmtrix Parallel Studio

emmtrix Parallel Studio je paralelizační nástroj zdroj-zdroj kombinovaný s interaktivním grafickým uživatelským rozhraním vyvinutým společností emmtrix Technologies GmbH. Jako vstup bere zdrojový kód C, MATLAB , Simulink , Scilab nebo Xcos a jako výstup generuje paralelní C kód. Spoléhá se na statický plán a rozhraní API pro předávání zpráv pro paralelní program. Celý proces paralelizace je řízen a vizualizován v interaktivním grafickém uživatelském rozhraní umožňujícím rozhodnutí koncového uživatele o paralelizaci. Zaměřuje se na integrované vícejádrové architektury v kombinaci s akcelerátory GPU a FPGA.

CLAW Compiler

DRÁP překladače převádí Fortran programy s dráp pragmas do Fortran kód vhodný pro cíl specifický superpočítačů rozšířen o OpenMP nebo OpenACC pragmas.

Viz také

Reference

externí odkazy