Datorer har blivit alltmer komplexa med uppkomsten av heterogen hårdvara som kombinerar multicore processorer och GPU:er. Dessa parallella system uppvisar enorm beräkningskraft till priset av ökad programmeringsinsats vilket resulterar i en spänning mellan prestanda och kodportabilitet. Vanligtvis är koden antingen avstämd i ett imperativt språk på låg nivå med hjälp av hårdvaruspecifika optimeringar för att uppnå maximal prestanda eller är skriven på ett högnivå, eventuellt funktionellt, språk för att uppnå portabilitet på bekostnad av prestanda. Vi föreslår ett nytt tillvägagångssätt som syftar till att kombinera högnivåprogrammering, kodportabilitet och hög prestanda. Med utgångspunkt från ett funktionellt uttryck på hög nivå tillämpar vi en enkel uppsättning omskrivningsregler för att omvandla det till en funktionell representation på låg nivå, nära OpenCL-programmeringsmodellen, från vilken OpenCL-koden genereras. Våra omskrivningsregler definierar ett utrymme av möjliga implementationer som vi automatiskt utforskar för att generera hårdvaruspecifika OpenCL-implementationer. Vi formaliserar vårt system med en kärna som är beroende av λ-kalculus tillsammans med en denotationssemantik som vi använder för att bevisa riktigheten i omskrivningsreglerna. Vi testar vår design i praktiken genom att implementera en kompilator som genererar hög prestanda nödvändig OpenCL-kod. Våra experiment visar att vi automatiskt kan härleda hårdvaruspecifika implementationer från enkla funktionella algoritmiska uttryck på hög nivå som erbjuder prestanda på samma sätt som högt avstämd kod för multikärnprocessorer och GPU:er skrivna av experter.
REF beskriver ett system som omvandlar funktionella uttryck på hög nivå till OpenCL-kod med hjälp av en uppsättning omskrivningsregler.
Generating performance portable code using rewrite rules: from high-level functional expressions to high-performance OpenCL code
{'venue': 'ICFP 2015', 'journal': None, 'mag_field_of_study': ['Computer Science']}