Skrivet av Yoshman:
Notera att det är en skillnad på "enkeltrådprestanda" och "prestanda för applikationer som bara kör på en enda tråd". Det är hela tiden den förra jag pekat på är kritiskt.
Men finns faktiskt en hel del saker i den senare gruppen som är prestandakritiskt än idag
saker där flaskhalsen är I/O, ju mindre tid man lägger i CPU-delen för att mata in nästa jobb, ju närmare 100 % av sin kapacitet kommer I/O utföras. Tiden som spenderas på CPU-delen här skalar med enkeltrådprestanda, men det har inte helt sällan noll eller svagt negativ skalning med fler kärnor (går att undvika genom att låta bli att slänga fler kärnor på problemet, så bara det faktum att man har många kärnor är i sig inte dåligt)
webben. Allt fler applikationer körs i webbläsare. Vad som är möjligt att göra i en webbläsare har ökat enormt de senaste åren och det märks i hur pass komplicerade webbbaserade applikationer som nu finns. Dessa applikationer skrivs i JavaScript som i skrivande stund är helt enkeltrådat (finns hack/trick för att sprida ut JS program över flera CPU-kärnor, men används inte jättemycket)
Respons i interaktiva applikationer. Detta är var Core M och dagens mobila CPUer är helt designade kring, d.v.s. arbetslast där användaren ger någon form av input och förväntar sig "omedelbar" respons. Tidsspannet här är på millisekundskala (upp till som värst låga 100-tals millisekunder), kan låta irrelevant men är tvärt om kritiskt för att man inte ska uppleva "lagg" i sin användarupplevelse. Bästa exemplet här är: Iphone med sina två väldigt starka kärnor totalt demolerar konkurrenterna som har både fyra och åtta kärnor, det senare vinner benchmarks det förra ger en överlägsen användarupplevelse
Personligen har jag väldigt många fall i just det sista segmentet. Sökningar på lokala datorn, inkrementell kompilering och test vid programutveckling, halvstora beräkningar (för små för att man ska orka lägga krut på att göra det parallellt, för stora för att de ska hända omedelbart).
Men är som sagt inte det jag främst pekar på. Vad jag säger är att den bästa CPU-design för skrivbordet är normalt den som har högsta prestanda per CPU-kärna, om det sedan är två, fyra, sex eller åtta kärnor är sekundärt. OBS, sekundärt, inte irrelevant. Så allt annat lika är det självklart bättre med åtta kärnor än fyra, men fram till nu har fler än fyra kärnor medfört en allt för stor minskning av enkeltrådprestanda.
I praktiken har därför de högst klockade fyrkärninga modellerna gett bäst upplevelse för den stora massan. Man kan nog ta en viss försämring av enkeltrådprestanda för att få fler kärnor, men hamnar minskning över 15-25 % för att gå från fyra kärnor till åtta så kommer man i praktiken få ett långsammare system.
Angående "prestanda i heltalstunga program som inte är vektoriserade och där bara en tråd per CPU-kärna används" så var det i kontext av CPUer med relativt många kärnor, idag sex till tio stycken. För i praktiken alla dagens spel gäller detta, det finns en viss skalning över fyra CPU-trådar i vissa spel men undantaget Civ och AoS lär det knappast finnas en vinst bortom sex CPU-trådar (som inte är en slump, sex CPU-trådar är vad spelmotorer är optimerade för då det är så många kärnor som dagens konsolspel använder).
Då spel och andra applikationer som inte trivialt parallelliserbara kräver kommunikation mellan CPU-kärnor så är SMT väldigt effektivt. För spel ligger i5-7600K i de flesta fall närmare i3-7350K (båda har fyra CPU-trådar) än i7-7700K, för saker som skalar perfekt med kärnor ligger i5-7600K klart närmare i7-7700K.
Tittar man på saker som skalar perfekt med CPU-kärnor finns ju lite olika klasser
stora dataparallella problem, ett exempel är Blender. Här är ju "problemet" att GPUer är specialdesignade för detta, så varför köra detta på en CPU?
medelstora dataparallella problem, typexempel är det som ofta körs Matlab, Matematica och till viss del i Excel. Här blir kommunikationslatensen en för stor flaskhals för att köra på GPU (potentiellt möjligt för vissa av dessa att i framtiden köras på iGPU dock), detta är domänen där SSE/AVX/FMA skiner och på denna punkt är Haswell och framåt dubbelt så stark som Zen per kärna och cykel
den största och nog viktigaste gruppen är uppgiftsparallella problem, finns inte jättemycket exempel på skrivbordet men det kryllar av dessa på servers. Här är icke-vektoriserad heltalsprestanda kung och det är absolut en fördel med många CPU-kärnor, i de flesta fall även om fler kärnor medför lägre prestanda per kärna
I grunden gäller alltid att en CPU-tråd med kapacitet 2C kommer alltid att att utföra uppgifter lika snabbt eller snabbare än två CPU-trådar med kapacitet 1C. I praktiken ligger servervärlden närmare "lika snabbt" medan desktopvärlden tenderar att kraft väga över mot "eller snabbare".
Enkeltrådprestanda är viktigt men att balansera mot rätt I/O-nivå kräver massor av eftertanke, före. Jag har sett felskriven mjukvara som har kostat konsulter mycket extra arbete. Inte ens fyra illa samkörda konsulter skalar särskilt bra jämfört med en duktig... Finns det en relevant skillnad mellan Ryzen och Intels produkter? Det beror på hur väl programvaran är skriven. Konsensus? Ja, jag tror det.
Ja, "den bästa CPU-design för skrivbordet är normalt den som har högsta prestanda per CPU-kärna, om det sedan är två, fyra, sex eller åtta kärnor är sekundärt. OBS, sekundärt, inte irrelevant." Helt korrekt, men här kommer ju effektstorleken in. Vad vinner man? 0,2 sekunder, två minuter eller två timmar. Så, Pentium G4560 har ju sin plats här. Det blir kanske R3 som får problemet i det här segmentet, där de med långa, målade naglar nog står för de med rättmätigt ointresse för de högst klockade fyrkärninga modellerna. Det duger med en Ferrari och man skall frakta 15 kg till Oslo. Man behöver inte en Scania. Betyder det här något för Ryzen? Ja, prestandagapet mot Intel verkar minska enligt alla rykten. Konsensus? Ja, jag tror det.
Det är sant att "Allt fler applikationer körs i webbläsare" vilket gör att en Chromebook räcker för "majoriteten". Det är väl väldigt lite kraft jämfört med de vi snackar om i den här tråden, men de "räcker oftast". "Applikationer som bara kör på en enda tråd" hamnar ju här. Blir det här ett problem för Ryzen? Nej. Konsensus? Nej.
Responstid är ju sällan eller aldrig kritiskt på de CPUer vi diskuterar. Undviker man Java (med sin illaluktande garbage-collector så klarar man sig, nästan alltid). Finns det en relevant skillnad mellan Ryzen och Intels produkter här? Inte en chans. Konsensus? Nej.
Jag kan också ta en viss försämring av enkeltrådprestanda för att få fler kärnor, men visst finns det en smärtgräns. Den är inte objektiv utan är väldigt beroende på tillämpning. Men, sedan mer än ett decennium finns det väldigt få tillämpningar där försämringen spelar en kritisk roll. Det jag kommer på är spel. Annars brukar effektstorleken vara försumbar.Konsensus? Ja, bland.
Stora dataparallella problem är spännande och Blender är ju bara ett av många program där både CPU och GPU är relevant. Det var ju så det började på mitten av nittiotalet, att GPUn kom för att avlasta CPUer. Innan dess kördes rubbet på CPUn. OpenCL, CUDA och allt det där växer ju med all rätt. Men, multitasking kan ju hamna här också och då blir det inte självklart att GPUn är ens relevant.Konsensus? Nej, kanske inte alltid.
Mellanstora problem i Mathematica, Octave och till viss del Excel börjar ofta som små saker, men kan växa snabbt bortom förväntade ansatser. Excel är väl mest känsligt för enkeltrådprestanda samt responstid; det här är ju lika mycket mjukvaruutvecklarens ansvar som CPUn. Excel fungerar emellertid utmärkt för de flesta på en laptop för några tusenlappar så jag kan inte se en kritisk fördel för någon här. Konsensus? Nej, kanske inte alltid.
Uppgiftsparallella problem lär gå bra för alla med många kärnor, ju fler desto bättre. Men, här blir det väl Naples som får bekänna färg mot Xeon om några månader. Konsensus? Ja.
Moderna spel är nog det mest komplexa vi har idag. Där krävs snabb responstid, samordning med fysiken(!) och grafiken på GPUn, AI, I/O, nätverk, mm. Här räcker det inte längre med hög frekvens och ipc, vilket blivit all mer tydligt. Många andra program är ju mest upprepningar av rutinfunktioner i loopar, och därmed sedan länge parallelliserbara. Konsolspel kommer kanske att annamma än fler trådar än sex stycken om Microsoft väljer en Ryzen för sin Xbox Scorpio, vilket antytts.
Grafikkorten verkar ju ha snott åt sig AI, deep learning och machine learning och kanske spelen kommer att följa efter även där och implementera dem.
Jag tror att majoriteten av program vi använder har tillräcklig kraft sedan ett decennium och att det är mest "specialprogram" som vinner på ökad prestanda. Konsensus? Ja, jag tror det.