måndag 25 juni 2012

Utveckling med OpenCL

Efter att länge ha varit nyfiken, har jag nu tagit steget och börjat använda OpenCL. För dig som inte vet vad det är, är det ett standardiserat sätt att kunna använda en grafikprocessor till generell beräkning, inte bara grafik. Den råa prestandan i ett modernt grafikkort är många gånger större än för en normal processor, men har helt andra egenskaper och kan inte alltid utnyttjas för alla typer av problem.

Jag tog en existerande algoritm jag jobbat mycket med och implementerade delar av den. På min medelmåttiga laptop, med teoretisk prestanda 155 GFLOPS lyckades jag genomföra beräkningarna en faktor 30 snabbare än på cpu:n! Detta helt utan att försöka optimera koden. Ett grafikkort för stationära datorer i 5000 kr-klassen når ca 3000 GFLOPS. Med ett sådant kort skulle alltså prestanda kunna öka till en faktor 600 gånger snabbare än cpu, för mitt problem. Tack alla ni som spelar datorspel och finansierar denna fantastiska utveckling!

Det tog ett tag att läsa igenom dokumentationen och förstå hur det är tänkt att fungera. Jag rekommenderar att läsa många olika tutorials innan man börjar, eftersom det är ganska annorlunda mot "vanlig" programmering och varje författare förklarar på olika sätt.

En liten disclaimer:
för att nå höga prestanda behöver man göra avkall på beräkningsprecisionen, samt kunna dela upp sitt problem i parallella delar. Därutöver tillkommer fördröjning när problemet ska flyttas till grafikkortsminnet, och kerneln kompileras. Och så behöver man installera ickefri programvara...

Inga kommentarer: