Ruim een week geleden gaf nVidia de publieke bèta van zijn gpgpu-systeem Cuda voor de G80-core vrij. De mogelijkheden van dit systeem van de graphicsfabrikant zijn door programmeur Bryan O'Sullivan nader bekeken.
O'Sullivan heeft zelf gewerkt aan een compiler waarop nvcc - de compiler van Cuda - is gebaseerd. Zijn voornaamste conclusie is dat het programmeren voor de gpu ontzettend complex is. Nvidia heeft een set extensies op de C-programmeertaal uitgebracht om de programmeur te ondersteunen bij het programmeren voor de gpu. Deze extensies zijn voornamelijk bedoeld om het geheugenbeheer te vereenvoudigen. De uitbreidingen zijn volgens O'Sullivan echter minimaal. Het betreft hoofdzakelijk commando's om te bepalen op welke locatie in het geheugen variabelen een plaatsje moeten vinden. Enkele andere onderdelen van de nVidia-extensies zijn extra OpenGL-achtige vectortypes en een aantal keywords die functies definiëren.
Een gpu is vooral geschikt om rekenintensieve code uit te voeren. De kracht ligt in het feit dat de grafische processor uitermate geschikt is om code parallel uit te voeren; de gpu op de GeForce 8800 GTX heeft 128 cores, of eigenlijk streamprocessors, ter beschikking. Het uitvoeren van code op de gpu gebeurt in verschillende threads. Deze threads zijn weer gegroepeerd in blokken en meerdere blokken vormen ten slotte een grid. Iedere thread heeft een eigen stuk geheugen en alle threads in een blok delen een gedeelte van het geheugen. Via het gedeelde geheugen worden de threads binnen een blok gesynchroniseerd. Een thread heeft ook toegang tot het globale geheugen van de gpu, maar kan slechts via het gedeelde geheugen van een blok synchroniseren.

De complexe indeling van het geheugen zal menig programmeur slapeloze nachten bezorgen. Ten eerste zorgt het globale geheugen voor een aantal obstakels. Er is niet slechts één type globaal geheugen maar drie verschillende soorten. Het gewone lees- en schrijfgeheugen, global memory, is het eerste type. Het aanspreken van dit geheugen kan niet gecached worden en de programmeur moet er zorg voor dragen dat het gebruik ervan door een blok threads op exact de juiste manier gebeurt. Afwijken van het formaat zal de verwerkingssnelheid niet ten goede komen. Het tweede type geheugen, constant memory, is read-only en de toegang kan gecached worden. Ook bij dit type geheugen moeten strikte richtlijnen worden gevolgd. Het laatste soort globale geheugen is texture memory, wederom read-only en met mogelijkheden tot caching. Dit geheugen is het meest geschikt voor het opslaan van 2d-textures.

Het geheugen dat door een blok gedeeld wordt heeft ook een aantal eigenaardigheden die de snelheid kunnen beïnvloeden. Het is over meerdere banken verdeeld zodat het parallel aangesproken kan worden: n threads kunnen n geheugenbanken aanspreken binnen een kloktik. De toegang tot een enkele bank door verschillende threads zal echter serieel plaatsvinden. Dat betekent dat als n threads een bank aanspreken het n kloktikken zal kosten om alle data te verwerken. De verschillende typen geheugen, met elk hun eigenaardigheden, zorgen ervoor dat de programmeur erg goed het geheugenbeheer van de gpu onder de knie moet hebben.
Gezien dit complexe geheugenbeheer zou een goede compiler veel kunnen betekenen voor de snelheid van een applicatie. De nvcc-compiler is gebaseerd op EkoPath, een compiler die onder andere veel gebruikt is om benchmarkapplicaties voor het AMD64-platform te compileren. De Ekopath-compiler is weer gebaseerd op de Open64-compiler van SGI. De voorouders van de nvcc-compiler beschikken over groot aantal geavanceerde functies om het geheugenbeheer te optimaliseren. Gezien de controle die een programmeur over het geheugen heeft vermoedt O'Sullivan echter dat op dit moment weinig van die optimalisaties hun weg naar de compiler van nVidia hebben gevonden. Ook het feit dat de handleiding uitgebreid ingaat op conflicten die kunnen optreden bij het aanspreken van verschillende geheugenbanken sterkt hem in dit vermoeden.
De gpu biedt in theorie een grote rekenkracht, vooral voor hele specifieke applicaties waarbij pure rekenkracht nodig is. O'Sullivan denkt echter dat de complexiteit een volledige benutting van de capaciteit moeilijk zal maken. Hoewel een enkele bezoeker van het blog kritisch tegenover deze gevolgtrekking staat lijkt de conclusie dat het programmeren voor de gpu in dit stadium niet voor iedereen weggelegd is te rechtvaardigen. Toch is de toekomst wel rooskleurig voor deze techniek. Verschillende bedrijven die baat hebben bij veel brute rekenkracht, bijvoorbeeld op het gebied van cryptoanalyse, zullen ook wel de middelen en tijd hebben om te investeren in het ontwikkelen op de grafische processor.