Grafische processoren of GPU's zijn hardwareversnellers die vaak gebruikt worden
om rekenintensieve applicaties te ondersteunen. Het programmeren van deze
hardware is echter een lastige taak, waarbij slechts beperkt gebruik kan gemaakt
worden van hoogniveau-programmeertalen. Deze talen zijn net ontworpen om de
productiviteit van de programmeur te verhogen, en winnen daarom steeds meer aan
populariteit. In dit doctoraat voeren we onderzoek naar technieken om dergelijke
hoogniveau-programmeertalen te gebruiken om grafische processoren te
programmeren. Hiervoor definiëren we programmeerinterfaces die het mogelijk
maken om een bestaande compiler van een hoogniveau-programmeertaal te
hergebruiken om code te genereren voor een ander platform. Zo kan een
bestaande programmeertaal veel efficiënter herbestemd worden. We demonstreren
dit door de interfaces toe te voegen aan de Julia programmeertaal, en er een
implementatie van de taal voor NVIDIA GPU's mee te realiseren. Programmeren van
GPU's in deze hoogniveau-programmeertaal is veel productiever, zonder daarbij in
te boeten aan prestatie. We gebruiken deze infrastructuur vervolgens om een
programmeermodel gebaseerd op reeksen te implementeren, waarmee GPU's kunnen
geprogrammeerd worden zonder kennis van de onderliggende hardware of diens
uitvoeringsmodel. Onze implementatie van deze abstracties biedt ook de
flexibiliteit om bestaande code uit te voeren op een GPU zonder daarop voorzien
te zijn.
| |