Analýza Commutativity

Link: http://www.isi.edu/~pedro/CA/commutativity.html

Súhrn

Paralelné stroje ponúkajú prísľub k výraznému zvýšeniu výkonu tým, že umožňuje viac procesorov súčasne vykonávať rôzne časti výpočtu. Programátori tradične vyvinuli aplikácie pre paralelné stroja pomocou explicitne paralelné jazyky. Na rozdiel od sériových programovacích jazykov, explicitne paralelný jazyky predstavujú komplexný programovací model sa vyznačuje takými javmi, ako slepej uličky, nedeterministickému prevedenie a na strojoch odovzdávanie správ, že je potrebné, aby priamo riadiť pohyb dát prostredníctvom výpočtu. Zrejmé programovanie výhody sekvenčného imperatívny paradigmy programovania preto inšpiroval vývoj analytických techník a kompilátorov určených k automatickému paralelizovat sériových programov.
Aktuálne paralelizační kompilátory zachovať sémantiku pôvodného sériového programu ochrany dátových závislostí. Tieto kompilátory pokúsiť sa o identifikáciu nezávislé kúsky výpočtu (dva kusy výpočtu sú nezávislé, ak žiadny píše kus dát, ktorá ostatných prístupov), potom generovať kód, ktorý vykonáva nezávislé kusy súčasne. Významným obmedzením tohto prístupu je obtiažnosť prevedenie závislosť analýzy, ktoré je dostatočne presné, aby vystaviť značné množstvo súbežnosti. Kým vedci boli schopní vyvinúť dostatočne efektívne algoritmy pre slučky hniezda, ktoré manipulujú husté matice pomocou funkcií afinní prístup, došlo k malému pokroku smerom k úspešnému automatickú analýzu programov, ktoré manipulujú ukazovateľ na báze dátových štruktúr. Vedci sa pokúsili vybudovať úplne automatických systémov, ale najsľubnejšie prístupy vyžadujú programátor, aby poznámky, ktoré určujú informácie o globálnej topológii manipulovaného dátových štruktúr. Druhá, viac zásadné obmedzenie dát závislosť prístupov založených je neschopnosť paralelizovat výpočty, ktoré manipulujú grafe podobné dátové štruktúry. Aliasy neodmysliteľne prítomné v týchto dátových štruktúrach bránia statické objav nezávislých kusov kódu, nútiť kompilátor generovať sériové číslo. Nakoniec, zachovanie dátových závislosťou na programy, ktoré pravidelne aktualizujú zdieľanej dátovej štruktúry možno umelo obmedziť množstvo exponované súbežnosti, pretože úlohy musí odložiť aktualizácie, pokiaľ si nie sú istí, že každá aktualizácia nezmení relatívnej poradí o číta a zapisuje do zdieľanej dátovej štruktúry ,

Analýza Commutativity je statická analýza rámec pre odhaľovanie dochádzanie operácie. Dve operácie dochádzajú pri generovaní rovnakého výsledku bez ohľadu na poradie, v ktorom spustiť. Analýza commutativity odstraňuje mnohé obmedzenia existujúcich prístupov dát závislosť na báze Miesto zachovanie relatívnej poradí jednotlivca číta a zapisuje na jednotlivých slov pamäti, analýza commutativity agreguje dáta aj počítanie do veľkých celkov obilia. To potom staticky analyzuje výpočet tohto zrnitosti sa objavovať, keď kusy výpočtového dochádzanie tj generovanie rovnakého výsledku bez ohľadu na poradie, v ktorom spustiť. Ak sú všetky operácie potrebné na výkon danej výpočtovej dochádzať, môže kompilátor automaticky generovať paralelný kód. Zatiaľ čo výsledné paralelný program môže porušovať dátových závislostí pôvodného sériového programu, je stále zaručená generovať rovnaký výsledok.

Tento prístup má niekoľko zaujímavých vlastností. Vzhľadom k tomu, analýza commutativity nespolieha na informácie o topológii manipulovaného dátových štruktúr, prekladač, ktorý používa analýzu commutativity nemusí analyzovať častí kódu, ktoré stavajú dátovú štruktúru. Analýza Commutativity je preto vhodný pre neúplné výpočty, napríklad aplikáciám, ktoré manipulujú trvalá dáta (napr objektovo orientované databázové aplikácie) alebo aplikácie, ktoré manipulujú geograficky údajov (napr mobilné výpočty na World Wide Web). V týchto prípadoch môže byť kód, ktorý pôvodne postavený štruktúru dát nemusí byť k dispozícii, alebo môže už neexistuje. Analýza Commutativity je tiež zvlášť vhodný pre výpočty, ktoré manipulujú grafy. To je dôležitý aspekt analýzy commutativity pretože výpočty, ktoré manipulujú tieto dátové štruktúry sú vo svojej podstate mimo dosahu analýzy dát závislosti.

Urobili sme si systémový prístup orientovaný vyhodnotiť schopnosť analýzy commutativity extrahovať a využívať značné množstvo paralelizmu v úplných žiadostí. Postavili sme paralelizační kompilátor, ktorý používa analýzu commutativity ako svoju primárnu analýzu paradigmy. Táto kompilátor berie ako vstup na unannotated sekvenčné program napísaný v podskupine C ++ a vytvára paralelné kód pre zdieľanej pamäte multiprocesory. Pomocou tohto paralelizační kompilátor automaticky paralelizovat niekoľko aplikácií, vrátane Barnes-Hut N-telo riešiteľ, kvapalnej simulácia vody kódu a seizmickej modelovanie kódu. U všetkých týchto aplikácií, analýza commutativity je schopná odhaliť značné množstvo súbežnosti a generované paralelných exponátov kód veľmi dobrý výkon. Na 16 procesorov, automaticky paralelizovat verzia Barnes-Hut beží medzi 11 a 12 krát rýchlejší ako pôvodná verzia sekvenčné; pre aplikáciu simulácie vody, automaticky paralelizovat verzia beží medzi 7 a 8 krát rýchlejší ako pôvodná verzia sekvenčné; Pre seizmické modelovacie aplikácie, automaticky paralelizovat verzia beží asi 12 krát rýchlejší ako pôvodná sekvenčné verzie.

Tieto experimentálne výsledky sú veľmi povzbudivé. Tieto aplikácie sú v prírode veľmi dynamický – buď manipulovať sofistikované ukazovatele na báze dátových štruktúr alebo vykazujú veľmi nepravidelné dátové vzory. Využitie hrubého zrna paralelizmus v aplikáciách s týmito charakteristikami bolo uznané ako veľmi ťažký problém. Nie sme si vedomí žiadnej inej prekladača alebo kompilácie technikou schopný vyextrahovať značné množstvo súbežnosti pre tieto výpočty. Okrem toho, že pozitívne experimentálne výsledky poskytujú dôkaz o konkrétny praktický význam analýzy Commutativity ako technika pre automatické paralelizační prekladačov.

Comments are closed.