Gør din computer til en supercomputer: Brug grafikkortet til beregninger

Der er 20 gange mere regnekraft i et heftigt grafikkort end i CPU'en nu om dage. En ny compiler gør det nemt at sende opgaverne til grafikkortet i stedet.

Skal du have behandlet data i stor stil, så glem din computers CPU og kast dig i stedet over de mange kræfter på grafikkortet. For selvom pc-processorer løbende bliver hurtigere, får de nu i den grad baghjul af de kraftværker, der bliver brugt på dyre grafikkort.

De muskler har amerikanske forskere nu fundet en nem måde at udnytte, skriver it-mediet PCpro.co.uk.

En normal CPU vil typisk kunne præstere 20-60 gigaflops, altså milliarder beregninger pr. sekund, men en kraftig GPU runder én teraflops, eller 1000 gigaflops. Problemet er bare, at arkitekturen i de to forskellige processorer ikke ligner hinanden.

Grafik-processoren er god til enorme mængder parallelle beregninger, mens CPU'en er god til én seriel streng af opgaver. Selvom moderne CPU'er nu kommer med to, tre og fire kerner, er det meste software kodet til blot én kerne.

Men et software-team fra North Carolina State University har ifølge dem selv fået bygget bro mellem de to forskellige verdener.

Deres compiler omdanner med en snuptag alskens software, så de mange kræfter i en GPU kan blive udnyttet. De foreløbige test viser, at en opgave bliver løst 30 procent hurtigere med deres compiler, i forhold til Nvidias eget bud, Cublas. Og sammenlignet med at løse opgaven på en CPU kunne det gøres op til 128 gange hurtigere.

Tips og korrekturforslag til denne historie sendes til tip@version2.dk
Kommentarer (14)
sortSortér kommentarer
  • Ældste først
  • Nyeste først
  • Bedste først
Torben Mogensen Blogger

Det er ikke meget forbedring, når man tænker på, hvor højt potentialet er.

Men det viser vel bare (igen), at det er meget svært automatisk at parallelisere traditionelt imperativt og objektorienteret software.

  • 0
  • 0
Jesper Louis Andersen

Hvis nu din grafik får en pixelfejl, så er det ikke noget problem. Den er væk 1/25 sekund efter, eller endnu hurtigere.

Hvis din beregning har en fejl kan du mærke det og det gør i visse tilfælde ondt. Det er derfor NVidia eksempeltvist har deres Tesla-serie, hvor man gør noget for at sikre sig dyret regner rigtigt.

Dertil kommer at den vigtige faktor i mange tilfælde ikke er hvor hurtigt du kan få din beregning, men hvor meget beregning du kan få per energienhed. Jeg tror umiddelbart at SIMD-lignende grafikkort har en stor chance for at vinde det løb, men lige pt æder kortene også energi som bare pokker.

  • 0
  • 0
Nicolai Nicolai

Men dem som designer deres program fra begyndelsen til den nye GPU arkitektur ser ofte 10x til 100x ydelsen af det samme program når det skal igennem en traditionel CPU (givet af programs opgaver egner sig til parallelisering selvsagt). Så hvis der er noget at hente ved at afvikle på en eller flere GPUer, og ydelsen overhovedet betyder noget, så skulle man måske overveje at skrive den del af programmet om i stedet for at recompilere.

  • 0
  • 0
Mark Gjøl

Der er lagt en del arbejde i at bruge GPU'en til andre ting. General Purpose GPU ( http://gpgpu.org/ ) har en del om det. Jeg mener det er Folding@Home projektet der har sagt at et grafikkort klart er det hurtigste, men også det man kan få til mindst. Mens man kan få en CPU til alt, men det tager bare lang tid.

  • 0
  • 0
Gert Agerholm

Mig bekendt har Apple inkluderet en standardiseret snitflade i OS X 10.6 så applikationer kan udnytte regnekraften i GPU'en. 10.6 kom sommer 2009.

OK, applikationen skal udnytte API'et, det sker ikke automatisk, men det findes, så dette er ikke nogen ny opdagelse.

  • 0
  • 0
Torben Mogensen Blogger

Et problem med at lægge beregninger ud på grafikkortet er, at der ikke er en standard API for generelle beregninger på GPU, så du skal skrive din kode anderledes, hvis du har et andet grafikkort. Nvidia har deres egen Cuda API, men, såvidt jeg ved, understøttes den ikke af andre GPU producenter.

Vi mangler en pendant til JVM for grafikkort: En bytekode, der lokalt kan oversættes til GPU kode, CPU kode eller en blanding af begge (afhængig af, hvor meget GPUen understøtter). Det skal selvfølgelig være en bytekode, der er grundlæggende parallel.

  • 0
  • 0
John Vedsegaard

Netop det er et meget stort problem, alle producenter af diverse 3d software, skal helst lave noget som er kompatibelt med alle computere. Resultatet er at mange funktioner på grafikkortene enten slet ikke bruges, eller kun i ringe omfang.
Nu er det jo ikke nemt, da teknologien er forskellig i grafikkortene..

  • 0
  • 0
Nicolai Nicolai

OpenCL er et rigtigt godt initiativ, men det er stadig at programmere til mindre fællesnævner. Det kan i nogle tilfælde være tilstrækkeligt og i andre tilfælde uacceptabelt. Det tager tid at få de nyeste ideer ind i OpenCL fordi det ligesom f.eks. OpenGL skal igennem et vist niveau af friktion af dem som ikke har hardware understøttelse af den nye ide. Hvis man vil den højeste ydelse så er det stadig sådan at du er nød til at bruge et pripriotæer API som CUDA. Så kan man jo så eventuelt skrive begge code-paths, så programmet via CUDA yder særligt godt på nvidia hardware.

  • 0
  • 0
Maciej Szeliga

Jeg kan huske de dage da 80x87 ikke var en del af CPU'en...
...og hvad der skete når man kompilerede sin TurboPascal kode til 80x87...
...og da ikke var nogen 80x87 i den PC det kørte på.

Jeg er ikke spor pessimistisk anlagt... bare realistisk, det er ikke det samme.

  • 0
  • 0
Jesper Poulsen

Jeg har leget med rc5-72 til både x86 og CUDA. Jeg har opnået en markant ydelsesforskel på CPU og GPU. Jeg kan ikke huske de nøjagtige tal, for det var før jul 2009 - jeg skal prøve at gøre forsøget efter ved en nærmere lejligjed.

  • 0
  • 0
Log ind eller Opret konto for at kommentere