Een aanvulling op deze IPC-rant. IPC bettekent Instructions Per Cycle. De "cycle" staat voor een periode tussen twee hoge/lage signalen van de klok, dus 1/frequentie. Elke keer dat het kloksignaal hoog of laag (afhankelijk van waarvoor je kiest) is dan doet elke component in de pipeline zijn werk en de klokfrequentie wordt dusdanig aangepast dat de traagste schakel het kan bijbenen, het loopt immers in de soep als een component niet zijn werk heeft gedaan maar de volgende component wel het resultaat van dat werk nodig heeft. Je hebt een lange pipeline waarbij er van alles gebeurt. Tegenwoordig zijn pipelines veel complexer dan wat ik hieronder laat zien (veel meer stages en een hele hoop dwarsverbindingen om allerlei vertragingen te voorkomen en te gokken (zoals branch prediction) waarbij meestal goed wordt gegokt en de snelheid verhoogt maar af en toe verkeerd wordt gegokt en de snelheid fors verlaagt. Dit is zo simpel als dat een pipeline kan zijn:Werelds schreef op dinsdag 29 augustus 2017 @ 15:25:
IPC in GPU's van tegenwoordig bestaat echter niet. IPC hangt van van welke "I" je er überhaupt in stopt. Een geometry shader zal nu vele malen sneller zijn dan 9 jaar geleden omdat daar nu fixed pipelines voor zijn. Voor simpele vertex shaders is dat niet of nauwelijks het geval; er zijn in sommige gevallen wel verbeteringen, maar zo veel als het wellicht lijkt is het niet.
"IPC" is ook niet het probleem van Vega. Het probleem van Vega lijkt vooralsnog hetzelfde probleem als Fiji te zijn: aansturing.
Overigens is dat onzin over PPC. Sommige dingen waren sneller op PPC toentertijd (gezien de 350 Mhz melding heb je het over de PPC 74xx zoals in de G4?), maar lang niet alles. De reden daarvoor was ook heel simpel: PPC is toentertijd vanaf de grond ontworpen, terwijl Intel backwards compatible wilde blijven met x86. Het grootste verschil was echter het feit dat AltiVec (SIMD in PPC) als instructieset beter was dan SSE dat toen was; maar vooral de implementatie was stukken beter. Precieze details moet ik je even schuldig blijven, uit m'n hoofd had het iets te maken met de registers (SSE blokkeerde overig FP werk in de CPU? Of was dat nu MMX..). Voeg daarbij dat dit om Intel's zwakkere periode gaat en je krijgt een behoorlijk vertekend beeld. Integer werk was de G4 echt niet sneller in. Het ding had ook veel kortere pipelines dan Intel en AMD, dus dan kun je kloksnelheden sowieso al niet vergelijken.
Wij misbruiken tegenwoordig de term IPC. Het wordt te pas en te onpas gebruikt als de één of andere algehele maat voor het vergelijken van processors. Dat is echter je reinste onzin, omdat IPC per soort instructie kan verschillen - dat geldt voor CPU's, maar voor GPU's nog eens dubbelop omdat dat waanzinnige brede, flexibele dingen zijn tegenwoordig. Vroeger zag je in reviews ook vaker verschillende IPC's genoemd staan, omdat alles toen eigenlijk veel simpeler was (geldt voor zowel CPU's als GPU's). Issue rates voor INT, FP, Vector enzovoort.
1. instructie ophalen
2. instructie decoderen
3. uitvoeren (ALU, het 'reken'deel van de CPU
4. memory access (data opvragen uit de RAM of versturen naar de RAM, of in het ergste geval spinning rust als de RAM vol zou zitten)
5. write back, data in het register van de CPU schrijven. Dat register - niet te verwarren met wat MS register noemt voor Windows - is een piepklein beetje geheugen wat heel erg dicht bij de ALU-kernen zit en wat bijvoorbeeld gebruikt kan worden om te springen naar een andere regel in de code (if/while/for loops) of als je rekent en allerlei tussenuitkomsten wil opslaan. Hetzelfde principe als cache maar dan op steroïden, heel erg veel kleiner en nog veel dichter bij de ALU om minder tijdvertraging te hebben voor het versturen van data tussen het register en andere componenten van de CPU. Het versturen van data naar/van de ALU veroorzaakt met afstand de meeste vertraging voor CPU's en GPU's. Voor elke instructie wordt er data uit het register gehaald
.

Je ziet hier meerdere regels onder elkaar omdat het zodoende efficiënter werkt en er minder lang gewacht hoeft te worden op resultaten van eerdere bewerkingen.
Moderne CPU's hebben een veel langere pipeline. Hoe meer je in zo'n pipeline stopt hoe meer je per cyclus kan doen. Bij dezelfde pipeline zal een hogere klokfrequentie resulteren in meer werk per tijdseenheid maar evenzogoed zal bij dezelfde klokfrequentie de ene pipeline meer werk uitvoeren dan de andere per tijdseenheid. Het is niet moeilijk om je voor te stellen dat als je op een doordachte manier meer componenten in zo'n pipeline stopt dat de CPU dan ten koste van een hoger vermogen meer werk verricht.
Vandaar dat het van de ratten besnuffeld is dat reviewers er geen oog voor hebben dat Ryzen een lager vermogen heeft dan Skylake en Kaby Lake bij een klokfrequentie t/m 3,8-3,9 GHz, de architecten hadden Ryzen meer werk kunnen laten verrichten met dezelfde klokfrequentie ten koste van extra vermogen, AMD zette echter in op het fors verlagen van het vermogen en ging hierbij misschien wel net iets te ver, afhankelijk van hoe je er tegenaan kijkt. Voor gamers met een desktop zou een iets hoger vermogen met een hogere FPS bij spellen een goede tradeoff zijn maar voor de servers en de laptops heb je meer aan het lagere vermogen.
De klokfrequentie is dan ook een povere maatstaf om te bepalen hoeveel werk een CPU verricht. Dit is ongeveer de gedachte achter het invoeren van de term IPC.
AMD en Intel gebruiken nu deze term ook verkeerd (ik veronderstel dat ze het intern wel juist doen, dat hoop ik althans