GPGPU

Generell databehandling på grafiske prosesseringsenheter ( GPGPU ) er et nyere konsept innen informatikk som prøver å studere og dra nytte av databehandlingsmulighetene til en GPU .

En GPU er en prosessor designet for beregningene som er involvert i å generere interaktiv 3D-grafikk . Noen av funksjonene (lav pris i forhold til datakraften, høy parallellitet , optimalisering for flytende kommaberegninger ) anses som attraktive for bruk i applikasjoner utenfor datagrafikk, spesielt innen vitenskap og simulering . Det er derfor utviklet teknikker for implementering av væskesimuleringer, databaser , klyngealgoritmer , etc.

GPU-programmeringsmodell

På grunn av de grunnleggende forskjellene mellom arkitekturene til en GPU og en CPU , kan ikke alle problemer dra nytte av en GPU-implementering. Spesielt minnetilgang utgjør de største vanskelighetene. CPUer er designet for tilfeldig minnetilgang . Dette favoriserer opprettelsen av komplekse datastrukturer , med pekere til vilkårlige steder i minnet. I kontrast, på en GPU, er minnetilgangen mye mer begrenset. For eksempel, i en vertex-renderer (den delen av en GPU designet for å transformere vertex i 3D-applikasjoner), favoriseres distribusjonsmodellen, der programmet leser fra en forhåndsbestemt plassering i minnet, men skriver til en eller flere steder. vilkårlige posisjoner . I motsetning til dette favoriserer en prosessor av piksler , eller biter, samlingsmodellen, med programmet som kan lese fra flere vilkårlige posisjoner, men skrive til bare én forhåndsbestemt posisjon.

Oppgaven til GPGPU-algoritmedesigneren er hovedsakelig å tilpasse minnetilganger og datastrukturer til egenskapene til GPUen. Vanligvis er måten å lagre data på i en 2D -buffer , i stedet for hva en tekstur normalt ville vært . Tilgang til disse datastrukturene tilsvarer en lesing eller skriving av en posisjon i teksturen. Siden det generelt ikke er mulig å lese og skrive til samme tekstur, bør denne operasjonen deles inn i flere omganger hvis denne operasjonen er avgjørende for utviklingen av algoritmen.

Selv om enhver algoritme som er implementerbar på en CPU også kan implementeres på en GPU, vil disse implementeringene ikke være like effektive på de to arkitekturene. Spesielt algoritmer med høy grad av parallellitet, uten behov for komplekse datastrukturer, og med høy aritmetisk intensitet, drar mest nytte av implementeringen på GPU.

Verktøy

Tradisjonelt har GPGPU-programvareutvikling blitt gjort enten i assemblerspråk , eller på et av de spesifikke språkene for grafikkapplikasjoner som bruker GPU, som GLSL , Cg eller HLSL . Men verktøy har nylig dukket opp for å gjøre GPGPU-applikasjonsutvikling enklere ved å abstrahere bort mange av de grafikkrelaterte detaljene, og presentere et grensesnitt på høyere nivå. En av dem er BrookGPU , utviklet ved Stanford University , som består av en utvidelse til ANSI C som gir nye datatyper og operasjoner (dataflyt, kjerne, reduksjon osv.) automatisk konvertert til en implementering som drar nytte av GPU uten eksplisitt intervensjon av programmereren. Et annet verktøy med lignende mål er Sh , en C++ utvidelse for metaprogrammering med automatisk implementering på GPU. Det mest brukte alternativet i dag er NVidias CUDA , en utvidelse til C som lar algoritmer kodes på NVidia GPUer . Til slutt kan vi inkludere i denne diskusjonen OpenCL , en kombinasjon av grensesnitt og programmeringsspråk for utvikling av parallelle applikasjoner som kan utføres på en gjennomsiktig måte i forskjellige prosesseringsenheter ( multicore CPU , GPU , etc.).

Kritikk

Selv om fordelene med å bruke GPU for visse applikasjoner er tydelige, er det ingen mangel på kritikk, og refererer generelt til ulempen med å bruke en prosessor til helt andre formål enn det som var tiltenkt da de ble designet. Et vanlig argument er mangelen på kontinuitet i arkitekturene som brukes. På grunn av den raske utviklingen av grafikkmaskinvare fungerer ikke lenger implementeringer av algoritmer som fungerte optimalt på én modell av GPU, eller fungerer suboptimalt på en senere modell. En annen kritikk er mangelen på presisjon i flytepunktregistrene som finnes i GPUer. Vanligvis brukes 2 eller 4 byte til å representere et reelt tall på en GPU, som sammenlignet med 4, 8 eller mer som brukes i moderne CPUer, ikke er nok for mange vitenskapelige applikasjoner.

Andre

Microsoft er ferdig med å utvikle den nye versjonen 11 av Direct3D API . Til tross for at den forrige versjonen, Direct3D 10, er relativt ny, på grunn av antallet nyheter som har dukket opp i det siste i grafikkortverdenen, inkludert tessellasjon, utviklet Microsoft denne nye versjonen, der det er verdt å fremheve den nye skyggen. datateknologi for å tillate at GPU ikke kun brukes til 3D-grafikk, slik at utviklere kan dra nytte av grafikkort som parallelle prosessorer.

Det distribuerte databehandlingsprosjektet Folding@home , opprettet av Stanford University , har gitt støtte for bruk av beregningskraften til GPU, i tillegg til CPU. Nyere tester sier at ytelsesgevinster på opptil 40 ganger en Intel Pentium 4 CPU er mulig , selv om alt selvfølgelig avhenger av GPUen som brukes.

Se også

Eksterne lenker