GPU-portering: hoe wetenschappelijke software leert rekenen op grafische chips
Stel je een verhuizing voor waarbij honderdduizenden dozen versjouwd moeten worden. Je kunt één sterke verhuizer inhuren die alles in zijn eentje sjouwt, snel en zonder fouten, maar toch traag omdat hij maar één ding tegelijk kan dragen. Of je huurt duizend studenten in die elk maar een paar dozen kunnen tillen, maar wel allemaal tegelijk. Voor veel klussen wint dat leger studenten glansrijk. Zo ongeveer is het verschil tussen een processor (cpu) en een grafische kaart (gpu, graphics processing unit) in een computer.
GPU-portering is het proces waarbij bestaande software, die oorspronkelijk is geschreven voor de cpu, wordt aangepast zodat ze ook — of vooral — op de gpu kan draaien. Dat klinkt technisch, maar de gevolgen zijn concreet: weersvoorspellingen die sneller en fijnmaziger worden, medicijnonderzoek dat moleculen in dagen in plaats van maanden doorrekent, en kunstmatige intelligentie die simpelweg niet zou bestaan zonder deze omslag. Portering is geen kwestie van een schakelaar omzetten; het is vaak jaren werk van programmeurs die stukje bij beetje code herschrijven zodat die geschikt wordt voor het leger-van-studenten-principe.
Wat is het precies?
Een cpu heeft doorgaans een handvol tot enkele tientallen rekenkernen, elk zeer veelzijdig en geschikt voor complexe, opeenvolgende taken. Een gpu daarentegen heeft duizenden eenvoudigere kernen die het best werken als ze allemaal tegelijk hetzelfde soort bewerking uitvoeren op andere stukjes data — een aanpak die parallellisme heet. Grafische kaarten zijn hier oorspronkelijk voor gebouwd: elke pixel op een scherm moet immers razendsnel en gelijktijdig berekend worden.
Veel wetenschappelijke rekenprogramma's zijn decennia geleden geschreven, soms nog in de programmeertaal Fortran uit de jaren zeventig, met de cpu als enige rekenhart in gedachten. Zulke code stap voor stap laten uitvoeren, gaat op een gpu juist niet goed: die wil duizenden gelijktijdige taakjes, geen lange rij van opeenvolgende stappen. Bij portering identificeren programmeurs welke delen van een programma zich lenen voor parallellisatie — vaak lussen die dezelfde berekening telkens op een ander stuk data herhalen — en herschrijven ze die zodat de gpu ze in één keer kan afhandelen.
Daarvoor bestaan verschillende gereedschappen. CUDA, ontwikkeld door chipmaker Nvidia, is de bekendste programmeertaal voor gpu's, maar werkt alleen op Nvidia-hardware. Concurrent AMD heeft een alternatief genaamd HIP, onderdeel van het platform ROCm, dat sterk op CUDA lijkt; met een hulpmiddel genaamd hipify kan bestaande CUDA-code automatisch grotendeels worden omgezet. Daarnaast bestaan er zogeheten directive-based methoden zoals OpenACC en OpenMP-offloading, waarbij programmeurs simpele instructieregels ("compileer dit stuk voor de gpu") aan bestaande code toevoegen zonder alles te herschrijven. Een derde route zijn portabiliteitslagen zoals Kokkos, RAJA en de open standaard SYCL: bibliotheken waarmee je één stuk code schrijft dat vervolgens op cpu's én op gpu's van verschillende fabrikanten kan draaien.
Portering stopt niet bij het compileren. Na het overzetten moet zorgvuldig worden gecontroleerd of de uitkomsten identiek of voldoende nauwkeurig blijven — gpu's rekenen soms net iets anders met afrondingen dan cpu's — en moet de software geoptimaliseerd worden, want een naïeve overzetting levert vaak veel minder snelheidswinst op dan mogelijk is.
Wat wil men ermee bereiken?
De belangrijkste drijfveer is snelheid: voor taken die zich goed lenen voor parallellisatie kan een gpu een berekening tien tot honderd keer sneller uitvoeren dan een cpu. Voor klimaatmodellen, deeltjesfysica, medicijnontwikkeling en kunstmatige intelligentie maakt dat het verschil tussen een simulatie die weken duurt en een die in uren klaar is.
Een tweede reden is energie-efficiëntie. Grote rekencentra en supercomputers verbruiken enorme hoeveelheden stroom; per uitgevoerde berekening zijn moderne gpu's vaak zuiniger dan cpu's, wat zowel de energierekening als de klimaatvoetafdruk van wetenschappelijk rekenen verkleint.
Ten derde speelt de opkomst van exascale-supercomputers mee: machines die minstens duizend miljard miljard (10^18) berekeningen per seconde kunnen uitvoeren. Vrijwel alle nieuwe generatie topsupercomputers halen hun rekenkracht grotendeels uit gpu's, niet uit cpu's. Onderzoeksinstellingen die willen blijven meedraaien op deze machines, hebben simpelweg geen keuze: hun software moet gpu-geschikt worden, anders blijft het grootste deel van de rekenkracht onbenut.
Ten slotte is er de wens om onafhankelijk te blijven van één chipfabrikant. Omdat CUDA aan Nvidia-hardware gebonden is, investeren onderzoeksinstituten in portabele programmeermethoden zodat dezelfde code op gpu's van Nvidia, AMD én Intel kan draaien — belangrijk nu supercomputers wereldwijd met verschillende gpu-merken worden uitgerust.
Voorbeelden uit de praktijk
Het Amerikaanse Frontier-systeem van het Oak Ridge National Laboratory, uitgerust met AMD-gpu's, gold in 2022 als een van de eerste supercomputers die de zogeheten exaflop-grens doorbrak. Tientallen wetenschappelijke programma's — van fusie-energiesimulaties tot genoomonderzoek — moesten daarvoor eerst grondig van cpu naar gpu worden geport, deels met hulp van AMD's HIP-platform.
Bij het Argonne National Laboratory draait Aurora, een supercomputer met Intel-gpu's, waarvoor onderzoekers massaal overstapten op de open SYCL-standaard en Intel's oneAPI-gereedschappen om bestaande simulatiesoftware geschikt te maken.
Het Europese LUMI-systeem, gehuisvest in Finland en gefinancierd via het EuroHPC-samenwerkingsverband, gebruikt eveneens AMD-gpu's. Ook Nederlandse onderzoeksgroepen kunnen, via de nationale infrastructuurorganisatie SURF, rekentijd op LUMI aanvragen — wat in de praktijk vaak begint met het porten van hun cpu-code naar de gpu-architectuur van het systeem.
Het Europees Centrum voor Weersvoorspellingen op Middellange Termijn (ECMWF) werkt aan het geschikt maken van zijn wereldwijde weermodel IFS voor gpu's, mede in het kader van het Europese Destination Earth-initiatief dat streeft naar een zeer gedetailleerde digitale tweeling van de aarde. Ook op kleinere schaal, bij het Nederlandse SURF, draait de nationale supercomputer Snellius met een gpu-partitie waar onderzoeksgroepen ondersteuning krijgen bij het overzetten van hun rekenmodellen.
In de deeltjesfysica gebruikt CERN gpu's steeds vaker voor het razendsnel filteren van botsingsdata uit de Large Hadron Collider: het ALICE-experiment reconstrueert deeltjessporen inmiddels grotendeels op gpu's, en ook het LHCb-experiment zet een gpu-gebaseerd systeem in om binnen microseconden te beslissen welke botsingen de moeite waard zijn om te bewaren.
Hoe ver is de techniek?
GPU-portering is inmiddels een volwassen, actief vakgebied, maar bepaald geen afgerond hoofdstuk. De belangrijkste voortgang zit in de gereedschappen: portabiliteitslagen zoals Kokkos, RAJA en SYCL zijn de afgelopen jaren sterk verbeterd en maken het steeds minder noodzakelijk om voor elk gpu-merk apart te programmeren. Ook is automatisering toegenomen, bijvoorbeeld met conversiehulpmiddelen die het grootste deel van eenvoudige CUDA-code automatisch omzetten.
Toch blijven er stevige obstakels. Veel wetenschappelijke code is tientallen jaren oud, honderdduizenden regels lang en onderhouden door onderzoekers die programmeren als bijzaak zien naast hun eigenlijke vakgebied — het herschrijven daarvan kost jaren mensenwerk en gespecialiseerde kennis die schaars is. Niet elk algoritme leent zich bovendien voor parallellisatie: sommige berekeningen zijn inherent stapsgewijs en profiteren nauwelijks van een gpu. Ook blijft vendor lock-in een reëel risico: CUDA is nog altijd de meest gebruikte en best ondersteunde omgeving, wat instellingen die geen Nvidia-hardware gebruiken op achterstand kan zetten. Ten slotte kost het valideren van geporteerde code — controleren of de uitkomsten wetenschappelijk betrouwbaar blijven — vaak minstens zoveel tijd als het herschrijven zelf.
Wie werken eraan?
Chipfabrikanten staan aan de basis van de programmeeromgevingen: Nvidia met CUDA, AMD met ROCm/HIP en Intel met oneAPI en SYCL. De open standaard SYCL wordt beheerd door het Khronos Group-consortium, waarin meerdere bedrijven samenwerken.
Op onderzoeksgebied lopen Amerikaanse nationale laboratoria voorop, met name Oak Ridge, Argonne en Lawrence Livermore, die binnen het Exascale Computing Project van het Amerikaanse ministerie van Energie gezamenlijk portabiliteitsbibliotheken als Kokkos (ontwikkeld bij Sandia National Laboratories) en RAJA (Lawrence Livermore) hebben gebouwd.
In Europa coördineert het EuroHPC-samenwerkingsverband — een initiatief van de Europese Unie en deelnemende lidstaten — de bouw en het gebruik van supercomputers zoals LUMI. Nederland draagt hieraan bij via SURF, de coöperatie van Nederlandse onderwijs- en onderzoeksinstellingen die de nationale rekeninfrastructuur beheert en onderzoekers begeleidt bij het porten van hun software. Ook gespecialiseerde onderzoeksinstituten zoals ECMWF (weer en klimaat) en CERN (deeltjesfysica) hebben eigen teams die zich toeleggen op het gpu-geschikt maken van hun kernsoftware.
Verder lezen
- SURF — Nederlandse organisatie voor ICT in onderzoek en onderwijs
- EuroHPC Joint Undertaking — Europees supercomputer-initiatief
- LUMI — Europese supercomputer in Finland
- Khronos Group — beheerder van de open SYCL-standaard
- ECMWF — Europees Centrum voor Weersvoorspellingen op Middellange Termijn