Enorme versnellingen
Internet Explorer 9 maakt straks gebruik van de rekenkracht van de grafische kaart om vector graphics (html 5), teksten en multimedia te renderen. Ook Firefox 4 zal de gpu gebruiken voor hardwarematig opgevoerde weergave van vector graphics. In de technische en wetenschappelijke wereld zorgt general-purpose computing on gpu, ook wel bekend als gpgpu, al een paar jaar voor enorme versnellingen. Met de nieuwe browserversies komt deze technologie nu ook naar onze huis-, tuin- en keukencomputers.
Gpgpu betreft het uitvoeren van algemene rekentaken op een grafische processor. Computergames en technische en wetenschappelijke visualisaties vereisen veel meer rekenkracht dan bijvoorbeeld office productivity programma's. Een high-end gpu kan bepaalde taken honderden keren sneller uitvoeren dan de cpu; het probleem is dat deze verwerkingskracht alleen door heel specifieke algoritmen benut kan worden.
Het ontwerp van gpu's is van oudsher helemaal toegesneden op de verwerking van grafische elementen als bitmaps, pixels, kleuren en textures tot een beeld in de frame buffer. Dat betekent dat er maar beperkt ondersteuning is voor geheugentransacties, floating-point-bewerkingen en control-flow-instructies zoals loops en sprongen. Grafische processors zijn volledig geoptimaliseerd voor supersnelle, parallelle bewerkingen op grote matrices en andere grote datastructuren.
Hpc- en huis-tuin-en-keukengebruik
Cpu's en gpu's hebben heel verschillende programmeermodellen. General-purpose processors zijn gebaseerd op het principe van sequentiële executie. Centraal daarbij staat de control flow: de manier waarop data en hulpvariabelen worden gemanipuleerd om tot het juiste resultaat te komen.
Grafische processoren daarentegen werken volgens het streamprocessing-model. Daar draait alles om grote matrices waarop supersnel en parallel kleine berekeningen op de afzonderlijke elementen worden uitgevoerd. Dat is waarom gpu's veel grotere registerbanken en lokale geheugens hebben dan cpu's. Veranderingen in de control flow leveren hier enorme vertragingen op. In het algemeen kun je dan ook zeggen dat streamprocessing alleen geschikt is voor problemen met een grote data-parallelliteit, en met zo min mogelijk communicatie tussen de afzonderlijke elementen.
Programmeurs die de prestaties van de gpu willen benutten, moeten dus een goed massively parallel algoritme voor hun probleem vinden. Dat lukt vooral bij wetenschappelijke high-performance computing, in de financiële wereld en in de techniek: daar spreken we van hptc. Zo gebruiken ABN-AMRO, ING en BNP Paribas grafische processors voor hun Monte Carlo-berekeningen om risicomodellen door te rekenen. In de wetenschap en techniek worden GPU's ingezet voor beeld- en videoverwerking, snelle Fourier-transformaties, weersvoorspelling en klimaatonderzoek, cryptografie, neurale netwerken en spraakherkenning.
Multimedia
Maar ook voor de gewone huis-, tuin- en keukengebruiker begint gpgpu inmiddels interessant te worden. De grafische processor is daar met name geschikt voor multimediabewerkingen. In de toekomst zullen berekeningen die nu met behulp van SSE-instructies worden uitgevoerd, naar de gpu worden verplaatst. Zo werd onlangs een patent voor video-encoding op een gpu aan Microsoft toegekend.
Maar ook Internet Explorer versie 9, op dit moment in bèta, maakt gebruik van de grafische processor voor de rendering van HTML5. Daarvoor wordt gebruik gemaakt van Direct2D (vector graphics), DirectWrite (text rendering) en Media Foundation (multimedia). Firefox versie 4, ook in bèta, maakt eveneens gebruik van Direct2D. De komende jaren zullen ook andere parallelle werklasten naar de gpu worden verplaatst.
Helaas!
De video die je probeert te bekijken is niet langer beschikbaar op Tweakers.net.
Cuda versus Cell
Cuda
Op dit moment is Nvidia het verst in de ontwikkeling van gpgpu. Hun Cuda-toolkit is inmiddels de de facto standaard om grafische processors aan het werk te zetten. De Tesla-producten, gebaseerd op de GeForce 8 GPU's, zijn speciaal voor deze toepassing ontwikkeld. Ze beschikken over meer lokaal geheugen en hebben geen video-uitgang. Ook voor de normale videokaarten is echter Cuda-ondersteuning. AMD biedt vergelijkbare mogelijkheden met zijn Stream Technology, dat voorheen bekend stond als Close to Metal.
/i/1291896584.jpeg?f=imagenormal)
De afgelopen jaren heeft Nvidia zijn gpu's steeds beter geschikt gemaakt voor general-purpose toepassingen. Zo is de programmeerbaarheid verbeterd en werd shared memory toegevoegd. De belangrijkste uitbreiding voor wetenschappelijk gebruik is echter de ondersteuning van floating-pointberekeningen. Daarbij gaan single-precision-berekeningen inmiddels al behoorlijk snel, maar de double-precision-prestaties zijn nog beroerd. Zo levert de Tesla Personal Supercomputer, voorzien van vier gpu-modules, respectievelijk 933Gflops en 78Gflops. Dat scheelt meer dan een factor tien.
/i/1291893996.png?f=imagenormal)
Cell
De grootste concurrent van Nvidia in de gpgpu-markt is IBM. Samen met Sony en Toshiba ontwikkelde dit bedrijf de Cell-processor voor de PlayStation 3. Nadat grootverbruikers van rekenkracht stapels PS3's begonnen te bundelen tot grote rekenclusters, kwam IBM met Cell-processors op een blade. De PS3-systemen concurreren immers direct met IBM's Blue Gene-hardware.
Astron, het Nederlandse Instituut voor Radioastronomie, onderzoekt momenteel bijvoorbeeld of ze hun huidige IBM-supercomputer voor de Lofar-telescoop moeten vervangen door een op Cuda of Cells gebaseerd systeem. De huidige Blue Gene heeft een capaciteit van 42Tflops. Tien ATI 5970-kaarten zouden, als ze optimaal kunnen worden benut, dezelfde verwerkingskracht kunnen leveren.
Dat Astron deze afweging kan maken, heeft te maken met het algoritme voor de verwerking van de rauwe data. Lofar levert enorme hoeveelheden gegevens - met 200Gbps is dit project een van de grootste dataverwerkers ter wereld - maar het gaat daarbij om single-precision-elementen die grotendeels onafhankelijk van elkaar bewerkt moeten worden.
Probleem: parallelliseren
In het algemeen is het parallelliseren van software juist een enorm probleem. Ten eerste moet een parallel algoritme worden gevonden. Dat lijkt eenvoudig maar dat is het geenszins. Sterker nog, er zijn theoretische grenzen aan de parallelliseerbaarheid van algoritmen. De Wet van Amdahl stelt dat de maximale versnelling wordt bepaald door de sequentiële onderdelen die niet kunnen worden geparallelliseerd. Daarnaast moet een parallel algoritme geschikt zijn voor de beschikbare hardware: er moet dus een goede balans zijn tussen de verwerkingskracht en de communicatiecapaciteit tussen de elementen.

Deze problematiek is momenteel bijzonder actueel. Vanwege het energieverbruik maken Intel en AMD extra performance niet meer beschikbaar via hogere kloksnelheden maar in de vorm van meerdere rekenkernen. Het blijkt echter een groot probleem te zijn om software te schrijven die deze extra capaciteit kan benutten. Bjarne Stroustrup en James Gosling, de uitvinders van respectievelijk C++ en Java, hebben beide hun zorgen uitgesproken over de programmeerbaarheid van de manycore-processors. Wetenschappers werken op dit moment aan nieuwe functionele programmeertalen die gemakkelijker door de compiler naar parallelle executables kunnen worden omgezet. Met hetzelfde doel heeft Intel de programmeertaal Ct ontwikkeld. Die is inmiddels gepubliceerd onder de naam Array Building Blocks, oftewel arrBB. Ook de volgende versie van C++ zal nieuwe mogelijkheden voor parallellisme ingebakken krijgen.
Het automatisch parallelliseren van broncode is echter een probleem waarop computerwetenschappers zich decennia lang vergeefs de tanden hebben stukgebeten. Paul Klint, hoofd van de Software Engineering groep bij het Amsterdamse Centrum Wiskunde & Informatica, spreekt dan ook van de heilige graal van de informatica.
OpenCL
Een lichtpuntje bij dit alles is opkomst van OpenCL als gemeenschappelijke taal voor het programmeren van gpgpu-toepassingen. Cuda mag dan de de facto standaard van dit moment zijn, maar deze Nvidia-architectuur is niet portable. Inmiddels hebben AMD, IBM, Intel en Nvidia zich allemaal achter OpenCL geschaard. De snelheid van de executables haalt het nog lang niet bij die van Cuda-code maar het verschil wordt steeds kleiner. OpenCL-software is overigens ook niet portable over verschillende hardware-platformen, omdat de code nog steeds topologie-specifieke zaken bevat. Wel spreken gpgpu-programmeurs straks allemaal dezelfde taal.
/i/1292512105.png?f=imagenormal)
Het mag duidelijk zijn dat gpgpu op dit moment nog niet volwassen is, maar wel enorme kansen biedt om computersystemen heel veel sneller te maken. De komende jaren zullen de snelste computersystemen ter wereld worden opgebouwd uit grafische processoren. Onlangs werd bekend dat de Chinezen de capaciteit van hun snelste supercomputer hebben verdubbeld. Dat systeem maakt gebruik van nVidia-blades en zou nu het snelste systeem ter wereld zijn.
Er wordt algemeen aangenomen dat gpgpu bepaalde toepassingen honderden keren kan versnellen. Een enkele wetenschapper weet zijn software zelfs met een factor duizend te versnellen. Dat moet echter wel in perspectief worden geplaatst: de geschiedenis heeft geleerd dat dergelijke grote stappen vaak meer dan tien jaar kosten. Toen het Amerikaanse DARPA bedrijven als IBM, Cray en SGI vroeg of zij binnen zeven jaar Exascale-computers konden ontwikkelen, bleek dit niet haalbaar.