Verwijderd schreef op woensdag 23 september 2015 @ 17:49:
Maar niet in games actief voor dx 12 wat Nvidia wil gaan doen voor geforce kaarten zodat er als nog performance winst te behalen is zoals AMD dat ook doet via hardware alleen gaat dat bij nvidia dan over de cuda cores. Dus dat werk ook niet alleen maar softwarematig?
Nee, dat gaat niet "over de CUDA cores". Ik zal de afbeelding van de oc.net post er bij nemen en uit leggen.
Alles in dit diagram zit in software op de CPU -
behalve die SMX'en onderaan, dat is het enige stukje GPU hier. In elke SMX/SMM (cluster van Shader Processors...of "CUDA Core" in Nvidia marketing termen) zit een Asynchronous Warp Scheduler. Die laatste is degene die weet welke SP bezet is in "zijn" cluster en welke niet. Het werk is dan echter al verdeeld. En elk van die AWS'en heeft geen flauw benul hoe druk de andere clusters zijn. Het gevolg is dat die Grid Management Unit regelmatig moet wachten tot hij antwoord van de GPU krijgt, anders weet hij niet of er al resources vrij zijn; en waar. Dat brengt latency met zich mee en zorgt er voor dat je alsnog korte resource barriers hebt.
Bekijk nu de volgende diagrammen eens (deze doe ik als platte links, zijn iets te groot

):
http://images.anandtech.c...0_Block_Diagram_FINAL.png
http://images.anandtech.com/doci/9390/FijiBlockDiagram.png
Bij AMD zitten de queues in de GPU, maar vóór de cluster groepen (ACE bovenin). De ACE's kunnen ook elke CU aansturen en weten welke CUs bezig zijn. Zij kunnen dus heel nauwkeurig het werk verdelen, ongeacht hoe en waar het binnen komt. Nog veel belangrijker, ze weten ook van tevoren waar er binnenkort ruimte is (dat is dat preemption verhaal). Dat is wat Nvidia mist. Zij moeten aan de software kant al een hoop werk verdelen. Dat verdelen brengt wachttijd met zich mee, omdat ze niets naar de GPU kunnen sturen voordat ze weten of daar ruimte voor is.
Poging tot een analogie (bear with me

): grote parkeerplaats met duizenden auto's (instructies) die weg moeten door een van de uitgangen (groepen shader clusters), die elk op hun beurt weer een hoop uitvalswegen (shader clusters) hebben.
Bij AMD gaat iedereen fijn in een van de 64 rijen (queues) staan en zijn er per 8 rijen 1 verkeersagent (ACE). Die verkeersagenten zien op een live kaart precies welke uitvalswegen en uitgangen het drukst zijn en dirigeren op basis daar van. Klaar.
Bij Nvidia staat er midden op de parkeerplaats een enkele verkeersagent (GMU). Die heeft een walkietalkie waarmee hij met de gasten bij de uitgangen communiceert. Pas als hij van hen hoort dat er ruimte is, laat hij auto's door. Vervolgens komen die bij de uitgangen, maar wordt er dan pas gekeken welke uitvalswegen het rustigste zijn en waar ze precies terecht komen. Die agent in het midden probeert wel zo slim mogelijk auto's te verdelen, maar hij is toch afhankelijk van die andere gasten.
Je moet overigens wellicht eens Anandtech's oudere artikelen lezen. Ik ben wellicht een mierenneuker, maar termen als "CUDA Core" zijn grote onzin. Het klinkt mooi, maar als puntje bij paaltje komt is dat gewoon een Shader Processor en kan Nvidia daar niet meer mee dan AMD met die van hen kan. Als je een beetje door de oudere artikelen heen gaat zie je hoe de GPU's zich ontwikkelen en zul je ook iets abstracter gaan denken. Ik denk dat je dan ook beter begrijpt waar de "grenzen" zitten.