Mainstream
Från Wikipedia
"Yttringen är integrerad i den allmänna kulturen genom att den både riktar sig till och konsumeras av en relativ majoritet av befolkningen."
~70 % av alla PC som säljs är bärbara, fram till juni i år bestod topp tre av laptops på prisjakt fortfarande av 2C/4T modeller, det trots att 4C/8T U-serien lanserades i augusti förra året följd av Ryzen mobile i början av 2018. Än idag är två av tre på topp tre 2C modeller, men de flesta på topp tio är numera 4C/8T.
Mainstream har alltså börjat gå från 2C till 4C. Kikar man på de <=10 % av PC-marknaden som utgörs av "build-your-own", d.v.s. den grupp som majoriteten som läser SweC tillhör, då ser vi en övergång från 4C till 6C. Men det är knappast mainstream sett till hela PC-marknaden.
Bakåtsträvande
Största orsaken till att även de som bygger sina egna gaming PC stannade väldigt läge på 4C var därför att >4C betydde länge att man fick offra enkeltrådprestanda, något som i praktiken resulterade i att majoriteten av alla program och i princip alla spel kördes långsammare på HEDT (E-serien på den tiden) jämfört med de betydligt billigare konsumentmodellerna.
Oavsett om det är är AMDs förtjänst eller inte så finns det en väldigt tydligt teknisk detalj som gjort det möjligt att öka antalet CPU-kärnor på ett "vettigt" sätt på konsumentmodeller som AMD Ryzen och Intels S-serie: man offrar inte enkeltrådprestanda för att öka antalet kärnor.
Faktum är att R7-2700X och i7-8700K är både de konsumentmodeller med flest kärnor och de har även högst enkeltrådprestanda.
Vad man däremot "offrar" är strömsnålhet. TDP betyder egentligen bara "om kylningen klarar av att kyla TDP W så fungerar kretsen korrekt". Varken AMD eller Intel har ändrat på den betydelsen, men tidigare kunde man i praktiken säga att ingen CPU drog >TDP om man gjorde saker som tog väldigt lång tid. Det har båda företagen släpp rätt rejält på nu, båda företagen har CPUer som drar långt över TDP i "worst case" om man har en kylare som klarar det.
Är rätt mycket en "feature" på stationära, man slipper ju överklocka! Men tycker personligen att denna utveckling inte är speciellt önskvärd för bärbara. Kikar man på prestandaresultaten hos Notebookcheck för 2C/4T 15 W TDP laptops ser man att de multitrådade resultaten skiljer sig ~10% från de sämst till de bäst presterande modellerna utrustande med samma CPU-modell. För 4C/8T laptops har detta ökat till väl över 40 % skillnad och vi hade precis en artikel här kring hur bra det fungerar med 6C/12T i 15" MBP...
Här är "kärnornas krig" lika korkat som det tidigare var på mobiler. Finns självklart de som har nytta av 4C på en tunn bärbar, det ger trots allt en klar prestandaboost om man t.ex. transcodar film på språng. Men det är ändå något en väldigt liten andel av användarna gör, nackdelen med 4C/8T är att man även där insett att det inte går att offra enkeltrådprestanda vilket medfört att dessa CPUer drar långt över TDP när alla kärnor används.
Detta leder till att vissa modeller throttlar rätt hårt. Men även de som har vindtunnel nog att kyla effekten kommer får extremt olika prestanda vid inkopplat läge (då enda flaskhals är kylning) och batteridrift (batterier mår inte bra av att komponenter drar väldigt mycket ström så här begränsas ofta frekvensen stenhårt). Tror detta är orsaken till att vi sett en sådan långsam övergång till 4C/8T på laptops, tillverkarna inser att detta är ett steg bakåt i läget där man kör på batteridrift och kör de 9 av 10 applikationer som inte ser någon relevant skalning förbi 2C/4T. Detta gäller förstås inte "släpbara" modeller, men det är inte precis storsäljarna nu för tiden.
Forskning
Men nog är det ändå så att det enda som hindrar att applikationer inte kan utnyttja massor med CPU-kärnor är "lata utvecklare"?
Under de första 10 åren efter att multicore CPUer blev var mans egendom så var ansatsen att det bara handlade om att hitta nya sätt att utveckla programvara, när man gjort det skulle det utan problem gå att effektivt utnyttja CPUer med väldigt många kärnor. Fanns rätt tidigt CPUer med väldigt många kärnor, upp till 64 st kärnor med TDP <100 W fanns för tio år sedan (och för "rätt" uppgift demolerade dessa alla då existerande PC CPUer).
Men med tiden både insåg man och man lyckades även formellt bevisa att en rätt stor andel problem kan överhuvudtaget inte skalas effektivt över CPU-kärnor. Vad man också noterade var att "parallellism" är väldigt mångfacetterat, många CPU-kärnor är bara ett av en rad olika sätt att utnyttja potentiell parallellism.
Amdahls lag brukar nämnas ibland. Undrar om de som ändå känner till den lagen inser att trots att lagen anses vara "pessimistisk" så är den ändå en övre gräns för vad som är teoretisk möjligt i form av skalning med CPU-kärnor. D.v.s. det är omöjligt att skala ett problem bättre än vad lagen säger, är något annat än CPU flaskhals i något läge blir den faktiska skalningen lägre än vad lagen säger.
De tre mest relevanta formerna av parallellism för x86 CPUer är
SMT, detta är egentligen en metod som ökar ILP (instruction level parallellism), eller "IPC", för en specifik CPU-kärna. Finns även ILP att utnyttja på varje CPU-tråd, men den har programmeraren i praktiken nära nog noll möjlighet att påverka (ligger helt på problemets natur och på kompilatorn).
Multicore. Detta känner de flesta till. I praktiken fungerar detta bara väl i fall där man har minst lika många oberoende uppgifter som man har CPU-kärnor. D.v.s. det optimala är inte en parallell uppgift, utan det optimala är många uppgifter som sinsemellan gör helt olika saker (vilket är typiskt för en server men rätt ovanligt på skrivbordet)
SIMD. Detta har funnits i ~20 år, ändå har det innan C++17 inte funnits något standardiserat att skriva program för detta! Att inte använda SSE/AVX/AVX512 är rätt mycket samma sak som att bara använda 4/2/1 CPU-trådar på en 8C/16T CPU! Utanför machine-learning, vissa codecs och vetenskapliga program utnyttjas detta väldigt lite idag, så här finns en väldigt stor potential för t.ex. spel att ha väsentligt mycket bättre AI. (AI i formen "neurala nätverk" skalar halvbra med CPU-kärnor men kan skalas i det närmaste helt perfekt med SIMD)
IPC
Varför ökas då inte "IPC" mer? Nog handlar det bara om att Intel är slöa? Antag att det är sant. Varför har då ingen förutom Apple lyckats matcha Intels IPC?
AnandTech säger det så pass bra att det inte finns någon anledning att försöka skriva om det
"Contrary to popular belief, increasing IPC is difficult. Attempt to ensure that each execution port is fed every cycle requires having wide decoders, large out-of-order queues, fast caches, and the right execution port configuration. It might sound easy to pile it all on, however both physics and economics get in the way: the chip still has to be thermally efficient and it has to make money for the company."
Anledningen till att det är just Apple och Intel som leder IPC ligan är därför att hög enkeltråd IPC kräver enorma FoU resurser. Att komma hyfsat nära Apple/Intel är relativt "enkelt". Faktum är att Intels Atom numera har en IPC på Core2 nivå, man har ökat IPC >=20 % för varje mikroarkitekturuppdatering av Atom fram till nu.
Att öka något där IPC inte är speciellt högt är trivialt, att öka IPC när man börjar närma sig teoretisk max blir exponentiellt svårare. Ja, det finns en gräns för ILP och vi är faktiskt inte så långt från den gränsen i mikroarkitekturer som Monsoon (Apples senaste ARM), Skylake och Zen. Apple har en en fördel här, 64-bitars ARM har lite högre teoretisk maximal ILP (orsakat av att det är en väsentligt bättre designad instruktionsuppsättning jämfört med x86), men i slutändan är det ingen gigantisk skillnad och i slutändan finns bara en viss teoretisk IPL i varje given instruktionsström.
Så det hade varit väldigt mycket bättre för skrivbordsapplikationer om man bara ökade frekvens och IPC. Tyvärr sätter fysikens lagar allt fler käppar i hjulet där, lösningar som fler kärnor, SIMD, GPGPU etc är saker man tagit fram i "brist på bättre" men det är enda vägen framåt just nu.
Grejen här är att flera CPU-kärnor är bara en av vägarna, för desktop blir det rätt snabbt rätt få applikationer som ser någon relevant boost redan efter 2C. Detta är något som även AMD är medveten om
"There are few workloads that generate over 16 simultaneous threads per schedulable task or process, while most generate no more than eight threads per instance. Most of the workloads that do generate more than 16 threads per processare “embarrassingly parallel” high performance computing (HPC) workloads and generate orders of magnitude more threads per instance – they are better suited to GPU or other offload acceleration than scaling up to higher socket counts."
Har pratats väldigt länge om GPGPU, väldigt lite hände det första decenniet men nu börjar vi faktiskt se allt fler applikationer med riktigt bra GPGPU stöd. Det lite ironiska är att GPGPU, av orsaken AMD nämner ovan, faktiskt minskar behovet av CPUer med många CPU-kärnor då GPUer är långt effektivare på de flesta problem som är "embarrassingly parallel".
Så förhoppningsvis sansar sig AMD/Intel kring "kärnornas krig", redan vid 6C/12T och framförallt vid 8C/16T måste det finnas vettigare saker att lägga transistorer på än flera CPU-kärnor när man tittar på desktop! Gick ju sådär på mobilsidan, alla utom Apple sprang efter många CPU-kärnor. Såg bra ut i benchmarks men Apples väg totalt krossade motståndet i det som faktiskt spelade roll på mobiler och pekplattor sett till CPU-prestanda!
På desktop kan man självklart fortsätta lägga till kärnor och öka faktiskt CPU-effektuttag. Klagar inte bara det finns alternativ för oss som inte gillar CPUer som drar väl över 100W (kommer ju snart modeller med 250 W TDP som standard, rätt säker Intel gör samma sak för sin HEDT serie)... På bärbara bör man ta sig en funderare, där har jakten på fler kärnor redan orsakat väldigt inkonsekvent prestanda mellan modeller med samma CPU och mellan nätdrift och batteridrift (när man tittar på mainstream som är tunna, lätta bärbara på runt 13").