Budoucnost HPC kompilátorů: NektarIR řeší noční můru heterogenního hardwaru
Budoucnost HPC kompilátorů: Jak NektarIR řeší noční můru heterogenního hardwaru
Pokud se trochu orientujete ve světě high-performance computingu, pravděpodobně jste si všimli znepokojivého trendu. Hardwarová krajina se rozpadá do chaosu. Současné superpočítače i výkonné pracovní stanice jsou dnes heterogenní architektury—kombinují tradiční CPU s GPU, možná FPGA, a specializované akcelerátory od různých výrobců. Každý kus hardwaru mluví jiným jazykem, pokud jde o optimalizaci, a donutit váš kód, aby na všem běžel efektivně, je jako hnát kozy do řiti.
Tohle je problém, který řeší NektarIR. A upřímně řečeno, je osvěžující vidět, že někdo bere systematický přístup místo toho, aby jen házel další ručně optimalizovaný assembly na problém.
Revoluce v kompilačním stacku
Tradiční kompilátory jako GCC nebo LLVM pracují na docela vysoké úrovni—vezmou zdrojový kód a produkují optimalizovaný strojový kód. Ale když pracujete s doménově specifickými operacemi, ať už jde o finite element methods nebo ML jádra, existuje obrovská sémantická propast mezi tím, co si domain expert představuje (diferenciální operátory, element matrices) a tím, co hardware skutečně chápe (registry, paměťové hierarchie, SIMD linky).
MLIR, vyvinutý v Google a dnes cornerstone LLVM, přinesl brilliantní nápad: místo jedné monolitické reprezentace, proč nepodporovat více úrovní intermediate representation, každou vyladěnou pro jinou úroveň abstrakce? Můžete definovat vlastní „dialekty", které zachycují doménové koncepty přímo, a pak je postupně snižovat směrem k hardwarově specifickým instrukcím, přičemž aplikujete optimalizace na každé úrovni.
NektarIR aplikuje tuto filozofii na spektrální/hp element metody pro computational fluid dynamics. Pokud jste o spektrálních element metodách nikdy neslyšeli, představte si je jako sofistikovanou numerickou techniku pro řešení parciálních diferenciálních rovnic—jsou obzvláště populární v aerospace a modelování počasí, protože dokáží dosáhnout vysoké přesnosti s relativně hrubými mřížkami.
Proč jsou finite element operace jiné
Tady je to, co dělá finite element metody zajímavými z kompilačního hlediska: výkon je poháněn překvapivě malou sadou běžných operátorů, které se různě skládají a vytvářejí komplexní diferenciální operátory. Mluvíme o operacích jako vyhodnocení basis funkcí, maticově-vektorové produkty a výpočty kvadratury—operace, které vypadají jednoduše, ale jsou neuvěřitelně citlivé na vzory přístupu do paměti a využití cache.
V tradičních přístupech by vývojáři psali optimalizovaná jádra pro každou architekturu a pak udržovali paralelní verze pro CPU a GPU. Výsledkem je noční můra údržby, kde jediná algoritmická změna může vyžadovat aktualizaci desítek vendor-specific implementací.
NektarIR se tomu vyhýbá vytvořením vlastního MLIR dialektu, který přímo reprezentuje tyto finite element operátory. Představte si to jako slovník speciálně navržený pro mluvení o spektrálních element výpočtech. Jakmile máte tento doménově specifický jazyk zabudovaný do kompilační infrastruktury, můžete psát optimalizace, které rozumí sémantice toho, co děláte—ne jen hrubým operacím.
Kouzlo progresivního loweringu
Skutečná síla přichází z lowering pipeline. V NektarIR začínáte s vysokoúrovňovou reprezentací, která vypadá velmi podobně jako by matematik popisoval finite element operátor. Jak se reprezentace pohybuje přes následné stupně, stává se stále více konkrétní:
- Doménově specifický dialekt zachytává matematickou strukturu
- Bufferization se stará o alokaci paměti a pohyb dat
- Hardwarově specifický lowering adaptuje operace na CPU nebo GPU execution modely
- Finální generace kódu produkuje optimalizované strojové instrukce
Na každé úrovni můžou být aplikovány optimalizace specifické pro tu abstrakci. To je daleko efektivnější než se snažit reverse-engineerovat vysokoúrovňový záměr z nízkoúrovňových operací—něco, s čím mají tradiční kompilátory na doménově specifickém kódu problémy.
Výsledky v praxi
Tým NektarIR demonstroval svůj přístup srovnáním saved established frameworkem Nektar++. Výsledky ukazují, že jejich just-in-time kompilační přístup dosahuje konkurenceschopného nebo lepšího výkonu na CPU i GPU architekturách—působivé, když uvážíme, že pracují z jedné unified codebase místo ručně optimalizovaných implementací pro každou platformu.
To je obzvláště signifikantní, protože CFD simulace často běží dny nebo týdny na superpočítačích. I malá procentuální zlepšení v kernel výkonu se promítají v značných úsporách času a energie ve scale.
Co to znamená pro vývojáře
Možná si říkáte: „To je zajímavé, ale já nepíšu CFD solvery." Férový bod—ale podkladová technika má široké implikace. Vzor definování doménově specifických dialektů, progresivního loweringu přes úrovně abstrakce a aplikace cílených optimalizací na každém stupni je aplikovatelný daleko za hranicemi finite element metod.
Už teď vidíme MLIR používaný pro ML workloady v TensorFlow, IREE pro embedded AI inference, a různé výzkumné projekty v kvantovém computingu a zpracování signálu. Jak specializovaný hardware nadále proliferuje, schopnost napsat kód jednou a kompilovat ho efektivně pro různé cíle se stává čím dál cennější.
Projekt NektarIR ukazuje, že vstupujeme do éry, kdy kompilátory můžou být skutečně co-designed s jejich cílovými doménami. Místo nucení domain expertů stát se compiler inženýry nebo očekávání, že compiler writery budou rozumět nuancím spektrálních element metod, můžeme stavět nástroje, které tento problém elegantně překlenou.
Pro HPC komunitu to představuje cestu vpřed z aktuální situace, kde portování aplikací na nové architektury vyžaduje heroické inženýrské úsilí. Pro vývojáře obecně je to pohled na to, jak by se kompilační technologie mohla vyvíjet pro zvládnutí čím dál heterogennější budoucnosti computingu.
Kód je dostupný pro ty, kteří chtějí experimentovat, a přístup je dostatečně obecný, aby podobné techniky mohly být aplikovány na další compute-intensive domény. Ať už simulujete klimatické modely nebo se snažíte vymáčknout více výkonu z vaší GPU-akcelerované aplikace, myšlenky za NektarIR stojí za pochopení.
Narazili jste na výzvy s heterogenním hardwarem ve vašich projektech? Co si myslíte o doménově specifických kompilačních přístupech? Napište komentář—rádi bychom slyšeli vaše zkušenosti.