Best, ik wil het ook vanuit die kant benaderen en alle aansturing en datapaden daarbij volledig negeren. Dan wordt het plaatje echter nog minder rooskleurig voor hetgeen Nvidia in theorie zou hebben en wat ze in de praktijk hebben.sunsmountain schreef op vrijdag 15 juli 2022 @ 19:29:
Jij bekijkt de units (als developer) vanuit de aansturing - ongeacht wat de capaciteiten zijn van wat je aanstuurt, ik bekijk de units (als natuurkundige) vanuit de uitvoer - ongeacht hoe de aansturing is.
Een GA102-225 (3080 Ti) heeft dan 10240 FP32 ALU's en 5120 INT32 ALU's voor een totaal van 15360 ALU's. Je moet de mixed datapaden dan ook niet mee in beschouwing nemen, want dat is al een stuk aansturing. AMD heeft er slechts 5120, die dan wel zowel FP32 als INT32 (alsmede enig ander data type) kunnen verwerken. Als je alles negeert en puur naar de ALU's kijkt, zou Nvidia zonder moeite minstens twee keer zo rap moeten zijn, met hun kleinere super-simpele ALU's.
Zoals ik hierboven echter al heel cru aan geef, kun je de aansturing simpelweg niet negeren. Het doet er weldegelijk toe dat de helft van Nvidia's FP32 ALU's slechts een deel van de tijd beschikbaar zijn. Het doet er ook weldegelijk toe dat 2 CU's een L0 delen, dat 10 DCU's een L1 cache delen, dat SM's niets delen. Dat zijn allemaal dingen die invloed hebben op de performance. Als ALU aantallen het enige relevante was dan zou Cypress 4 keer zo snel als GF100 geweest moeten zijn, Fiji 30% sneller dan GM200 en zelfs sneller dan GP102 (op gelijke kloksnelheden). Of simpelweg GA102 tegenover TU102, waarom komen die cijfertjes niet uit?Vanuit de "top" schedulers bekeken hebben we het in ieder geval over dezelfde units. Wat mij oneerlijk zou lijken en waar ik bang voor was, is als je 40 DCU met 40 SM's zou gaan vergelijken, maar dat doe je gelukkig niet.
Uit geen van beide perspectieven (aansturing, uitvoer) kan je performance direct afleiden. Het is van de specifieke workload afhankelijk. En als je de exacte workload weet, kan je zowel van uit aansturing als uitvoer perspectief, de performance berekenen voor het geheel.
Net als Techspot (Nick Evanson) doe ik uitspraken over de uitvoer capaciteiten per CU , per SM. Dat betekent niet dat capaciteit = performance. Maar net zo goed betekent het niet dat aansturing = performance. Op z'n best kunnen we performance schatten. Maar exact berekenen kunnen we geen van beide.
...
Verdeling en aansturing doet er toe, maar uitvoer capaciteit (in dit geval opslag capaciteit) doen er ook toe. We benadrukken verschillende zaken van dezelfde architecturen, ik meer de totale uitvoer capaciteiten per CU / SM, jij meer de aansturing van een dual CU en een SM.
En juist aan de hand van AMD's GPU's kun je heel eenvoudig zien dat de aansturing cruciaal is, want hun ALU's doen al veel langer mixed data types. Zelfs in RV770 (!) konden de ALU's binnen een SP al meerdere data types aan. Ik zal het echter een stukje recenter houden en enkel naar GCN5 en RDNA1 kijken. Vega 20 en Navi 10 in hun Radeon VII en 5700 XT vormen draaien op relatief vergelijkbare kloksnelheden. V20 heeft echter 3840 ALU's, waar N10 er slechts 2560 heeft. Als je puur naar de ALU's in CU's kijkt, hebben ze allebei 64 ALU's per CU; allebei ALU's die meerdere data typen doen. In retail vorm doet V20 van 10,8 tot 13,8 TF. N10 komt niet verder dan 9,7 TF. Echt álle cijfers van V20 zijn beter dan die van N10: aantal ALU's, aantal CU's, TMU's, geheugengrootte/-bandbreedte, allebei op N7 gebakken. En toch houdt die V20 eenvoudig bij, met minder stroomverbruik. V20 is marginaal sneller (1-2%) totdat geheugen bandbreedte een probleem wordt (want HBM2 vs 256b-GDDR6), dus op 2160p zie je pas ~10% verschil, wat volgens de cijfertjes het minimále verschil zou moeten zijn. Op game clocks zou het verschil 40+% moeten zijn.
Ik benadruk niet het één of het ander, ik stel simpelweg dat je het één niet zonder het ander kúnt beoordelen.
Nee, je kijkt enkel naar de blokjes en niet naar de lijntjes. Die afbeeldingen laten niet alle details zien, maar wel genoegRicht je feedback tot Techspot, ik heb alleen naar de plaatjes gekeken:
[Afbeelding]
[Afbeelding]
Het kan best dat dat in de whitepapers niet helemaal precies dezelfde L1 cache is. We benadrukken wederom verschillende zaken.
Als je beide afbeeldingen even 90 graden met de klok mee draait en dan van boven naar beneden kijkt:
RDNA 2 heeft één set registers per CU, waarbij er data kan "vloeien" tussen CU's (lichtblauwe blok) via de LDS. Die LDS is gedeeld binnen de hele DCU en de DCU in z'n geheel heeft ook 16 KB L0$ voor constants, en 32 KB L0$I. De DCU's als geheel hangen vervolgens aan de L1$ binnen die SE (waarvan er overigens 4 zijn, geen 8; die 8 slaat op het aantal L1$). Die hangen op hun beurt pas weer aan de L2$.
Voor GA102 heeft elke partitie (lichtblauwe blok) een eigen set registers én een eigen L0$I (16 KB). Elke partitie hangt vervolgens rechtstreeks aan de L1$ bínnen die SM. Elke SM hangt vervolgens rechtstreeks aan de L2$.
Zelfs aan de hand van deze diagrammen is al duidelijk dat de L1$ op een geheel andere plek zit. Waar zij jammer genoeg niet op in gaan is wat de LDS doet en hoe de caches werken. De vector L0$ in elke CU hangt rechtstreeks aan de L1$. De LDS zit daar niet tussen. Sterker nog, elke SIMD kan per clock (halve cycle) los van elkaar 128 bytes uit de L0$ én 128 bytes uit de LDS lezen. De doel van de LDS is synchroniseren binnen een DCU; het zorgt er voor dat ze de output van de ene op meteen als input voor een andere op kunnen gebruiken aan de "andere" kant en geen clocks/cycles kwijt zijn aan het verplaatsen van/naar L1$. Het is dus niet zo dat het "niet precies dezelfde cache" is, de LDS is geen cache. De LDS kan niet van/naar de L1$ lezen/schrijven, dat kan enkel vanuit L0$.
Ja dat doet er toe, maar dan moet je ook veel dieper gaan kijken naar hoeveel data er per cycle alle kanten op gestuurd kan worden. Om het niet té lang te maken (sorryExcuus, eerste Google resultaten gingen allemaal over compute, Assembly en ARM, niet games FPS...
https://www.google.com/search?q=ld+and+st+instructions
maar doet dit detail er toe voor de vergelijking tussen Ampere en RDNA2? Zo ja, wat zijn dan de capaciteiten / aanstuur mogelijkheden van elk?
En daarom moet ik mezelf ook even corrigeren, want AMD heeft die niet per SIMD zoals ik eerder zei, die zitten per CU (wat ook veel logischer is ivm de texture units
Nogmaals, capaciteit doet er niet toe als je het niet kan benutten. Zie V20 vs N10 - of beter nog, Cypress vs. Fermi. Met 1600 ALU's tegenover de GTX 480's 480 zou Cypress volledig gehakt moeten maken van dat ding. Die 1600 waren echter verdeeld in 320 groepen van 5 stuks (VLIW5), waarbij gemiddeld slechts 3/5 van de ALU's in een groep gebruikt werd. Vervolgens zaten ze ook nog met 16 stuks gegroepeerd, waar ook geen 100% bezetting te realiseren was. Maar heel af en toe kwam het er wel uit met heel specifieke toepassingen die er voor gebouwd waren, zoals SmallLux, waar een 5870 meer dan 40% sneller dan een 480 was.Zolang je die 40 DCU met 80 SM vergelijkt vind ik het best, maar hoe die warp of wave32 afgehandeld wordt, is na aansturing vervolgens van belang. En daarvoor kijk ik naar uitvoer capaciteit.
Ik zei 4x16FP32 (64 totaal) en 1xINT32, niet 4xFP32 en 1xINT32Dat zou niet logisch zijn, als wat je zegt, waar zou zijn. 64 -4 FP32 en 64 -1 INT32 is nog steeds 63 FP32 en 60 INT32 bij Ampere. Bij RDNA2 moeten die 5 operaties door een SIMD32 heen, waarbij 27 stream processors niets doen. De overgebleven FP32 capaciteit van de 2 SIMD32 is dan 59, terwijl de overgebleven capaciteit bij de SM 60 is.
Jij beschouwt het mixed datapad als 16 units, ik beschouw het als wat het is: 16xFP32 + 16xINT32. Ook al kun je slechts één van de twee sets ALU's aansturen, ze zijn er wel. En wederom door de aansturing moeten ze alle 4 partities schakelen tussen FP32 en INT32. Een SM heeft feitelijk gezien al 192 ALU's.
Dat deed ik heel bewust omdat dat "ideale" geval enkel ideaal is volgens jouw aanpak van de aansturing en beperkingen volledig negeren. Als je puur naar de aantallen kijkt zou dat ideaal zijn voor Nvidia. Maar dat is het dus niet, omdat de aantallen slechts een deel van het verhaal vertellen.Wel apart dat je het "ideale" geval van Nvidia vervolgens het minst ideaal maakt, door na elke cycle te moeten schakelen in je workload om dat "ideale" geval te bereiken.
Hoe kom je bij dat laatste? Ik ga er even van uit dat die 64 in 4 groepen van 16 verdeeld is (anders werkt het niet voor Nvidia), wat betekent dat AMD dat er gewoon in dezelfde tijd als Nvidia doorheen kan jagen. Als het in 2x32 verdeeld kan worden doet AMD het zelfs in één cycle.Als je Ampere een ideale workload geeft, dan is dat alleen 128+0 of alleen 64+64 FP32. Als je die laatste 64+64 workload vergelijkt met RDNA2, is RDNA2 gewoon 2x zo langzaam.
Daar komt dus echter het data verhaal bij kijken. Twee SM's kunnen niet aan hetzelfde werken zonder daarbij de L2$ in te schakelen. Weg zijn je cyclesIn 1 keer door dual CU ja, niet een enkele CU. Ampere zal inderdaad proberen de INT warp naar een andere SM te gooien. In de uitvoer gaat Ampere dus 2 SM's inzetten tegen 1 dual CU. En daarom dat ik liever dat pespectief kies.
Ik deel dat vermoeden geheel niet. Het is onwaarschijnlijk dat Lovelace zo'n gigantisch verschil met Hopper (en dus Ampère + Volta) zou hebben. En Hopper is vooral meer van hetzelfde. Er zit wel wat clustering in (beetje zoals AMD's "clauses"), maar dat is vooral een CUDA (software) concept. Er zit wel wát hardware ondersteuning in (ze houden een cluster binnen een GPC wanneer mogelijk, SM's kunnen elkaars L1$ benaderen), maar dat gaat gepaard met latency. Voor HPC niet zo'n heel groot probleem, maar voor graphics wel.Goed om te horen dat het kàn en ik vermoed dat de Nvidia ingenieurs in de richting denken wat je hier beschrijft.
Uh, zet Maxwell en Ampère eens naast elkaar? Wijzigingen:Tot nu toe hebben de afgelopen Nvidia generaties telkens een wijziging in de SM structuur laten zien.
- Geometry (polymorph engine) is een niveau "omhoog" gegaan en zit nu buiten de SM(M) (zo veel geometry met huidige SM aantallen is er niet nodig)
- Een tensor core per partitie
- Minder texture units (en dus minder LD/ST) per SM
- Elke scheduler heeft nu slechts 1 dispatch unit (dus geen instruction-level parallelism meer; wat voor graphics maar zelden voorkwam)
- FP en INT zijn gescheiden datapaden
- L0$I is van SM naar partitie gegaan (Pascal en eerder hadden L0$I op SM niveau, met een buffer per partitie)
- L1$ vervult nu ook de functie van shared memory (komt vooral neer op 1 SRAM blok dat gepartitioneerd kan worden; voor graphics weinig relevant omdat de verdeling hetzelfde is als voorheen, maar voor compute kan er nu veel meer mee)
Dat is het zo'n beetje, zo ingrijpend is het niet. Nvidia zit met Ampère in feite op GCN4 (Polaris) qua evolutie vanaf Maxwell. Ze zijn absoluut niet hetzelfde, maar net als bij Polaris en Tahiti kun je Ampère en Maxwell naast elkaar leggen en lijken ze heel erg op elkaar. Je moet helemaal terug naar Kepler om een fundamenteel andere SM te zien.
Dat laatste moet je echt uit je hoofd zetten; hoewel het waarschijnlijk is, is dat niet eens zeker. Voordat ik dat uit leg, zal het aantal transistors hoogstwaarschijnlijk ook niet de helft van AMD's aantal zijn. Al was dat wel zo, hebben ze momenteel ook drie keer zo veel ALU's nodig om te doen wat ze doen; en vergeet niet dat elke ALU aan de registers moet hangen en dat daar dus óók ruimte verloren gaat.Ik denk meer ruimte bij Nvidia, omdat de node jump hoger is, en omdat ze per ALU minder transistors nodig hadden.
Hoe groot die ALU's zijn kunnen wij nooit en te nimmer iets over zeggen. Er zijn vele algoritmes voor de verschillende wiskundige operaties die zo'n ALU uit moet kunnen voeren. Elk van die algoritmes heeft een geheel andere set logica nodig. Je zou sowieso de hele ISA's van beide architecturen moeten vergelijken om te zien of ze überhaupt allebei dezelfde ops ondersteunen en op welke manier ze dat doen (GCN had bijvoorbeeld geen FMA; simpel gezegd doen ze a + (b * c) nu sneller dan in GCN). Misschien zijn de ALU's van één van beide wel niet meer dan simpele adders van beginners niveau. Dat is uiteraard niet zo, maar hopelijk begrijp je waarom ik het aantal transistors per ALU niet echt wil benoemen. Het enige dat ik wel durf te stellen is dat AMD's ALU's complexer zijn
Weet ik, maar dat is het dus niet in de zin dat TSMC ook daadwerkelijk een "4nm-class" in ontwikkeling heeftIk zei 4nm
Het gaat bij Nvidia om 4N, een aangepast N5 procedé, niet het N4 dat nog in ontwikkeling is. Dat laatste is pas eind vorig jaar in risk production gegaan en zal dus pas op z'n vroegst eind dit jaar daadwerkelijk in gebruik genomen worden. Veel te laat voor Hopper en Lovelace.
Het is muggenzifterij, maar het doet er wel toe. Er wordt door zekere sites gedaan alsof Hopper/Lovelace N5 overslaat, maar dat is onzin. 4N is gewoon N5, net zoals 12FFN gewoon 12FF was. N4 is iets anders, vergelijkbaar met 12FF tegenover 16FF maar is voorlopig dus nog niet klaar. Het 4N waar Nvidia straks op zit is gewoon hetzelfde als het N5 waar AMD op komt te zitten, enkel met wat tweaks voor Nvidia - die niet bijster indrukwekkend zullen zijn. AMD haalde op Samsung's "inferieure" 14LPP een hogere dichtheid dan Nvidia op hun speciale 12FFN
@DaniëlWW2 ik heb de GCN whitepaper er even bij gepakt:
Is blijkbaar dus altijd al zo geweest!The GCN command processor is responsible for receiving high-level level API commands from the driver and mapping them onto the different processing pipelines. There are two main pipelines in GCN. The Asynchronous Compute Engines (ACE) are responsible for managing compute shaders, while a graphics command processor handles graphics shaders and fixed function hardware. Each ACE can handle a parallel stream of commands, and the graphics command processor can have a separate command stream for each shader type, creating an abundance of work to take advantage of GCN's multi-tasking
Dan ga ik nu maar eens kijken wat er over Intel te zien was