Dataressurs U SM. Hvor cuda leder: praktisk anvendelse av gpgpu-teknologi - det beste utstyret Applikasjoner som kjører på cuda
I flere tiår har Moores lov vært gjeldende, som sier at hvert annet år vil antall transistorer på en brikke dobles. Dette var imidlertid tilbake i 1965, og i løpet av de siste 5 årene har ideen om fysiske multikjerner i prosessorer i forbrukerklassen begynt å utvikle seg raskt: i 2005 introduserte Intel Pentium D, og AMD introduserte Athlon X2. Den gang kunne applikasjoner med 2 kjerner telles på fingrene på én hånd. Neste generasjon Intel-prosessorer, som gjorde en revolusjon, hadde imidlertid nøyaktig 2 fysiske kjerner. Dessuten dukket Quad-serien opp i januar 2007, da Moore selv innrømmet at loven hans snart ville slutte å gjelde.
Hva nå? Dual-core prosessorer selv i budsjettkontorsystemer, og 4 fysiske kjerner har blitt normen, og dette er på bare 2-3 år. Frekvensen av prosessorer økes ikke, men arkitekturen er forbedret, antall fysiske og virtuelle kjerner økes. Imidlertid har ideen om å bruke videoadaptere utstyrt med titalls eller til og med hundrevis av "databehandlingsenheter" eksistert i lang tid.
Og selv om utsiktene for GPU-databehandling er enorme, er den mest populære løsningen Nvidia CUDA, som er gratis, har mye dokumentasjon og generelt er veldig enkel å implementere, er det ikke mange applikasjoner som bruker denne teknologien. I utgangspunktet er dette alle slags spesialiserte beregninger, som den gjennomsnittlige brukeren i de fleste tilfeller ikke bryr seg om. Men det er også programmer designet for massebrukeren, og vi vil snakke om dem i denne artikkelen.
Først litt om selve teknologien og hva den brukes med. Fordi Når jeg skriver en artikkel, fokuserer jeg på et bredt spekter av lesere, så jeg vil prøve å forklare det på et tilgjengelig språk uten komplekse termer og noe kort.
CUDA(engelsk: Compute Unified Device Architecture) er en programvare- og maskinvarearkitektur som lar deg utføre beregninger ved hjelp av NVIDIA-grafikkprosessorer som støtter GPGPU-teknologi (tilfeldig databehandling på skjermkort). CUDA-arkitekturen dukket først opp på markedet med utgivelsen av åttende generasjons NVIDIA-brikke - G80 og er til stede i alle påfølgende serier med grafikkbrikker som brukes i GeForce-, Quadro- og Tesla-akseleratorfamiliene. (c) Wikipedia.org
Innkommende strømmer behandles uavhengig av hverandre, dvs. parallell.
Det er en inndeling i 3 nivåer:
Nett- kjerne. Inneholder en en/to/tredimensjonal rekke blokker.
Blokkere– inneholder mange tråder. Tråder av forskjellige blokker kan ikke samhandle med hverandre. Hvorfor var det nødvendig å innføre blokker? Hver blokk er i hovedsak ansvarlig for sin egen deloppgave. For eksempel kan et stort bilde (som er en matrise) deles opp i flere mindre deler (matriser) og arbeides med hver del av bildet parallelt.
Tråd– flyt. Tråder innenfor en blokk kan samhandle enten gjennom delt minne, som forresten er mye raskere enn globalt minne, eller gjennom trådsynkroniseringsverktøy.
Warp er en forening av tråder som samhandler med hverandre, for alle moderne GPUer er Warp-størrelsen 32. Neste kommer halvvarp, som er halvparten av warp, fordi Minnetilgang skjer vanligvis separat for første og andre halvdel av varpen.
Som du kan se, er denne arkitekturen utmerket for parallellisering av oppgaver. Og selv om programmering utføres på C-språket med noen begrensninger, er i virkeligheten ikke alt så enkelt, fordi... ikke alt kan parallelliseres. Det er heller ingen standardfunksjoner for å generere tilfeldige tall (eller initialisering); alt dette må implementeres separat. Og selv om det er mange ferdige alternativer, gir ingenting av dette glede. Evnen til å bruke rekursjon dukket opp relativt nylig.
For klarhetens skyld ble det skrevet et lite konsollprogram (for å minimere kode) som utfører operasjoner med to arrays av float-typen, dvs. med ikke-heltallsverdier. Av grunnene nevnt ovenfor ble initialisering (fylling av matrisen med forskjellige vilkårlige verdier) utført av CPU. Deretter ble det utført 25 forskjellige operasjoner med de tilsvarende elementene fra hver matrise, mellomresultatene ble skrevet til den tredje matrisen. Størrelsen på matrisen er endret, resultatene er som følger:
Det ble gjennomført totalt 4 tester:
1024 elementer i hver matrise:
Man ser tydelig at med et så lite antall elementer er parallellberegning lite nyttig, fordi Selve beregningene er mye raskere enn forberedelsene deres.
4096 elementer i hver matrise:
Og nå kan du se at skjermkortet utfører operasjoner på arrays 3 ganger raskere enn prosessoren. Dessuten økte ikke utførelsestiden for denne testen på skjermkortet (en liten reduksjon i tid kan tilskrives en feil).
Det er nå 12288 elementer i hver matrise:
Separasjonen av skjermkortet har økt med 2 ganger. Igjen er det verdt å merke seg at utførelsestiden på skjermkortet har økt
ubetydelig, men på prosessoren mer enn 3 ganger, dvs. proporsjonal med kompleksiteten til oppgaven.
Og den siste testen er 36864 elementer i hver matrise:
I dette tilfellet når akselerasjonen imponerende verdier - nesten 22 ganger raskere på et skjermkort. Og igjen økte utførelsestiden på skjermkortet litt, men på prosessoren - de nødvendige 3 ganger, som igjen er proporsjonal med kompleksiteten til oppgaven.
Fortsetter du å komplisere beregningene, vinner skjermkortet mer og mer. Selv om eksemplet er noe overdrevet, viser den samlede situasjonen tydelig. Men som nevnt ovenfor kan ikke alt parallelliseres. For eksempel å beregne Pi. Det er kun eksempler skrevet med Monte Carlo-metoden, men nøyaktigheten på beregningene er 7 desimaler, dvs. vanlig flyte. For å øke nøyaktigheten av beregninger kreves lang aritmetikk, og det er her problemer oppstår, fordi Det er veldig, veldig vanskelig å implementere dette effektivt. Jeg kunne ikke finne eksempler på Internett som bruker CUDA og beregner Pi til 1 million desimaler. Det er gjort forsøk på å skrive en slik applikasjon, men den enkleste og mest effektive metoden for å beregne Pi er Brent-Salamin-algoritmen eller Gauss-formelen. Den velkjente SuperPI bruker mest sannsynlig (bedømt etter hastigheten på operasjonen og antall iterasjoner) den Gaussiske formelen. Og etter å dømme
På grunn av det faktum at SuperPI er entrådet, mangelen på eksempler under CUDA og feilen i mine forsøk, er det umulig å effektivt parallellisere Pi-telling.
Forresten kan du legge merke til hvordan belastningen på GPU øker under beregninger, og minne er også tildelt.
La oss nå gå videre til de mer praktiske fordelene med CUDA, nemlig de eksisterende programmene som bruker denne teknologien. For det meste er dette alle slags audio/video-konverterere og redaktører.
3 forskjellige videofiler ble brukt i testingen:
- *Historien til filmen Avatar - 1920x1080, MPEG4, h.264.
- *Serie "Lie to me" - 1280x720, MPEG4, h.264.
- *Serie "It's Always Sunny in Philadelphia" - 624x464, xvid.
Beholderen og størrelsen på de to første filene var .mkv og 1,55 GB, og den siste var .avi og 272 MB.
La oss starte med et veldig oppsiktsvekkende og populært produkt - Badaboom. Versjon brukt - 1.2.1.74 . Kostnaden for programmet er $29.90 .
Programgrensesnittet er enkelt og intuitivt - til venstre velger vi kildefilen eller disken, og til høyre - den nødvendige enheten vi skal kode for. Det er også en brukermodus der parametere stilles inn manuelt, som er det vi brukte.
La oss først se på hvor raskt og effektivt videoen er kodet «i seg selv», dvs. samme oppløsning og omtrent samme størrelse. Vi vil måle hastigheten i fps, og ikke i medgått tid - på denne måten er det mer praktisk å sammenligne og beregne hvor mye en video av vilkårlig lengde vil bli komprimert. Fordi I dag vurderer vi "grønn" teknologi, da vil grafene være tilsvarende -)
Kodingshastighet avhenger direkte av kvalitet, dette er åpenbart. Det er verdt å merke seg at lysoppløsning (la oss kalle det tradisjonelt SD) ikke er et problem for Badaboom - kodingshastigheten er 5,5 ganger høyere enn den originale (24 fps) videoframerate. Og selv tung 1080p-video konverteres av programmet i sanntid. Det er verdt å merke seg at kvaliteten på den endelige videoen er veldig nær det originale videomaterialet, dvs. Badaboom koder veldig, veldig effektivt.
Men vanligvis overfører de video til en lavere oppløsning, la oss se hvordan ting er i denne modusen. Etter hvert som oppløsningen ble redusert, ble også videobithastigheten redusert. Det var 9500 kbps for 1080p utdatafil, 4100 kbps for 720p og 2400 kbps for 720x404. Valget ble tatt ut fra et rimelig forhold mellom størrelse og kvalitet.
Ingen kommentarer nødvendig. Hvis du lager en rip fra 720p til vanlig SD-kvalitet, vil transkoding av en film som varer i 2 timer ta omtrent 30 minutter. Og samtidig vil prosessorbelastningen være ubetydelig, du kan jobbe uten å føle ubehag.
Hva om du konverterer videoen til et format for en mobilenhet? For å gjøre dette, velg iPhone-profilen (bitrate 1 Mbit/s, 480x320) og se på kodingshastigheten:
Trenger jeg å si noe? En to-timers film i normal iPhone-kvalitet omkodes på mindre enn 15 minutter. Med HD-kvalitet er det vanskeligere, men fortsatt veldig raskt. Det viktigste er at kvaliteten på utgangsvideoen forblir på et ganske høyt nivå når den vises på en telefonskjerm.
Generelt er inntrykkene fra Badaboom positive, hastigheten på operasjonen er behagelig, og grensesnittet er enkelt og oversiktlig. Alle slags feil i tidligere versjoner (jeg brukte betaen i 2008) har blitt fikset. Bortsett fra én ting - banen til kildefilen, så vel som til mappen der den ferdige videoen er lagret, skal ikke inneholde russiske bokstaver. Men sammenlignet med fordelene med programmet, er denne ulempen ubetydelig.
Neste i rekken skal vi ha Super LoiLoScope. For den vanlige versjonen spør de 3.280 rubler, og for berøringsversjonen, som støtter berøringskontroll i Windows 7, ber de om like mye 4.440 rubler. La oss prøve å finne ut hvorfor utvikleren vil ha den slags penger og hvorfor videoredigereren trenger multitouch-støtte. Siste versjon brukt - 1.8.3.3 .
Det er ganske vanskelig å beskrive programgrensesnittet med ord, så jeg bestemte meg for å lage en kort video. Jeg vil si med en gang at, som alle videokonverterere for CUDA, støttes GPU-akselerasjon kun for videoutgang i MPEG4 med h.264-kodeken.
Under koding er prosessorbelastningen 100 %, men dette forårsaker ikke ubehag. Nettleseren og andre lette applikasjoner bremser ikke ned.
La oss nå gå videre til ytelsen. Til å begynne med er alt det samme som med Badaboom - omkoding av videoen til en lignende kvalitet.
Resultatene er mye bedre enn Badaboom. Kvaliteten er også utmerket, forskjellen med originalen kan bare merkes ved å sammenligne rammer i par under et forstørrelsesglass.
Wow, her overgår LoiloScope Badaboom med 2,5 ganger. Samtidig kan du enkelt klippe og kode en annen video parallelt, lese nyheter og til og med se film, og til og med FullHD spilles av uten problemer, selv om prosessorbelastningen er maksimal.
La oss nå prøve å lage en video for en mobilenhet, la oss kalle profilen den samme som den ble kalt i Badaboom – iPhone (480x320, 1 Mbit/s):
Det er ingen feil. Alt ble kontrollert på nytt flere ganger, hver gang ble resultatet det samme. Mest sannsynlig skjer dette av den enkle grunn at SD-filen ble tatt opp med en annen kodek og i en annen beholder. Ved transkoding blir video først dekodet, delt inn i matriser av en viss størrelse og komprimert. ASP-dekoderen som brukes i tilfelle av xvid er tregere enn AVC (for h.264) ved parallell dekoding. Imidlertid er 192 fps 8 ganger raskere enn hastigheten til den originale videoen; en 23-minutters serie komprimeres på mindre enn 4 minutter. Situasjonen ble gjentatt med andre filer komprimert til xvid/DivX.
LoiloScope Jeg etterlot bare hyggelige inntrykk - grensesnittet, til tross for dets uvanlighet, er praktisk og funksjonelt, og operasjonshastigheten er uten ros. Den relativt dårlige funksjonaliteten er noe frustrerende, men ofte med enkel installasjon trenger du bare å justere litt på fargene, lage jevne overganger og legge til tekst, og LoiloScope gjør en utmerket jobb med dette. Prisen er også noe skremmende - mer enn $100 for den vanlige versjonen er normalt for utlandet, men slike tall virker fortsatt litt ville for oss. Selv om jeg innrømmer at hvis jeg for eksempel ofte filmet og redigerte hjemmevideoer, så hadde jeg kanskje tenkt på å kjøpe det. Samtidig sjekket jeg forresten muligheten for å redigere HD (eller rettere sagt AVCHD) innhold direkte fra et videokamera uten først å konvertere til et annet format; LoiloScope avslørte ingen problemer med filer som .mts.
Ny teknologi er som en nylig fremvoksende evolusjonær art. En merkelig skapning, i motsetning til de mange gamle. Noen ganger vanskelig, noen ganger morsomt. Og til å begynne med virker hans nye egenskaper på ingen måte egnet for denne faste og stabile verden.
Det går imidlertid litt tid, og det viser seg at nybegynneren løper fortere, hopper høyere og generelt sett er sterkere. Og han spiser mer fluer enn sine retrograde naboer. Og så begynner de samme naboene å forstå at det ikke nytter å krangle med denne klønete førstnevnte. Det er bedre å være venner med ham, og enda bedre å organisere en symbiose. Du vil se at det kommer flere fluer.
GPGPU-teknologi (General-Purpose Graphics Processing Units - generell grafisk prosessor) eksisterte i lang tid bare i teoretiske beregninger av smarte akademikere. Hvordan ellers? Å foreslå å radikalt endre databehandlingsprosessen som har utviklet seg over flere tiår ved å overlate beregningen av parallelle grener til et skjermkort - bare teoretikere er i stand til dette.
Logoen til CUDA-teknologien minner oss om at den vokste i dypet av
3D-grafikk.
Men GPGPU-teknologien kom ikke til å samle støv lenge på sidene til universitetstidsskrifter. Etter å ha fluffet opp fjærene til hennes beste egenskaper, vakte hun oppmerksomheten til produsentene. Slik ble CUDA født - en implementering av GPGPU på GeForce-grafikkprosessorer produsert av nVidia.
Takket være CUDA har GPGPU-teknologier blitt mainstream. Og nå er det bare de mest nærsynte og dekket med et tykt lag av latskap som utviklere av programmeringssystemer som ikke erklærer støtte for CUDA med sitt produkt. IT-publikasjoner anså det som en ære å presentere detaljene om teknologien i en rekke fyldige populærvitenskapelige artikler, og konkurrenter satte seg umiddelbart ned med mønstre og krysskompilatorer for å utvikle noe lignende.
Offentlig anerkjennelse er en drøm ikke bare for ambisiøse stjerner, men også for nyfødte teknologier. Og CUDA var heldig. Hun er godt kjent, de snakker og skriver om henne.
De skriver bare som om de fortsetter å diskutere GPGPU i tykke vitenskapelige tidsskrifter. De bombarderer leseren med en haug med begreper som "grid", "SIMD", "warp", "host", "tekstur og konstant minne". De fordyper ham helt til topps i organisasjonsdiagrammene til nVidia GPUer, leder ham langs svingete stier av parallelle algoritmer og (det sterkeste trekket) viser lange kodelister på C-språket. Som et resultat viser det seg at vi ved inngangen til artikkelen har en fersk leser med et brennende ønske om å forstå CUDA, og ved utgangen har vi den samme leseren, men med et hovent hode fylt med et rot av fakta, diagrammer , kode, algoritmer og termer.
I mellomtiden er målet med enhver teknologi å gjøre livene våre enklere. Og CUDA gjør en god jobb med dette. Resultatene av arbeidet hennes er det som vil overbevise enhver skeptiker bedre enn hundrevis av skjemaer og algoritmer.
Ikke overalt
CUDA støttes av høyytelses superdatamaskiner
nVidia Tesla.
Og likevel, før du ser på resultatene av CUDAs arbeid med å gjøre livet til den gjennomsnittlige brukeren enklere, er det verdt å forstå alle dens begrensninger. Akkurat som med en genie: ethvert ønske, men ett. CUDA har også sine akilleshæler. En av dem er begrensningene til plattformene den kan fungere på.
Listen over nVidia-skjermkort som støtter CUDA er presentert i en spesiell liste kalt CUDA-aktiverte produkter. Listen er ganske imponerende, men lett å klassifisere. CUDA-støtte nektes ikke:
nVidia GeForce 8., 9., 100., 200. og 400. seriemodeller med minimum 256 megabyte videominne ombord. Støtte strekker seg til både desktop- og mobilkort.
De aller fleste desktop- og mobilskjermkort er nVidia Quadro.
Alle løsninger fra nvidia ION netbook-serien.
Høyytelses HPC (High Performance Computing) og nVidia Tesla superdatamaskinløsninger som brukes både for personlig databehandling og for å organisere skalerbare klyngesystemer.
Derfor, før du bruker CUDA-baserte programvareprodukter, er det verdt å sjekke denne listen over favoritter.
I tillegg til selve skjermkortet kreves det en passende driver for å støtte CUDA. Det er koblingen mellom sentral- og grafikkprosessoren, og fungerer som et slags programvaregrensesnitt for tilgang til programkode og data til multikjerneskatten til GPU. For å være sikker på at du ikke gjør en feil, anbefaler nVidia at du besøker driversiden og får den nyeste versjonen.
...men selve prosessen
Hvordan fungerer CUDA? Hvordan forklare den komplekse prosessen med parallell databehandling på en spesiell GPU-maskinvarearkitektur uten å kaste leseren ned i avgrunnen av spesifikke termer?
Du kan prøve å gjøre dette ved å forestille deg hvordan sentralprosessoren utfører programmet i symbiose med grafikkprosessoren.
Arkitektonisk er den sentrale prosessorenheten (CPU) og dens grafikkmotpart (GPU) utformet annerledes. Hvis vi trekker en analogi med bilindustriens verden, så er CPU en stasjonsvogn, en av de som kalles en "låve". Det ser ut som en personbil, men på samme tid (fra utviklernes synspunkt) "er det en sveitser, en reaper og en spiller på røret." Utfører rollen som en liten lastebil, buss og hypertrofiert kombi samtidig. Stasjonsvogn, kort sagt. Den har få sylinderkjerner, men de håndterer nesten alle oppgaver, og det imponerende cache-minnet er i stand til å lagre en haug med data.
Men GPU er en sportsbil. Det er bare én funksjon: å levere piloten til mål så raskt som mulig. Derfor ingen stort bagasjeromsminne, ingen ekstra seter. Men det er hundrevis av ganger flere sylinderkjerner enn CPU.
Takket være CUDA trenger ikke GPGPU-programutviklere å fordype seg i kompleksiteten ved programmering
utvikling for grafikkmotorer som DirectX og OpenGL
I motsetning til sentralprosessoren, som er i stand til å løse enhver oppgave, inkludert grafikk, men med gjennomsnittlig ytelse, er grafikkprosessoren tilpasset en høyhastighetsløsning av én oppgave: å gjøre om en haug med polygoner ved inngangen til en haug med piksler kl. utgangen. Dessuten kan dette problemet løses parallelt ved å bruke hundrevis av relativt enkle datakjerner i GPUen.
Så hva slags tandem kan det være fra en stasjonsvogn og en sportsbil? CUDA fungerer omtrent slik: programmet kjører på CPU-en til det er en kodedel som kan kjøres parallelt. Så, i stedet for at den sakte kjøres på to (eller til og med åtte) kjerner av den kuleste CPU, overføres den til hundrevis av GPU-kjerner. Samtidig reduseres utførelsestiden for denne delen betydelig, noe som betyr at utføringstiden for hele programmet også reduseres.
Teknologisk endres ingenting for programmereren. Koden til CUDA-programmer er skrevet på C-språk. Mer presist, på sin spesielle dialekt "C med bekker" (C med bekker). Utviklet ved Stanford, kalles denne utvidelsen av C-språket Brook. Grensesnittet som overfører Brook-kode til GPUen er driveren til et skjermkort som støtter CUDA. Den organiserer hele prosesseringsprosessen til denne delen av programmet slik at for programmereren ser GPU ut som en CPU-koprosessor. Svært lik bruken av en matematisk koprosessor i de tidlige dagene av personlig databehandling. Med bruken av Brook, skjermkort med CUDA-støtte og drivere for dem, har enhver programmerer blitt i stand til å få tilgang til GPUen i programmene sine. Men før denne sjamanismen var eid av en smal krets av utvalgte mennesker som brukte år på å finpusse programmeringsteknikker for DirectX- eller OpenGL-grafikkmotorer.
I tønnen til denne pretensiøse honningen - CUDAs lovprisninger - er det verdt å legge en flue i salven, det vil si restriksjoner. Ikke alle problemer som må programmeres kan løses med CUDA. Det vil ikke være mulig å fremskynde løsningen av rutinemessige kontoroppgaver, men du kan stole på at CUDA beregner oppførselen til tusenvis av samme type jagerfly i World of Warcraft. Men dette er en oppdiktet oppgave. La oss se på eksempler på hva CUDA allerede løser veldig effektivt.
Rettferdige gjerninger
CUDA er en veldig pragmatisk teknologi. Etter å ha implementert støtten i skjermkortene sine, forventet nVidia med rette at CUDA-banneret ville bli tatt opp av mange entusiaster både i universitetsmiljøet og i handelen. Og slik ble det. CUDA-baserte prosjekter lever og gir fordeler.
NVIDIA PhysX
Når de annonserer for sitt neste spillmesterverk, legger produsentene ofte vekt på 3D-realismen. Men uansett hvor ekte 3D-spillverdenen kan være, hvis fysikkens elementære lover, som gravitasjon, friksjon og hydrodynamikk, implementeres feil, vil usannheten merkes umiddelbart.
En av egenskapene til NVIDIA PhysX fysikkmotoren er realistisk arbeid med vev.
Implementering av algoritmer for datasimulering av grunnleggende fysiske lover er en svært arbeidskrevende oppgave. De mest kjente selskapene på dette feltet er det irske selskapet Havok med sin fysiske Havok Physics på tvers av plattformer og Californian Ageia – stamfaderen til verdens første fysiske prosessor (PPU – Physics Processing Unit) og den tilsvarende PhysX-fysikkmotoren. Den første av dem, selv om den er kjøpt opp av Intel, jobber nå aktivt med å optimalisere Havok-motoren for ATI-skjermkort og AMD-prosessorer. Men Ageia med sin PhysX-motor ble en del av nVidia. Samtidig løste nVidia det ganske vanskelige problemet med å tilpasse PhysX til CUDA-teknologi.
Dette ble mulig takket være statistikk. Det er statistisk bevist at uansett hvor kompleks gjengivelse en GPU utfører, er noen av kjernene fortsatt inaktive. Det er på disse kjernene PhysX-motoren kjører.
Takket være CUDA begynte brorparten av beregninger relatert til fysikken i spillverdenen å bli utført på skjermkortet. Den frigjorte kraften til sentralprosessoren ble brukt til å løse andre spillproblemer. Resultatet lot ikke vente på seg. Ifølge eksperter har ytelsesgevinsten i spilling med PhysX som kjører på CUDA økt med minst en størrelsesorden. Sannsynligheten for å realisere fysiske lover har også økt. CUDA tar seg av den rutinemessige beregningen av implementering av friksjon, tyngdekraft og annet kjent for oss for flerdimensjonale objekter. Nå passer ikke bare heltene og utstyret deres perfekt inn i lovene i den fysiske verden vi er kjent med, men også støv, tåke, eksplosjonsbølger, flammer og vann.
CUDA-versjon av NVIDIA Texture Tools 2 teksturkomprimeringspakke
Liker du realistiske objekter i moderne spill? Det er verdt å si takk til teksturutviklerne. Men jo mer virkelighet det er i teksturen, desto større volum. Jo mer det tar opp dyrebart minne. For å unngå dette blir teksturer forhåndskomprimert og dynamisk dekomprimert etter behov. Og kompresjon og dekompresjon er rene beregninger. For å jobbe med teksturer har nVidia gitt ut NVIDIA Texture Tools-pakken. Den støtter effektiv komprimering og dekomprimering av DirectX-teksturer (det såkalte HF-formatet). Den andre versjonen av denne pakken har støtte for BC4- og BC5-komprimeringsalgoritmer implementert i DirectX 11-teknologi. Men det viktigste er at NVIDIA Texture Tools 2 inkluderer CUDA-støtte. I følge nVidia gir dette en 12-dobling av ytelsen i teksturkomprimering og dekompresjonsoppgaver. Dette betyr at spillrammer vil lastes raskere og glede spilleren med sin realisme.
NVIDIA Texture Tools 2-pakken er designet for å fungere med CUDA. Ytelsesgevinsten ved komprimering og dekomprimering av teksturer er åpenbar.
Bruk av CUDA kan forbedre effektiviteten av videoovervåking betydelig.
Videostrømbehandling i sanntid
Uansett hva man kan si, er den nåværende verden, fra et spioneringssynspunkt, mye nærmere verden til Orwells storebror enn det ser ut til. Både bilførere og besøkende på offentlige steder kjenner blikket til videokameraer.
Fullflytende elver av videoinformasjon strømmer inn i sentrene av behandlingen og ... løper inn i en smal lenke - en person. I de fleste tilfeller er han den siste myndigheten som overvåker videoverdenen. Dessuten er ikke myndigheten den mest effektive. Blinker, blir distrahert og prøver å sovne.
Takket være CUDA ble det mulig å implementere algoritmer for samtidig sporing av flere objekter i en videostrøm. I dette tilfellet skjer prosessen i sanntid, og videoen er full 30 fps. Sammenlignet med implementeringen av en slik algoritme på moderne multi-core CPUer, gir CUDA en to- eller tredobling av ytelsen, og dette, ser du, er ganske mye.
Videokonvertering, lydfiltrering
Badaboom videoomformer er den første som bruker CUDA for å øke hastigheten på konverteringen.
Det er fint å se et nytt videoutleieprodukt i FullHD-kvalitet og på en stor skjerm. Men du kan ikke ta en stor skjerm med deg på veien, og FullHD-videokodeken vil hikke på lavstrømprosessoren til en mobil dings. Konvertering kommer til unnsetning. Men de fleste som har vært borti det i praksis klager på den lange konverteringstiden. Dette er forståelig, prosessen er rutinemessig, egnet for parallellisering, og dens utførelse på CPU er ikke veldig optimal.
Men CUDA takler det med et brak. Det første tegnet er Badaboom-omformeren fra Elevental. Badaboom-utviklerne tok den riktige avgjørelsen da de valgte CUDA. Tester viser at den konverterer en standard time og en halv film til iPhone/iPod Touch-format på mindre enn tjue minutter. Og dette til tross for at når du bare bruker CPU, tar denne prosessen mer enn en time.
Hjelper CUDA og profesjonelle musikkelskere. Hvilken som helst av dem ville gi et halvt kongedømme for en effektiv FIR-crossover – et sett med filtre som deler lydspekteret inn i flere bånd. Denne prosessen er svært arbeidskrevende og, med et stort volum av lydmateriale, tvinger lydteknikeren til å "røyke" i flere timer. Implementering av en CUDA-basert FIR crossover øker hastigheten på driften hundrevis av ganger.
CUDA Future
Etter å ha gjort GPGPU-teknologi til en realitet, hviler CUDA ikke på laurbærene. Som det skjer overalt, fungerer refleksjonsprinsippet i CUDA: Nå påvirker ikke bare arkitekturen til nVidia-videoprosessorer utviklingen av CUDA SDK-versjoner, men CUDA-teknologien tvinger selv nVidia til å revurdere arkitekturen til brikkene sine. Et eksempel på slik refleksjon er nVidia ION-plattformen. Den andre versjonen er spesielt optimalisert for å løse CUDA-problemer. Dette betyr at selv i relativt rimelige maskinvareløsninger vil forbrukerne få all kraften og de strålende egenskapene til CUDA.
Og den er designet for å oversette vertskode (hoved-, kontrollkode) og enhetskode (maskinvarekode) (filer med .cu-utvidelsen) til objektfiler som er egnet for prosessen med å sette sammen det endelige programmet eller biblioteket i et hvilket som helst programmeringsmiljø, for eksempel. i NetBeans.
CUDA-arkitekturen bruker en rutenettminnemodell, klyngetrådmodellering og SIMD-instruksjoner. Gjelder ikke bare for høyytelses grafikkdatabehandling, men også for ulike vitenskapelige databehandlinger som bruker nVidia-skjermkort. Forskere og forskere bruker CUDA mye på en rekke felt, inkludert astrofysikk, beregningsbiologi og kjemi, modellering av væskedynamikk, elektromagnetiske interaksjoner, datatomografi, seismisk analyse og mer. CUDA har muligheten til å koble til applikasjoner ved hjelp av OpenGL og Direct3D. CUDA er programvare på tvers av plattformer for operativsystemer som Linux, Mac OS X og Windows.
22. mars 2010 ga nVidia ut CUDA Toolkit 3.0, som inneholdt støtte for OpenCL.
Utstyr
CUDA-plattformen dukket først opp på markedet med utgivelsen av åttende generasjons NVIDIA G80-brikke og ble til stede i alle påfølgende serier med grafikkbrikker, som brukes i GeForce-, Quadro- og NVidia Tesla-akseleratorfamiliene.
Den første serien med maskinvare som støttet CUDA SDK, G8x, hadde en 32-bits enkeltpresisjonsvektorprosessor som brukte CUDA SDK som API (CUDA støtter C-dobbeltypen, men presisjonen er nå redusert til 32-bits flytende punkt). Senere GT200-prosessorer har støtte for 64-biters presisjon (kun SFU), men ytelsen er betydelig dårligere enn for 32-biters presisjon (på grunn av det faktum at det kun er to SFUer per stream multiprosessor, mens det er åtte skalarprosessorer). GPUen organiserer multithreading av maskinvare, som lar deg bruke alle ressursene til GPUen. Dermed åpner prospektet for å overføre funksjonene til den fysiske akseleratoren til grafikkakseleratoren (et eksempel på implementering er nVidia PhysX). Det åpner også for store muligheter for å bruke datagrafikkmaskinvare for å utføre komplekse ikke-grafiske beregninger: for eksempel i beregningsbiologi og andre vitenskapsgrener.
Fordeler
Sammenlignet med den tradisjonelle tilnærmingen til å organisere generell databehandling gjennom grafikk-APIer, har CUDA-arkitekturen følgende fordeler på dette området:
Begrensninger
- Alle funksjoner som er kjørbare på enheten støtter ikke rekursjon (CUDA Toolkit 3.1 støtter pekere og rekursjon) og har noen andre begrensninger
Støttede GPUer og grafikkakseleratorer
Listen over enheter fra utstyrsprodusenten Nvidia med erklært full støtte for CUDA-teknologi er gitt på den offisielle Nvidia-nettsiden: CUDA-Enabled GPU Products (engelsk).
Faktisk støtter følgende periferiutstyr for tiden CUDA-teknologi i PC-maskinvaremarkedet:
Spesifikasjonsversjon | GPU | Skjermkort |
---|---|---|
1.0 | G80, G92, G92b, G94, G94b | GeForce 8800GTX/Ultra, 9400GT, 9600GT, 9800GT, Tesla C/D/S870, FX4/5600, 360M, GT 420 |
1.1 | G86, G84, G98, G96, G96b, G94, G94b, G92, G92b | GeForce 8400GS/GT, 8600GT/GTS, 8800GT/GTS, 9600 GSO, 9800GTX/GX2, GTS 250, GT 120/30/40, FX 4/570, 3/580, 17/18/42000, 2xxMx, 2xxMx /370M, 3/5/770M, 16/17/27/28/36/37/3800M, NVS420/50 |
1.2 | GT218, GT216, GT215 | GeForce 210, GT 220/40, FX380 LP, 1800M, 370/380M, NVS 2/3100M |
1.3 | GT200, GT200b | GeForce GTX 260, GTX 275, GTX 280, GTX 285, GTX 295, Tesla C/M1060, S1070, Quadro CX, FX 3/4/5800 |
2.0 | GF100, GF110 | GeForce (GF100) GTX 465, GTX 470, GTX 480, Tesla C2050, C2070, S/M2050/70, Quadro Plex 7000, Quadx 5000, 5, 6000, GFORCE (GF110) |
2.1 | GF104, GF114, GF116, GF108, GF106 | GeForce 610M, GT 430, GT 440, GTS 450, GTX 460, GTX 550 Ti, GTX 560, GTX 560 Ti, 500M, Quadro 600, 2000 |
3.0 | GK104, GK106, GK107 | GeForce GTX 690, GTX 680, GTX 670, GTX 660 TI, GTX 660, GTX 650 TI, GTX 650, GT 640, GEFORCE GTX 670MX, GTX, GTX, GTX, GTX, GTX, GTX, GTX, GTX, GTX, GTX, GTX, GTX, GTX, GTX 660MX 660mx 660mx 660mx 660mx 660mx 640, GTX 650, GTX 650, GTX 650, GTX 650, GTX 650, GTX 650, GTX 650, GTX 650. T 650m, GeForce GT 645M, GeForce GT 640M |
3.5 | GK110 |
|
|
|
|
|
- Modellene Tesla C1060, Tesla S1070, Tesla C2050/C2070, Tesla M2050/M2070, Tesla S2050 tillater GPU-beregninger med dobbel presisjon.
Funksjoner og spesifikasjoner for ulike versjoner
Funksjonsstøtte (ulistede funksjoner er støttes for alle datafunksjoner) |
Beregningsevne (versjon) | ||||
---|---|---|---|---|---|
1.0 | 1.1 | 1.2 | 1.3 | 2.x | |
32-bits ord i globalt minne |
Nei | Ja | |||
flyttallverdier i globalt minne |
|||||
Heltalls atomfunksjoner som opererer på 32-bits ord i delt minne |
Nei | Ja | |||
atomicExch() som opererer på 32-bit flyttallverdier i delt minne |
|||||
Heltalls atomfunksjoner som opererer på 64-bits ord i globalt minne |
|||||
Warp stemme funksjoner | |||||
Dobbelpresisjon flyttalloperasjoner | Nei | Ja | |||
Atomfunksjoner som opererer på 64-bit heltallsverdier i delt minne |
Nei | Ja | |||
Flytepunkt atomtilsetning opererer på 32-bits ord i globalt og delt minne |
|||||
_stemmeseddel() | |||||
_threadfence_system() | |||||
_syncthreads_count(), _syncthreads_and(), _syncthreads_or() |
|||||
Overflatefunksjoner | |||||
3D rutenett av trådblokk |
Tekniske spesifikasjoner | Beregningsevne (versjon) | ||||
---|---|---|---|---|---|
1.0 | 1.1 | 1.2 | 1.3 | 2.x | |
Maksimal dimensjonalitet til rutenettet av gjengeblokker | 2 | 3 | |||
Maksimal x-, y- eller z-dimensjon for et rutenett av trådblokker | 65535 | ||||
Maksimal dimensjonalitet til gjengeblokk | 3 | ||||
Maksimal x- eller y-dimensjon for en blokk | 512 | 1024 | |||
Maksimal z-dimensjon for en blokk | 64 | ||||
Maksimalt antall tråder per blokk | 512 | 1024 | |||
Renningsstørrelse | 32 | ||||
Maksimalt antall residente blokker per multiprosessor | 8 | ||||
Maksimalt antall innbyggede varps per multiprosessor | 24 | 32 | 48 | ||
Maksimalt antall faste tråder per multiprosessor | 768 | 1024 | 1536 | ||
Antall 32-bits registre per multiprosessor | 8K | 16K | 32K | ||
Maksimal mengde delt minne per multiprosessor | 16 KB | 48 KB | |||
Antall delte minnebanker | 16 | 32 | |||
Mengde lokalt minne per tråd | 16 KB | 512 KB | |||
Konstant minnestørrelse | 64 KB | ||||
Cache arbeidssett per multiprosessor for konstant minne | 8 KB | ||||
Cache arbeidssett per multiprosessor for teksturminne | Enhetsavhengig, mellom 6 KB og 8 KB | ||||
Maksimal bredde for 1D-tekstur |
8192 | 32768 | |||
Maksimal bredde for 1D-tekstur referanse bundet til lineært minne |
2 27 | ||||
Maksimal bredde og antall lag for en 1D lagdelt teksturreferanse |
8192 x 512 | 16384 x 2048 | |||
Maksimal bredde og høyde for 2D teksturreferanse bundet til lineært minne eller en CUDA-array |
65536 x 32768 | 65536 x 65535 | |||
Maksimal bredde, høyde og antall av lag for en 2D lagdelt teksturreferanse |
8192 x 8192 x 512 | 16384 x 16384 x 2048 | |||
Maksimal bredde, høyde og dybde for en 3D-teksturreferanse bundet til lineær minne eller en CUDA-array |
2048 x 2048 x 2048 | ||||
Maksimalt antall teksturer som kan være bundet til en kjerne |
128 | ||||
Maksimal bredde for en 1D overflate referanse bundet til en CUDA-matrise |
Ikke støttes |
8192 | |||
Maksimal bredde og høyde for en 2D overflatereferanse bundet til en CUDA-matrise |
8192 x 8192 | ||||
Maks antall flater som kan være bundet til en kjerne |
8 | ||||
Maks antall instruksjoner pr kjerne |
2 millioner |
Eksempel
CudaArray* cu_array; tekstur< float , 2 >tex; // Tildel array cudaMalloc( & cu_array, cudaCreateChannelDesc< float>(), bredde høyde) ; // Kopier bildedata til array cudaMemcpy( cu_array, image, width* height, cudaMemcpyHostToDevice) ; // Bind matrisen til teksturen cudaBindTexture(tex, cu_array); // Kjør kernel dim3 blockDim(16, 16, 1) ; dim3 gridDim(width / blockDim.x, height / blockDim.y, 1); kjerne<<< gridDim, blockDim, 0 >>> (d_odata, bredde, høyde) ; cudaUnbindTexture(tex) ; __global__ void kjerne(float * odata, int høyde, int width) ( usignert int x = blockIdx.x * blockDim.x + threadIdx.x ; usignert int y = blockIdx.y * blockDim.y + threadIdx.y ; float c = texfetch(tex, x, y); odata[ y* width+ x] = c; )
Importer pycuda.driver som drv import numpy drv.init() dev = drv.Device(0) ctx = dev.make_context() mod = drv.SourceModule( """ __global__ void multiply_them(float *dest, float *a, float *b) ( const int i = threadIdx.x; dest[i] = a[i] * b[i]; ) """) multiply_them = mod.get_function ("multiply_them") a = numpy.random .randn (400 ) .astype (numpy.float32 ) b = numpy.random .randn (400 ) .astype (numpy.float32 ) dest_like numpy.zeros (a) multiply_them( drv.Out (dest) , drv.In (a) , drv.In (b) , block= (400 , 1 , 1 ) ) print dest-a*b
CUDA som fag på universiteter
Fra desember 2009 undervises CUDA-programvaremodellen ved 269 universiteter rundt om i verden. I Russland gis det opplæringskurs om CUDA ved St. Petersburg Polytechnic University, Yaroslavl State University. P. G. Demidov, Moskva, Nizhny Novgorod, St. Petersburg, Tver, Kazan, Novosibirsk, Novosibirsk State Technical University, Omsk og Perm State University, International University of the Nature of Society and Man "Dubna", Ivanovo State Energy University, Belgorod State University , MSTU dem. Bauman, Russian Chemical Technical University oppkalt etter. Mendeleev, Interregional Supercomputer Center RAS, . I tillegg, i desember 2009, ble det kunngjort at det første russiske vitenskapelige og pedagogiske senteret "Parallel Computing", som ligger i byen Dubna, begynte å operere, hvis oppgaver inkluderer opplæring og konsultasjoner om å løse komplekse dataproblemer på GPUer.
I Ukraina undervises kurs om CUDA ved Kiev Institute of System Analysis.
Linker
Offisielle ressurser
- CUDA Zone (russisk) - offisiell CUDA-nettside
- CUDA GPU Computing (engelsk) - offisielle nettfora dedikert til CUDA-databehandling
Uoffisielle ressurser
Toms maskinvare- Dmitrij Tsjekanov. nVidia CUDA: databehandling på et skjermkort eller død av CPU? . Toms maskinvare (22. juni 2008). Arkivert
- Dmitrij Tsjekanov. nVidia CUDA: Benchmarking GPU-applikasjoner for massemarkedet. Tom's Hardware (19. mai 2009). Arkivert fra originalen 4. mars 2012. Hentet 19. mai 2009.
- Alexey Berillo. NVIDIA CUDA - ikke-grafisk databehandling på GPUer. Del 1 . iXBT.com (23. september 2008). Arkivert fra originalen 4. mars 2012. Hentet 20. januar 2009.
- Alexey Berillo. NVIDIA CUDA - ikke-grafisk databehandling på GPUer. Del 2. iXBT.com (22. oktober 2008). - Eksempler på implementering av NVIDIA CUDA. Arkivert fra originalen 4. mars 2012. Hentet 20. januar 2009.
- Boreskov Alexey Viktorovich. CUDA Basics (20. januar 2009). Arkivert fra originalen 4. mars 2012. Hentet 20. januar 2009.
- Vladimir Frolov. Introduksjon til CUDA-teknologi. Nettmagasinet "Computer Graphics and Multimedia" (19. desember 2008). Arkivert fra originalen 4. mars 2012. Hentet 28. oktober 2009.
- Igor Oskolkov. NVIDIA CUDA er en rimelig billett til en verden av store databehandlinger. Computerra (30. april 2009). Hentet 3. mai 2009.
- Vladimir Frolov. Introduksjon til CUDA-teknologi (1. august 2009). Arkivert fra originalen 4. mars 2012. Hentet 3. april 2010.
- GPGPU.ru. Bruke skjermkort til databehandling
- . Parallell Computing Center
Notater
se også
Nvidia | ||||||
---|---|---|---|---|---|---|
Grafisk prosessorer |
|
I utviklingen av moderne prosessorer er det en tendens til en gradvis økning i antall kjerner, noe som øker deres evner i parallell databehandling. Imidlertid har det lenge vært tilgjengelige GPUer som er betydelig overlegne CPUer i denne forbindelse. Og disse egenskapene til GPUer har allerede blitt tatt i betraktning av noen selskaper. De første forsøkene på å bruke grafikkakseleratorer for ikke-måldatabehandling har blitt gjort siden slutten av 90-tallet. Men bare fremveksten av shaders ble drivkraften for utviklingen av en helt ny teknologi, og i 2003 dukket konseptet med GPGPU (General-purpose graphics processing units) opp. En viktig rolle i utviklingen av dette initiativet ble spilt av BrookGPU, som er en spesiell utvidelse for språket C. Før bruken av BrookGPU kunne programmerere kun jobbe med GPUer gjennom Direct3D eller OpenGL API. Brook tillot utviklere å jobbe med et kjent miljø, og kompilatoren selv, ved å bruke spesielle biblioteker, implementerte interaksjon med GPU på et lavt nivå.
En slik fremgang kunne ikke unngå å tiltrekke oppmerksomheten til lederne av denne industrien - AMD og NVIDIA, som begynte å utvikle sine egne programvareplattformer for ikke-grafisk databehandling på skjermkortene sine. Ingen vet bedre enn GPU-utviklere alle nyansene og funksjonene til produktene deres, noe som gjør at de samme selskapene kan optimalisere programvarepakken for spesifikke maskinvareløsninger så effektivt som mulig. For tiden utvikler NVIDIA CUDA (Compute Unified Device Architecture)-plattformen; AMD kaller en lignende teknologi CTM (Close To Metal) eller AMD Stream Computing. Vi vil se på noen av egenskapene til CUDA og i praksis evaluere databehandlingsevnene til G92-grafikkbrikken til GeForce 8800 GT-skjermkortet.
Men først, la oss se på noen av nyansene ved å utføre beregninger ved hjelp av GPUer. Deres største fordel er at grafikkbrikken i utgangspunktet er designet for å utføre flere tråder, mens hver kjerne i en konvensjonell CPU utfører en strøm av sekvensielle instruksjoner. Enhver moderne GPU er en multiprosessor som består av flere databehandlingsklynger, med mange ALUer i hver. Den kraftigste moderne GT200-brikken består av 10 slike klynger, som hver har 24 strømprosessorer. Det testede GeForce 8800 GT-skjermkortet basert på G92-brikken har syv store dataenheter med 16 strømprosessorer hver. CPU-er bruker SIMD SSE-blokker for vektorberegninger (enkelt instruksjon flere data - en instruksjon utføres på flere data), som krever transformering av data til 4 vektorer. GPUen behandler tråder skalært, dvs. en instruksjon brukes over flere tråder (SIMT - single instruction multiple threads). Dette sparer utviklere fra å konvertere data til vektorer, og tillater vilkårlig forgrening i strømmer. Hver GPU-dataenhet har direkte minnetilgang. Og videominnets båndbredde er høyere, takket være bruken av flere separate minnekontrollere (på topp-enden G200 er det 8 64-bits kanaler) og høye driftsfrekvenser.
Generelt, i visse oppgaver når du arbeider med store datamengder, er GPUer mye raskere enn CPUer. Nedenfor ser du en illustrasjon av denne uttalelsen:
Diagrammet viser dynamikken i CPU- og GPU-ytelsesvekst siden 2003. NVIDIA liker å sitere disse dataene som reklame i sine dokumenter, men de er bare teoretiske beregninger og i virkeligheten kan gapet selvfølgelig vise seg å være mye mindre.
Men uansett så er det et enormt potensial av GPUer som kan brukes, og som krever en spesifikk tilnærming til programvareutvikling. Alt dette er implementert i CUDA maskinvare- og programvaremiljøet, som består av flere programvarenivåer - høynivå CUDA Runtime API og lavnivå CUDA Driver API.
CUDA bruker standard C-språk for programmering, som er en av hovedfordelene for utviklere. I utgangspunktet inkluderer CUDA bibliotekene BLAS (grunnleggende lineær algebra-pakke) og FFT (Fourier-transformasjon). CUDA har også muligheten til å samhandle med OpenGL eller DirectX grafikk APIer, evnen til å utvikle på et lavt nivå, og er preget av en optimalisert fordeling av datastrømmer mellom CPU og GPU. CUDA-beregninger utføres samtidig med grafikk, i motsetning til den lignende AMD-plattformen, hvor en spesiell virtuell maskin lanseres for beregninger på GPU. Men et slikt "samliv" er også full av feil hvis en stor belastning skapes av grafikk-APIet mens CUDA kjører samtidig - tross alt har grafiske operasjoner fortsatt høyere prioritet. Plattformen er kompatibel med 32- og 64-biters operativsystemer Windows XP, Windows Vista, MacOS X og ulike versjoner av Linux. Plattformen er åpen og på nettsiden kan du i tillegg til spesielle drivere for skjermkortet laste ned programvarepakker CUDA Toolkit, CUDA Developer SDK, inkludert en kompilator, debugger, standardbiblioteker og dokumentasjon.
Når det gjelder den praktiske implementeringen av CUDA, ble denne teknologien i lang tid bare brukt til høyt spesialiserte matematiske beregninger innen partikkelfysikk, astrofysikk, medisin eller prognose endringer i finansmarkedet, etc. Men denne teknologien blir gradvis nærmere vanlige brukere, spesielt dukker det opp spesielle plug-ins for Photoshop som kan bruke datakraften til GPU. På en spesiell side kan du studere hele listen over programmer som bruker egenskapene til NVIDIA CUDA.
Som en praktisk test av den nye teknologien på MSI NX8800GT-T2D256E-OC skjermkortet, vil vi bruke programmet TMPGEnc. Dette produktet er kommersielt (fullversjonen koster $100), men for MSI-skjermkort kommer det som en bonus i en prøveversjon i en periode på 30 dager. Du kan laste ned denne versjonen fra utviklerens nettsted, men for å installere TMPGEnc 4.0 XPress MSI Special Edition trenger du den originale disken med drivere fra MSI-kortet - uten den vil ikke programmet bli installert.
For å vise den mest komplette informasjonen om databehandlingsmuligheter i CUDA og sammenligne dem med andre videoadaptere, kan du bruke det spesielle CUDA-Z-verktøyet. Dette er informasjonen den gir om vårt GeForce 8800GT skjermkort:
Sammenlignet med referansemodellene, opererer vår kopi ved høyere frekvenser: rasterdomenet er 63 MHz høyere enn det nominelle, og skyggeenhetene er raskere med 174 MHz, og minnet er 100 MHz raskere.
Vi vil sammenligne konverteringshastigheten til den samme HD-videoen når vi kun beregner ved bruk av CPU og med ekstra aktivering av CUDA i TMPGEnc-programmet på følgende konfigurasjon:
- Prosessor: Pentium Dual-Core E5200 2,5 GHz;
- Hovedkort: Gigabyte P35-S3;
- Minne: 2x1GB GoodRam PC6400 (5-5-5-18-2T)
- Skjermkort: MSI NX8800GT-T2D256E-OC;
- Harddisk: 320GB WD3200AAKS;
- Strømforsyning: CoolerMaster eXtreme Power 500-PCAP;
- Operativsystem: Windows XP SP2;
- TMPGEnc 4.0 XPress 4.6.3.268;
- Skjermkortdrivere: ForceWare 180.60.
Koding ble utført ved hjelp av DivX 6.8.4-kodeken. I kvalitetsinnstillingene til denne kodeken er alle verdier som standard, multithreading er aktivert.
Multithreading-støtte i TMPGEnc er først aktivert i CPU/GPU-innstillinger-fanen. CUDA er også aktivert i samme seksjon.
Som du kan se fra skjermbildet ovenfor, er filterbehandling med CUDA aktivert, men maskinvarevideodekoderen er ikke aktivert. Programdokumentasjonen advarer om at aktivering av den siste parameteren øker filbehandlingstiden.
Basert på resultatene av testene ble følgende data oppnådd:
Ved 4 GHz med CUDA aktivert fikk vi bare et par sekunder (eller 2%), noe som ikke er spesielt imponerende. Men ved en lavere frekvens lar økningen fra aktivering av denne teknologien deg spare omtrent 13% av tiden, noe som vil være ganske merkbart når du behandler store filer. Men resultatene er likevel ikke så imponerende som forventet.
TMPGEnc-programmet har en CPU- og CUDA-belastningsindikator; i denne testkonfigurasjonen viste den CPU-belastningen på omtrent 20 %, og grafikkjernen på de resterende 80 %. Som et resultat har vi samme 100% som ved konvertering uten CUDA, og det er kanskje ikke tidsforskjell i det hele tatt (men den eksisterer fortsatt). Den lille minnekapasiteten på 256 MB er heller ikke en begrensende faktor. Etter avlesningene fra RivaTuner å dømme, ble det ikke brukt mer enn 154 MB videominne under drift.
konklusjoner
TMPGEnc-programmet er et av de som introduserer CUDA-teknologi til massene. Ved å bruke GPU i dette programmet kan du øke hastigheten på videobehandlingsprosessen og betydelig avlaste sentralprosessoren, noe som lar brukeren komfortabelt utføre andre oppgaver samtidig. I vårt spesifikke eksempel forbedret GeForce 8800GT 256MB skjermkort timing-ytelsen litt ved konvertering av video basert på en overklokket Pentium Dual-Core E5200-prosessor. Men det er tydelig at når frekvensen reduseres, øker gevinsten ved å aktivere CUDA; på svake prosessorer vil gevinsten fra bruken være mye større. På bakgrunn av denne avhengigheten er det ganske logisk å anta at selv med en økning i belastningen (for eksempel bruk av et veldig stort antall ekstra videofiltre), vil resultatene av et system med CUDA utmerke seg med en mer signifikant delta av forskjellen i tiden brukt på kodingsprosessen. Ikke glem at G92 ikke er den kraftigste brikken for øyeblikket, og mer moderne skjermkort vil gi betydelig høyere ytelse i slike applikasjoner. Mens applikasjonen kjører, er imidlertid ikke GPU fullastet, og sannsynligvis avhenger lastfordelingen av hver konfigurasjon separat, nemlig på prosessor/skjermkort-kombinasjonen, som til slutt kan gi en større (eller mindre) økning i prosent av CUDA-aktivering. Uansett, for de som jobber med store mengder videodata, vil denne teknologien fortsatt tillate dem å spare tid betydelig.
Riktignok har CUDA ennå ikke fått stor popularitet; kvaliteten på programvaren som jobber med denne teknologien krever forbedring. I TMPGEnc 4.0 XPress-programmet vi gjennomgikk, fungerte ikke alltid denne teknologien. Den samme videoen kunne kodes på nytt flere ganger, og så plutselig, neste gang den ble lansert, var CUDA-belastningen allerede 0 %. Og dette fenomenet var helt tilfeldig på helt andre operativsystemer. Dessuten nektet det aktuelle programmet å bruke CUDA ved koding til XviD-formatet, men det var ingen problemer med den populære DivX-kodeken.
Som et resultat kan så langt CUDA-teknologi øke ytelsen til personlige datamaskiner betydelig bare i visse oppgaver. Men anvendelsesområdet for slik teknologi vil utvide seg, og prosessen med å øke antall kjerner i konvensjonelle prosessorer indikerer en økning i etterspørselen etter parallell multi-threaded databehandling i moderne programvareapplikasjoner. Det er ikke for ingenting at alle industriledere nylig har blitt besatt av ideen om å kombinere CPU og GPU i én enhetlig arkitektur (bare husk den mye annonserte AMD Fusion). Kanskje CUDA er en av stadiene i prosessen med denne foreningen.
Vi takker følgende selskaper for å levere testutstyr:
– et sett med programvaregrensesnitt på lavt nivå ( API) for å lage spill og andre høyytelses multimedieapplikasjoner. Inkluderer støtte for høy ytelse 2D- Og 3D-grafikk, lyd og inndataenheter.
Direct3D (D3D) – grensesnitt for visning av tredimensjonal primitiver(geometriske legemer). Inkludert i .
OpenGL(fra engelsk Åpne grafikkbiblioteket, bokstavelig talt - åpent grafikkbibliotek) er en spesifikasjon som definerer et programmeringsspråkuavhengig programmeringsgrensesnitt på tvers av plattformer for å skrive applikasjoner ved hjelp av todimensjonal og tredimensjonal datagrafikk. Inkluderer over 250 funksjoner for å tegne komplekse 3D-scener fra enkle primitiver. Brukes til å lage videospill, virtuell virkelighet og visualisering i vitenskapelig forskning. På plattformen Windows konkurrerer med .
OpenCL(fra engelsk Åpne dataspråk, bokstavelig talt – et åpent språk for beregninger) – rammeverk(programvaresystemrammeverk) for å skrive dataprogrammer relatert til parallell databehandling på forskjellig grafikk ( GPU) Og ( ). Til rammeverket OpenCL inkluderer et programmeringsspråk og appli( API). OpenCL gir parallellitet på instruksjonsnivå og på datanivå og er en implementering av teknikken GPGPU.
GPGPU(forkortet fra engelsk) Generelle bruks grafiske bearbeidingsenheter, bokstavelig - GPU generell bruk) er en teknikk for å bruke en grafikkbehandlingsenhet (GPU) eller skjermkort for generell databehandling som vanligvis utføres av en datamaskin.
Shader(Engelsk) skyggelegger) – et program for å konstruere skygger på syntetiserte bilder, brukt i tredimensjonal grafikk for å bestemme de endelige parameterne til et objekt eller bilde. Inkluderer vanligvis vilkårlig komplekse beskrivelser av lysabsorpsjon og spredning, teksturkartlegging, refleksjon og brytning, skyggelegging, overflateforskyvning og etterbehandlingseffekter. Komplekse overflater kan visualiseres ved hjelp av enkle geometriske former.
Gjengivelse(Engelsk) gjengivelse) – visualisering, i datagrafikk, prosessen med å få et bilde fra en modell ved hjelp av programvare.
SDK(forkortet fra engelsk) Programvareutviklingssett) – et sett med programvareutviklingsverktøy.
prosessor(forkortet fra engelsk) Sentralenhet, bokstavelig talt – sentral/hoved/hoveddatamaskinenhet) – sentral (mikro), en enhet som utfører maskininstruksjoner; en maskinvare som er ansvarlig for å utføre beregningsoperasjoner (spesifisert av operativsystemet og applikasjonsprogramvaren) og koordinere driften av alle enheter.
GPU(forkortet fra engelsk) Grafisk prosesseringsenhet, bokstavelig talt – grafisk dataenhet) – grafisk prosessor; en separat enhet eller spillkonsoll som utfører grafisk gjengivelse (visualisering). Moderne GPUer er svært effektive til å behandle og vise datagrafikk på en realistisk måte. Grafikkprosessoren i moderne videoadaptere brukes som en 3D-grafikkakselerator, men i noen tilfeller kan den også brukes til beregninger ( GPGPU).
Problemer prosessor
I lang tid skjedde økningen i ytelsen til tradisjonelle hovedsakelig på grunn av en konsekvent økning i klokkefrekvensen (omtrent 80% av ytelsen ble bestemt av klokkefrekvensen) med en samtidig økning i antall transistorer på en brikke . En ytterligere økning i klokkefrekvensen (ved en klokkefrekvens på mer enn 3,8 GHz blir brikkene ganske enkelt overopphetet!) støter på en rekke grunnleggende fysiske barrierer (siden den teknologiske prosessen nesten har nærmet seg størrelsen på et atom: , og størrelsen på et silisiumatom er omtrent 0,543 nm):
For det første, når krystallstørrelsen avtar og klokkefrekvensen øker, øker lekkasjestrømmen til transistorene. Dette fører til økt strømforbruk og økt varmeutslipp;
For det andre er fordelene med høyere klokkehastigheter delvis negert av minnetilgangsforsinkelse, ettersom minnetilgangstider ikke holder tritt med økende klokkehastigheter;
For det tredje, for noen applikasjoner blir tradisjonelle serielle arkitekturer ineffektive ettersom klokkehastighetene øker på grunn av den såkalte "von Neumann-flaskehalsen", en ytelsesbegrensning som følge av sekvensiell beregningsflyt. Samtidig øker de resistiv-kapasitive signaloverføringsforsinkelsene, som er en ekstra flaskehals forbundet med en økning i klokkefrekvensen.
Utvikling GPU
Parallelt med dette skjedde (og er!) utvikling GPU:
…
november 2008 – Intel introduserte en linje med 4-kjerne Intel Core i7, som er basert på en ny generasjon mikroarkitektur Nehalem. Prosessorene opererer med en klokkefrekvens på 2,6-3,2 GHz. Laget ved hjelp av en 45nm prosessteknologi.
Desember 2008 – leveranser av 4-kjerne startet AMD Phenom II 940(kodenavn - Deneb). Fungerer med en frekvens på 3 GHz, produsert ved hjelp av en 45-nm prosessteknologi.
…
mai 2009 – selskap AMD introduserte GPU-versjonen ATI Radeon HD 4890 med kjerneklokkehastigheten økt fra 850 MHz til 1 GHz. Dette er den første grafikk prosessor som kjører på 1 GHz. Datakraften til brikken, takket være økningen i frekvens, økte fra 1,36 til 1,6 teraflops. Prosessoren inneholder 800 (!) datakjerner og støtter videominne GDDR5, DirectX 10.1, ATI CrossFireX og alle andre teknologier som er iboende i moderne skjermkortmodeller. Brikken er produsert på grunnlag av 55 nm teknologi.
Hovedforskjeller GPU
Karakteristiske egenskaper GPU(sammenlignet med ) er:
- en arkitektur maksimalt rettet mot å øke hastigheten på beregningen av teksturer og komplekse grafiske objekter;
– typisk toppeffekt GPU mye høyere enn det ;
– takket være en spesialisert transportørarkitektur, GPU mye mer effektiv i å behandle grafisk informasjon enn .
"Krise av sjangeren"
"Sjangerkrise" for modnet i 2005 - det var da de dukket opp. Men, til tross for utviklingen av teknologi, økningen i produktiviteten til konvensjonelle redusert merkbart. Samtidig ytelse GPU fortsetter å vokse. Så i 2003 krystalliserte denne revolusjonerende ideen - bruk datakraften til grafikk for dine behov. GPUer har blitt stadig mer brukt til "ikke-grafisk" databehandling (fysikksimulering, signalbehandling, beregningsmatematikk/geometri, databaseoperasjoner, beregningsbiologi, beregningsøkonomi, datasyn, etc.).
Hovedproblemet var at det ikke fantes et standard programmeringsgrensesnitt GPU. Utviklerne brukte OpenGL eller Direct3D, men det var veldig praktisk. Selskap NVIDIA(en av de største produsentene av grafikk-, media- og kommunikasjonsprosessorer, samt trådløse medieprosessorer; grunnlagt i 1993) begynte å utvikle en enhetlig og praktisk standard – og introduserte teknologien CUDA.
Hvordan det startet
2006 – NVIDIA demonstrerer CUDA™; begynnelsen på en revolusjon innen databehandling GPU.
2007 – NVIDIA utgir arkitektur CUDA(original versjon CUDA SDK ble sendt inn 15. februar 2007); nominasjon "Beste nye produkt" fra magasinet Populærvitenskap og "Lesernes valg" fra publikasjonen HPCWire.
2008 – teknologi NVIDIA CUDA vant kategorien "Technical Excellence" fra PC Magasinet.
Hva har skjedd CUDA
CUDA(forkortet fra engelsk) Compute Unified Device Architecture, bokstavelig talt - enhetlig dataarkitektur for enheter) - arkitektur (et sett med programvare og maskinvare) som lar deg produsere på GPU generelle formål beregninger, mens GPU fungerer faktisk som en kraftig medprosessor.
Teknologi NVIDIA CUDA™ er det eneste utviklingsmiljøet i et programmeringsspråk C, som lar utviklere lage programvare som løser komplekse dataproblemer på kortere tid, takket være prosessorkraften til GPUer. Millioner av mennesker jobber allerede i verden GPU med støtten CUDA, og tusenvis av programmerere bruker allerede (gratis!) verktøy CUDAå akselerere applikasjoner og løse de mest komplekse, ressurskrevende oppgavene - fra video- og lydkoding til olje- og gassutforskning, produktmodellering, medisinsk bildebehandling og vitenskapelig forskning.
CUDA gir utvikleren muligheten til, etter eget skjønn, å organisere tilgang til settet med instruksjoner til grafikkakseleratoren og administrere minnet, og organisere komplekse parallelle beregninger på det. Støtte for grafikkakselerator CUDA blir en kraftig programmerbar åpen arkitektur, lik dagens . Alt dette gir utvikleren lavt nivå, distribuert og høyhastighets tilgang til maskinvare CUDA et nødvendig grunnlag for å bygge seriøse verktøy på høyt nivå, som kompilatorer, debuggere, matematiske biblioteker og programvareplattformer.
Uralsky, ledende teknologispesialist NVIDIA, sammenligne GPU Og , sier dette: " – Dette er en SUV. Han kjører alltid og overalt, men ikke særlig fort. EN GPU– Dette er en sportsbil. På en dårlig vei vil den rett og slett ikke gå noe sted, men gi den et godt underlag, og den vil vise all farten, som en SUV aldri har drømt om!
Teknologiske evner CUDA