2011-07-10 13:31:41 +0000 2011-07-10 13:31:41 +0000
380
380

Waarom gebruiken we nog steeds CPU's in plaats van GPU's?

Het lijkt me dat er tegenwoordig veel berekeningen worden gedaan op de GPU. Uiteraard worden daar graphics gedaan, maar met behulp van CUDA en dergelijke, AI, hashing algoritmes (denk aan bitcoins) en andere worden ook op de GPU gedaan. Waarom kunnen we niet gewoon de CPU wegdoen en de GPU zelf gebruiken? Wat maakt de GPU zo veel sneller dan de CPU?

Antwoorden (15)

394
394
394
2011-07-10 14:00:49 +0000

TL;DR antwoord: GPU’s hebben veel meer processorkernen dan CPU’s, maar omdat elke GPU-kern beduidend langzamer loopt dan een CPU-kern en niet over de functies beschikt die nodig zijn voor moderne besturingssystemen, zijn ze niet geschikt voor het uitvoeren van het grootste deel van de verwerking in de dagelijkse computerwereld. Ze zijn het meest geschikt voor rekenintensieve bewerkingen zoals videoverwerking en natuurkundige simulaties.

  • * GPGPU is nog een relatief nieuw concept. GPU’s werden aanvankelijk alleen gebruikt voor het renderen van graphics; als geavanceerde technologie werd het grote aantal kernen in GPU’s ten opzichte van CPU’s benut door rekenmogelijkheden voor GPU’s te ontwikkelen, zodat zij vele parallelle gegevensstromen tegelijkertijd kunnen verwerken, ongeacht wat die gegevens ook mogen zijn. Hoewel GPU’s honderden of zelfs duizenden stroomprocessoren kunnen hebben, draaien ze elk langzamer dan een CPU-kern en hebben ze minder functies (zelfs als ze Turing compleet zijn en geprogrammeerd kunnen worden om elk programma te draaien dat een CPU kan draaien). Functies die ontbreken in GPU’s zijn onder andere interrupts en virtueel geheugen, die nodig zijn om een modern besturingssysteem te implementeren.

Met andere woorden, CPU’s en GPU’s hebben significant verschillende architecturen die ze beter geschikt maken voor verschillende taken. Een GPU kan grote hoeveelheden data in veel stromen verwerken en voert daar relatief eenvoudige bewerkingen op uit, maar is niet geschikt voor zware of complexe bewerkingen op een enkele of enkele datastromen. Een CPU is veel sneller op een per-core basis (in termen van instructies per seconde) en kan complexe bewerkingen op een enkele of enkele gegevensstromen gemakkelijker uitvoeren, maar kan niet efficiënt veel stromen tegelijk verwerken.

Als gevolg daarvan zijn GPU’s niet geschikt voor taken die niet significant profiteren van of niet kunnen worden geparallelliseerd, waaronder veel gangbare consumentenapplicaties zoals tekstverwerkers. Bovendien gebruiken GPU’s een fundamenteel andere architectuur; men zou een applicatie specifiek voor een GPU moeten programmeren om te kunnen werken, en er zijn significant verschillende technieken nodig om GPU’s te programmeren. Deze verschillende technieken omvatten nieuwe programmeertalen, aanpassingen aan bestaande talen en nieuwe programmeerparadigma’s die beter geschikt zijn om een berekening uit te drukken als een parallelle operatie die door veel stroomprocessoren moet worden uitgevoerd. Voor meer informatie over de technieken die nodig zijn om GPU’s te programmeren, zie de Wikipedia-artikelen over stream processing en parallel computing .

Moderne GPU’s zijn in staat om vectorbewerkingen en floating-point rekenkunde uit te voeren, met de nieuwste kaarten die in staat zijn om floating-pointgetallen met dubbele precisie te manipuleren. Frameworks zoals CUDA en OpenCL maken het mogelijk om programma’s te schrijven voor GPU’s, en de aard van GPU’s maken ze het meest geschikt voor zeer parallelliseerbare bewerkingen, zoals in scientific computing, waar een serie gespecialiseerde GPU-computers een levensvatbare vervanger kan zijn voor een klein rekencluster zoals in NVIDIA Tesla Personal Supercomputers . Consumenten met moderne GPU’s die ervaring hebben met Folding@home kunnen deze gebruiken om bij te dragen aan GPU-cliënten , die proteïnevouwende simulaties kunnen uitvoeren op zeer hoge snelheden en meer werk kunnen bijdragen aan het project (lees eerst de FAQ’s , met name die met betrekking tot GPU’s). GPU’s kunnen ook een betere fysicasimulatie in videogames mogelijk maken met behulp van PhysX, het versnellen van de videocodering en decodering, en het uitvoeren van andere rekenintensieve taken. Het zijn dit soort taken waarvoor GPU’s het meest geschikt zijn.

AMD is pionier op het gebied van een processorontwerp dat de Accelerated Processing Unit (APU) wordt genoemd en waarin conventionele x86 CPU-kernen met GPU’s worden gecombineerd. Deze aanpak maakt grafische prestaties mogelijk die veruit superieur zijn aan moederbordgeïntegreerde grafische oplossingen (hoewel ze niet kunnen tippen aan duurdere discrete GPU’s), en maakt een compact, goedkoop systeem met goede multimediaprestaties mogelijk zonder dat er een aparte GPU nodig is. De nieuwste Intel-processoren bieden ook geïntegreerde graphics op de chip, hoewel de concurrerende geïntegreerde GPU-prestaties momenteel beperkt zijn tot de weinige chips met Intel Iris Pro Graphics. Naarmate de technologie verder vordert, zullen we een toenemende mate van convergentie van deze ooit gescheiden onderdelen zien. AMD ziet een toekomst waarin de CPU en GPU één zijn, die naadloos kunnen samenwerken aan dezelfde taak .

Toch zijn veel taken die door pc-besturingssystemen en -toepassingen worden uitgevoerd nog steeds beter geschikt voor CPU’s, en er is veel werk nodig om een programma dat gebruik maakt van een GPU te versnellen. Omdat zoveel bestaande software gebruik maakt van de x86-architectuur, en omdat GPU’s verschillende programmeertechnieken vereisen en een aantal belangrijke functies missen die nodig zijn voor besturingssystemen, is een algemene overgang van CPU naar GPU voor dagelijks computergebruik erg moeilijk.

257
257
257
2011-07-10 20:22:09 +0000

Wat maakt de GPU zo veel sneller dan de CPU?

De GPU is niet sneller dan de CPU. CPU en GPU zijn ontworpen met twee verschillende doelen, met verschillende afwegingen, dus ze hebben verschillende prestatiekenmerken. Bepaalde taken zijn sneller in een CPU, terwijl andere taken sneller worden berekend in een GPU. De CPU blinkt uit in het uitvoeren van complexe manipulaties op een kleine set van gegevens, de GPU blinkt uit in het uitvoeren van eenvoudige manipulaties op een grote set van gegevens.

De GPU is een speciale CPU, ontworpen zodat één enkele instructie werkt over een groot blok van gegevens (SIMD/Single Instruction Multiple Data), waarbij ze allemaal dezelfde bewerking uitvoeren. Werken in blokken data is zeker efficiënter dan werken met een enkele cel tegelijk omdat er veel minder overhead is bij het decoderen van de instructies, maar werken in grote blokken betekent dat er meer parallelle werkeenheden zijn, zodat er veel meer transistors worden gebruikt om een enkele GPU instructie te implementeren (waardoor fysieke groottebeperking ontstaat, meer energie wordt verbruikt en meer warmte wordt geproduceerd).

De CPU is ontworpen om zo snel mogelijk een enkele instructie uit te voeren op een enkel nulpunt. Aangezien het slechts met één enkel nulpunt hoeft te werken, is het aantal transistors dat nodig is om een enkele instructie uit te voeren veel minder, zodat een CPU zich een grotere instructieset kan veroorloven, een complexere ALU, een betere vertakkingsvoorspelling, een betere gevirtualiseerde architectuur en een geavanceerdere caching/pijplijnschema’s. De instructiecycli zijn ook sneller.

De reden waarom we nog steeds CPU gebruiken is niet omdat x86 de koning van de CPU-architectuur is en Windows is geschreven voor x86, de reden waarom we nog steeds CPU gebruiken is omdat het soort taken dat een OS moet doen, d.w.z. beslissingen nemen, efficiënter wordt uitgevoerd op een CPU-architectuur. Een OS moet naar 100 verschillende soorten data kijken en verschillende beslissingen nemen die allemaal van elkaar afhangen; dit soort taken loopt niet gemakkelijk parallel, althans niet in een SIMD architectuur.

In de toekomst zullen we een convergentie zien tussen de CPU en GPU architectuur omdat CPU de mogelijkheid krijgt om over blokken data te werken, bijv. SSE. Ook kan de GPU het zich veroorloven om complexere instructies te implementeren naarmate de productietechnologie verbetert en de chips kleiner worden.

77
77
77
2011-07-10 21:17:30 +0000

Mancano le GPU:

  1. 1. Memoria virtuale (!!!!)
  2. 2. Mezzi di indirizzamento di dispositivi diversi dalla memoria (ad es. tastiere, stampanti, memoria secondaria, ecc.)
  3. Mezzi di indirizzamento di dispositivi diversi dalla memoria (ad es. tastiere, stampanti, memoria secondaria, ecc.)
  4. Mezzi di indirizzamento di dispositivi diversi dalla memoria (ad es. tastiere, stampanti, memoria secondaria, ecc.)
  5. Mezzi di indirizzamento di dispositivi diversi dalla memoria (ad es. 3. Interruzioni

Ne avete bisogno per poter implementare qualsiasi cosa come un sistema operativo moderno.

Sono anche (relativamente) lenti a doppia precisione aritmetica (se confrontate con le loro prestazioni aritmetiche a singola precisione)*, e sono molto più grandi (in termini di dimensioni del silicio). Le architetture GPU più vecchie non supportano le chiamate indirette (attraverso i puntatori di funzione) necessarie per la maggior parte della programmazione generale, e le architetture più recenti che lo fanno lentamente. Infine, (come hanno notato altre risposte), per i compiti che non possono essere messi in parallelo, le GPU perdono rispetto alle CPU a parità di carico di lavoro.

EDIT : Si prega di notare che questa risposta è stata scritta nel 2011 – La tecnologia delle GPU è un settore in costante evoluzione. Le cose potrebbero essere molto diverse a seconda di quando si legge questo :P

* Alcune GPU non sono lente a doppia precisione aritmetica, come le linee Quadro o Tesla di NVidia (generazione Fermi o più recente), o la linea FirePro di AMD (generazione GCN o più recente). Ma queste non sono presenti nella maggior parte delle macchine dei consumatori.

39
39
39
2011-07-11 15:39:21 +0000

Een CPU is als een arbeider die supersnel gaat. Een GPU is als een groep van kloonwerkers die snel gaan, maar die allemaal precies hetzelfde moeten doen in unisono (met de uitzondering dat je sommige klonen inactief kunt laten zitten als je wilt)

Welke zou je liever hebben als je collega-ontwikkelaar, één supersnelle kerel, of 100 snelle klonen die eigenlijk niet zo snel zijn, maar allemaal dezelfde acties tegelijk moeten uitvoeren?

Voor sommige acties zijn de klonen vrij goed, bv. de vloer vegen - ze kunnen elk een deel ervan vegen.

Voor sommige acties stinken de klonen, bv. het wekelijkse rapport schrijven - alle klonen op één na zitten inactief terwijl één kloon het rapport schrijft (anders krijg je gewoon 100 kopieën van hetzelfde rapport).

24
24
24
2011-07-10 17:51:46 +0000

Want GPU’s zijn ontworpen om veel kleine dingen tegelijk te doen, en CPU’s zijn ontworpen om één ding tegelijk te doen. Als je proces massaal parallel kan worden gemaakt, zoals hashing, dan is de GPU ordes van grootte sneller, anders niet.

Je CPU kan een hash veel, veel sneller berekenen dan je GPU kan - maar de tijd die je CPU nodig heeft om het te doen, kan je GPU een stuk door enkele honderden hashes heen zijn. GPU’s zijn ontworpen om veel dingen tegelijk te doen, en CPU’s zijn ontworpen om één ding tegelijk te doen, maar heel snel.

Het probleem is dat CPU’s en GPU’s heel verschillende oplossingen zijn voor heel verschillende problemen, er is een kleine overlapping maar over het algemeen blijft wat in hun domein zit in hun domein. We kunnen de CPU niet vervangen door een GPU omdat de CPU daar veel beter zijn werk doet dan een GPU ooit zou kunnen, simpelweg omdat een GPU niet ontworpen is om het werk te doen, en een CPU wel.

Een kleine kanttekening, echter, als het mogelijk zou zijn om de CPU te schrappen en alleen een GPU te hebben, denk je dan niet dat we het een andere naam zouden geven? :)

15
15
15
2011-07-10 17:57:36 +0000

Vraagt u zich echt af *waarom gebruiken we geen GPU-achtige architecturen in CPU? *

GPU is slechts een gespecialiseerde CPU van een grafische kaart. We lenen GPU niet voor grafische berekeningen omdat CPU voor algemene doeleinden gewoon niet geschikt is voor parallelle en floating point uitvoering.

We gebruiken eigenlijk andere (meer GPU-achtige) CPU-architecturen. Zo zijn bijvoorbeeld Niagara -processoren behoorlijk multitasking. SPARC T3 draaien 512 parallelle draden.

12
12
12
2011-07-10 15:55:56 +0000

Ik kan me hier misschien vreselijk vergissen, en spreek van weinig of geen gezag over het onderwerp, maar hier gaat het om:

  • Ik geloof dat elke GPU-uitvoeringsunit (“core”) een zeer beperkte adresruimte heeft in vergelijking met een CPU.

  • GPU-uitvoeringsunits kunnen niet efficiënt omgaan met vertakkingen.

  • GPU uitvoeringseenheden ondersteunen geen hardware interrupts op dezelfde manier als CPU’s.

Ik heb altijd gedacht dat de manier waarop GPU uitvoeringseenheden bedoeld waren zoiets is als de Playstation 3 “SPE’s”, ze willen een blok data krijgen, er een aantal opeenvolgende bewerkingen op uitvoeren, en dan een ander blok data uitspugen, spoelen, herhalen. Ze hebben niet zo veel adresseerbaar geheugen als de belangrijkste “CPE”, maar het idee is om elke “SPE” te wijden aan een specifieke, sequentiële taak. De uitvoer van de ene eenheid kan de invoer van een andere eenheid voeden.

De uitvoeringseenheden werken niet goed als ze proberen de gegevens te “analyseren” en een heleboel beslissingen te nemen op basis van wat die gegevens zijn.

Deze “blokken data” kunnen deel uitmaken van een stream, zoals een lijst van hoekpunten uit de statustabel van een spel, MPEG data van een schijf, etc.

Als iets niet past in dit “streaming” model dan heb je een taak die niet efficiënt kan worden verlamd en de GPU is daar niet noodzakelijkerwijs de beste oplossing voor. Een goed voorbeeld is het verwerken van op “externe gebeurtenissen” gebaseerde zaken als toetsenbord, joystick of netwerkinvoer. Er zijn niet veel dingen die niet in dat model passen, maar er zullen er altijd wel een paar zijn.

7
7
7
2011-07-12 04:36:14 +0000

Dit is niets over de kloksnelheid of het doel. Ze zijn allebei even goed in staat om de meeste, zo niet alle taken uit te voeren; sommige zijn echter iets beter geschikt voor sommige taken dan andere.

Er is een zeer oude ruzie geweest over de vraag of het beter is om veel domme kernen te hebben of een kleine groep van zeer slimme kernen. Dit gaat gemakkelijk terug tot in de jaren 80.

Binnen een CPU zijn veel berekeningen mogelijk. De slimmere kernen zijn in staat om veel verschillende berekeningen tegelijkertijd uit te voeren (een beetje zoals multi-core maar niet, het is ingewikkeld; zie Instructie-niveau parallellisme ). Een slimme kern kan meerdere berekeningen tegelijk uitvoeren (optellen, aftrekken, vermenigvuldigen, delen, geheugenwerking) maar slechts één tegelijk; hierdoor zijn ze fysiek groter (en dus veel duurder) dan dommere kernen.

Een domme kern is veel kleiner en kan dus meer aan één enkele chip worden toegevoegd, maar kan niet zoveel gelijktijdige berekeningen uitvoeren. Er is een goede balans tussen veel domme kernen en een paar slimme kernen.

Multi-core architecturen werken goed met graphics omdat de berekeningen gemakkelijk kunnen worden opgesplitst over honderden kernen, maar het is ook afhankelijk van de kwaliteit van de code en of andere code afhankelijk is van het resultaat van één berekening.

Dit is een veel ingewikkelder vraag dan het lijkt. Lees voor meer informatie dit artikel over CPU-ontwerp:

Moderne microprocessoren - Een 90-minuten handleiding

http://www.lighterra.com/papers/modernmicroprocessors/

6
6
6
2011-07-15 11:44:05 +0000

Ik wil graag een syntactisch punt aansnijden: De termen CPU en GPU zijn functionele namen, geen architectonische namen.

Als een computer een GPU als hoofdprocessor zou gebruiken, zou het een “centrale verwerkingseenheid” (CPU) worden, ongeacht de architectuur en het ontwerp.

5
5
5
2011-07-10 14:57:18 +0000

Het is belangrijk om in gedachten te houden dat er geen magische scheidslijn in de architectuurruimte is die de ene processor tot de “centrale” en de andere tot de “grafische” processor maakt. (Wel, sommige GPU’s zijn misschien te kreupel om volledig algemeen te zijn, maar dat zijn niet de GPU’s waar we het hier over hebben.)

Het onderscheid is er een van hoe ze op het bord worden geïnstalleerd en welke taken er aan hen worden gegeven. Natuurlijk gebruiken we een general-purpose processor (of set van general-purpose processors) voor de belangrijkste data mover, en een speciale, geparalleliseerde, diepe pipe-lined unit voor dingen (zoals graphics) om er het beste gebruik van te kunnen maken.

De meeste van de spiffy trucs die zijn gebruikt om GPU’s hun ding zeer snel te laten doen, zijn eerst ontwikkeld door mensen die proberen om snellere en betere CPU’s te maken. Het blijkt dat Word en Excel en Netscape en vele andere dingen waar mensen hun computer voor gebruiken niet alleen niet ten volle profiteren van de mogelijkheden die grafische gespecialiseerde chips bieden, maar zelfs slower op die architecturen draaien omdat tak veel oorzaak (erg duur en traag) pipe-line clears.

3
3
3
2015-06-07 11:53:13 +0000

De reden dat we nog steeds CPU’s gebruiken is dat zowel CPU’s als GPU’s hun unieke voordelen hebben. Zie mijn volgende paper, aanvaard in ACM Computing Surveys 2015, die een sluitende en uitgebreide discussie biedt over de overgang van ‘CPU vs GPU debat’ naar ‘CPU-GPU collaborative computing’. Een overzicht van CPU-GPU Heterogeneous Computing Techniques

3
3
3
2011-07-17 16:44:16 +0000

Om een eenvoudige reden: de meeste toepassingen zijn niet multi-threaded/vectorized.

Grafische kaarten zijn sterk afhankelijk van multi threading, althans in het concept.

Vergelijk een auto met een enkele motor, een auto met een kleinere motor per wiel. Met de laatste auto moet je alle motoren bedienen, iets wat niet is meegenomen in de systeemprogrammering.

Met AMD-fusie zal het echter veranderen hoe we gebruik moeten maken van de verwerkingskracht: ofwel gevectoriseerd, ofwel snel voor één draad.

3
3
3
2011-07-10 21:35:07 +0000

Het hele punt van het bestaan van een GPU was om de CPU te ontlasten van dure grafische berekeningen die het op dat moment deed. Door ze weer te combineren tot een enkele processor zou het weer teruggaan naar waar het allemaal begon.

2
2
2
2016-07-01 11:46:23 +0000

gpus zijn goede stream-processors. je kunt de stream-verwerking zien als het opeenvolgend vermenigvuldigen van een lange reeks getallen. cpus heeft ook mogelijkheden voor stream-verwerking (het heet SIMD-extensies) maar je kunt niet alle programmeerlogica als stream-verwerking implementeren, en compilers hebben de optie om btyecodes te maken die waar mogelijk gebruik maken van simd-instructies.

is niet alles een reeks getallen. foto’s en video’s zijn, misschien ook wel geluid (er zijn hier en daar open encoders). gpus kan dus foto’s, video’s en dergelijke verwerken, coderen en decoderen. een nadeel is dat je niet alles kan ontladen aan gpus in games omdat het stotteren zou veroorzaken, gpus zijn bezig met graphics en worden verondersteld het knelpunt in het systeem te zijn bij het spelen van games. de optimale oplossing zou zijn om alle componenten in een pc volledig te gebruiken. dus, bijvoorbeeld, nvidia’s physx engine, doet standaard berekeningen op de cpu wanneer de gpu volledig wordt gebruikt.

2
2
2
2015-11-16 15:42:30 +0000

Als om eenvoudig te zeggen GPU kan worden vergeleken met de aanhangwagen in de auto. Zoals meestal kofferbak is genoeg voor de meerderheid van de mensen, behalve voor gevallen als ze iets echt groots kopen. Dan kunnen ze een aanhangwagen nodig hebben. Hetzelfde met GPU, want meestal is het genoeg om een gewone CPU te hebben die de meerderheid van de taken zal volbrengen. Maar als je wat intensieve berekeningen nodig hebt in vele threads, dan kan je GPU nodig hebben