I økende grad brukes GPU-er til ikke-grafiske oppgaver som risikoberegninger, flytdynamikkberegninger og seismisk analyse. Hva skal hindre oss i å ta i bruk GPU-drevne enheter?
Dagens spørsmål og svar-økt kommer til oss med tillatelse fra SuperUser - en underavdeling av Stack Exchange, en grupperingsgruppering av spørsmål og svar-nettsteder.
Spørsmålet
SuperUser-leser Ell holder tritt med tekniske nyheter og er nysgjerrig på hvorfor vi ikke bruker flere GPU-baserte systemer:
Det ser ut til at det i dag gjøres mange beregninger på GPU-en. Tydeligvis gjøres grafikk der, men ved bruk av CUDA og lignende, AI, hashing-algoritmer (tenk Bitcoins) og andre gjøres også på GPU. Hvorfor kan vi ikke bare kvitte oss med CPUen og bruke GPUen alene? Hva gjør GPU så mye raskere enn CPU?
Hvorfor egentlig? Hva gjør CPUen unik?
Svaret
SuperUser-bidragsyter DragonLord tilbyr en godt støttet oversikt over forskjellene mellom GPUer og CPUer:
TL; DR svar: GPUer har langt flere prosessorkjerner enn CPUer, men fordi hver GPU-kjerne kjører betydelig tregere enn en CPU-kjerne og ikke har funksjonene som trengs for moderne operativsystemer, er de ikke passende for å utføre mesteparten av behandlingen i hverdags databehandling. De egner seg best til beregningskrevende operasjoner som videoprosessering og fysikksimuleringer.
Det detaljerte svaret: GPGPU er fortsatt et relativt nytt konsept. GPUer ble opprinnelig bare brukt til å gjengi grafikk; etter hvert som teknologien avanserte, ble det store antallet kjerner i GPUer i forhold til CPUer utnyttet ved å utvikle beregningsmuligheter for GPUer slik at de kan behandle mange parallelle datastrømmer samtidig, uansett hva disse dataene kan være. Selv om GPU-er kan ha hundrevis eller til og med tusenvis av strømprosessorer, kjører de hver sin tregere enn en CPU-kjerne og har færre funksjoner (selv om de er Turing fullført og kan programmeres til å kjøre hvilket som helst program en CPU kan kjøre). Funksjoner som mangler fra GPUer inkluderer avbrudd og virtuelt minne, som kreves for å implementere et moderne operativsystem.
Med andre ord, CPUer og GPUer har betydelig forskjellige arkitekturer som gjør dem bedre egnet til forskjellige oppgaver. En GPU kan håndtere store mengder data i mange strømmer, og utføre relativt enkle operasjoner på dem, men er lite egnet til tung eller kompleks behandling på en eller få datastrømmer. En CPU er mye raskere per kjerne (når det gjelder instruksjoner per sekund) og kan utføre komplekse operasjoner på en enkelt eller få datastrømmer lettere, men kan ikke effektivt håndtere mange strømmer samtidig.
Som et resultat er ikke GPU-er egnet til å håndtere oppgaver som ikke har stor nytte av eller som ikke kan parallelliseres, inkludert mange vanlige forbrukerapplikasjoner som tekstbehandlere. Videre bruker GPUer en fundamentalt annen arkitektur; man må programmere et program spesielt for en GPU for at det skal fungere, og det kreves betydelig forskjellige teknikker for å programmere GPUer. Disse forskjellige teknikkene inkluderer nye programmeringsspråk, modifikasjoner av eksisterende språk og nye programmeringsparadigmer som er bedre egnet til å uttrykke en beregning som en parallell operasjon som skal utføres av mange strømprosessorer. For mer informasjon om teknikkene som trengs for å programmere GPUer, se Wikipedia-artiklene på strømbehandling og parallell databehandling .
Moderne GPU-er er i stand til å utføre vektoroperasjoner og flytende-aritmetikk, med de nyeste kortene som er i stand til å manipulere tall med dobbel presisjon. Rammeverk som CUDA og OpenCL gjør det mulig å skrive programmer for GPUer, og karakteren til GPUer gjør dem best egnet til svært parallelliserbare operasjoner, for eksempel i vitenskapelig databehandling, hvor en serie spesialiserte GPU-beregningskort kan være en levedyktig erstatning for en liten beregne klyngen som i NVIDIA Tesla Personal Supercomputers . Forbrukere med moderne GPU-er som har erfaring med Folding @ home kan bruke dem til å bidra med GPU-klienter , som kan utføre simuleringer av proteinfolding i svært høye hastigheter og bidra med mer arbeid til prosjektet (husk å lese Vanlige spørsmål først, spesielt de som er relatert til GPUer). GPUer kan også muliggjøre bedre fysikksimulering i videospill ved bruk av PhysX, akselerere videokoding og dekoding, og utføre andre beregningskrevende oppgaver. Det er denne typen oppgaver GPUer er best egnet til å utføre.
AMD er banebrytende for et prosessordesign kalt Akselerert prosesseringsenhet (APU) som kombinerer konvensjonelle x86 CPU-kjerner med GPUer. Dette kan gjøre at CPU- og GPU-komponentene kan fungere sammen og forbedre ytelsen på systemer med begrenset plass til separate komponenter. Når teknologien fortsetter å utvikle seg, vil vi se en økende grad av konvergens av disse en gang separate delene. Imidlertid er mange oppgaver utført av PC-operativsystemer og applikasjoner fortsatt bedre egnet for CPUer, og mye arbeid er nødvendig for å akselerere et program ved hjelp av en GPU. Siden så mye eksisterende programvare bruker x86-arkitekturen, og fordi GPU-er krever forskjellige programmeringsteknikker og mangler flere viktige funksjoner som trengs for operativsystemer, er en generell overgang fra CPU til GPU for daglig databehandling ekstremt vanskelig.
Har du noe å legge til forklaringen? Hør av i kommentarene. Vil du lese flere svar fra andre teknologikyndige Stack Exchange-brukere? Sjekk ut hele diskusjonstråden her .