Eventjes wat toelichting omdat dit wellicht niet voor iedereen duidelijk is. Ik weet dat ik jou niets nieuws vertel.
Het grootste struikelblok voor CPU's is het wachten op data, het datatransport gaat heel erg traag in vergelijking met hoe snel de logische blokken van de CPU (ALU en zo) het kunnen verwerken.
Voor die cache moet je de tradeoff maken tussen grootte en snelheid. Gewoon simpelweg het verzenden van een electrisch signaal kost relatief veel tijd, we zetten die tijd immers af tegen een CPU die miljarden klokcycli per seconde heeft, zelfs de verplaatsing van electronen in een stukje koper is erg traag in vergelijking daarmee. Hoe dichter de cache bij de ALU etc. staat hoe sneller de data is aangevoerd. Ga je daar verder vandaan zitten dan duurt het langer maar je kan wel meer data opslaan, het voordeel daarvan is dat het vaker gebeurt dat de ALU's etc. direct de data krijgen die ze nodig hebben omdat die data 'toevallig' al in de cache zit. Daarom heb je meerdere lagen en een complexe organisatie van die cache. Als de kans groot is dat een CPU-kern die data nodig heeft dan staat het in L1, is de kans kleiner dan in L2, is de kans nog kleiner dan in L3. En daarnaast een stuk cache voor alle kernen samen en een kleiner stukje cache voor enkel 1 kern (L1 sowieso).
Voor een deel kan je de performance-verschillen tussen Ryzen en Intel begrijpen door simpelweg de grootte van de cache te vergelijken.
Niet het enige relevante verschil, je moet bijvoorbeeld ook kijken naar de gebruikte node en de structuur van de cache (victim of niet, associativiteit etc.).
Het punt hier is vooral dat het klooien met cache zoveel oplevert omdat het wachten op data zoveel tijd kost in vergelijking met hoe snel de CPU-kernen die data kunnen verwerken. Een mogelijke manier om veel performance te winnen wanneer die nodes niet meer kleiner worden is wanneer die data optisch zou worden verzonden van RAM etc. naar de CPU-cache/kernen en omgekeerd.
Een probleem voor sociale wetenschappen, het ontbreekt aan simpele bouwblokken. Teveel wat niet of niet goed kwantificeerbaar is, onzeker is...Bij exacte wetenschap werk je ook slechts met modellen maar Newton's mechanica werkt prima zolang je niet met de snelheid van het licht werkt en electronen als deeltjes zien is erg bruikbaar hoewel het niet correct is.
Zo'n GPU mag dan erg lomp/simpel zijn maar daardoor heeft het weinig latency en een zeer hoge output. Analoog aan het oude Risc vs. Cisc dilemma: je kan hele complexe instructies geven aan een CPU maar dat maakt het de uitvoering er niet sneller op, je kan beter complexe instructies in software doen en die opdelen in een groter aantal simpelere instructies en dat door de CPU laten afhanelen. Er is een ondergrens aan hoe simpel je het kan maken. Of dat een CPU momenteel te complex is weet ik niet (ik weet wel dat veel computerwetenschappers geen hoge dunk hebben van X86) maar in ieder geval is het voor een GPU goed dat dat wel lekker simpel kan blijven, het wordt er zeker niet minder efficiënt door.
Eerst maar eens even beginnen met dit: cache wordt gebruikt om in een vroeg stadium data op te slaan dichtbij de CPU waarvan wordt vermoed (branche prediction en zo) dat de CPU-kernen die iets later nodig gaan hebben om te voorkomen dat je moet wachten totdat de data eindelijk eens wordt aangevoerd alvorens je verder kan. Analogie: een stratenmaker die niet verder kan werken doordat de bakstenen op zijn en die moet wachtent totdat er een nieuwe voorraad stenen wordt geleverd.Werelds schreef op donderdag 18 oktober 2018 @ 15:44:
- zoals gezegd, met caches klooien
Het grootste struikelblok voor CPU's is het wachten op data, het datatransport gaat heel erg traag in vergelijking met hoe snel de logische blokken van de CPU (ALU en zo) het kunnen verwerken.
Voor die cache moet je de tradeoff maken tussen grootte en snelheid. Gewoon simpelweg het verzenden van een electrisch signaal kost relatief veel tijd, we zetten die tijd immers af tegen een CPU die miljarden klokcycli per seconde heeft, zelfs de verplaatsing van electronen in een stukje koper is erg traag in vergelijking daarmee. Hoe dichter de cache bij de ALU etc. staat hoe sneller de data is aangevoerd. Ga je daar verder vandaan zitten dan duurt het langer maar je kan wel meer data opslaan, het voordeel daarvan is dat het vaker gebeurt dat de ALU's etc. direct de data krijgen die ze nodig hebben omdat die data 'toevallig' al in de cache zit. Daarom heb je meerdere lagen en een complexe organisatie van die cache. Als de kans groot is dat een CPU-kern die data nodig heeft dan staat het in L1, is de kans kleiner dan in L2, is de kans nog kleiner dan in L3. En daarnaast een stuk cache voor alle kernen samen en een kleiner stukje cache voor enkel 1 kern (L1 sowieso).
Voor een deel kan je de performance-verschillen tussen Ryzen en Intel begrijpen door simpelweg de grootte van de cache te vergelijken.
Niet het enige relevante verschil, je moet bijvoorbeeld ook kijken naar de gebruikte node en de structuur van de cache (victim of niet, associativiteit etc.).
Het punt hier is vooral dat het klooien met cache zoveel oplevert omdat het wachten op data zoveel tijd kost in vergelijking met hoe snel de CPU-kernen die data kunnen verwerken. Een mogelijke manier om veel performance te winnen wanneer die nodes niet meer kleiner worden is wanneer die data optisch zou worden verzonden van RAM etc. naar de CPU-cache/kernen en omgekeerd.
Het nadeel van die extra hardware is natuurlijk dat het vermogen toeneemt en dat het meer diespace kost (hogere aanschafprijs, meer yield-problemen).- je "pipeline" breder maken (horizontaal schalen).
"lomp" is hier een synoniem voor simpel? Ik vind dat altijd een beetje bedriegelijk, juist met simpele blokken kan je meer complexe dingen doen doordat het meer hanteerbaar is. DNA is een mooi voorbeeld: je hebt slechts 4 basenparen, met die 4 basenparen kan je bij een mens slechts voor 20 aminozuren coderen (uit mijn hoofd) maar met die 20 aminozuren kan je een gruwelijk groot aantal peptiden en eiwitten maken. Het brein en de logica in een CPU/GPU zijn ook een mooi voorbeeld. In essentie combineer je een hoop elementen die twee toestanden hebben: hoge spanning/lage spanning die bepalen of dat er wel of niet electronen van punt a naar punt b gaan. Bij het brein wordt vaak een combinatie van veel van die signalen gebruikt om een binair signaal om te zetten in een discreet signaal met veel meer standen tussen het minimum en het maximum maar in de kern is het allemaal binair. Dat stelt in staat om hele complexe structuren te krijgen. Idem voor een CPU/GPU. Juist simpele bouwblokken leiden tot complexe structuren en juist complexe bouwblokken zijn weinig bruikbaar.CPU's zijn gewoon veel complexere beesten dan GPU's en moeten tegenwoordig zo veel verschillende dingen kunnen doen dat je echt moet kijken naar specifieke workloads om iets kunnen zeggen van vooruitgang op bepaalde gebieden. GPU's doen dan wel de spannendere dingen, als je een GPU bekijkt is het eigenlijk maar een heel erg lompe chip.
Een probleem voor sociale wetenschappen, het ontbreekt aan simpele bouwblokken. Teveel wat niet of niet goed kwantificeerbaar is, onzeker is...Bij exacte wetenschap werk je ook slechts met modellen maar Newton's mechanica werkt prima zolang je niet met de snelheid van het licht werkt en electronen als deeltjes zien is erg bruikbaar hoewel het niet correct is.
Zo'n GPU mag dan erg lomp/simpel zijn maar daardoor heeft het weinig latency en een zeer hoge output. Analoog aan het oude Risc vs. Cisc dilemma: je kan hele complexe instructies geven aan een CPU maar dat maakt het de uitvoering er niet sneller op, je kan beter complexe instructies in software doen en die opdelen in een groter aantal simpelere instructies en dat door de CPU laten afhanelen. Er is een ondergrens aan hoe simpel je het kan maken. Of dat een CPU momenteel te complex is weet ik niet (ik weet wel dat veel computerwetenschappers geen hoge dunk hebben van X86) maar in ieder geval is het voor een GPU goed dat dat wel lekker simpel kan blijven, het wordt er zeker niet minder efficiënt door.
[ Voor 6% gewijzigd door Verwijderd op 18-10-2018 17:38 ]