Slabé CPU s nekvalitním OoO potřebuje SMT aby využilo nevytížené ALU/FPU výpočetní jednotky. Tedy typicky x86 procáky mají o dost nižší IPC, takže prostě SMT potřebují.
Takovej Apple M2 co má IPC o 56% vyšší jak AMD Zen 4 vlastně SMT vůbec nepotřebuje. M2 má 6+2 ALU konfiguraci zatímco Z4 má jen 4+1 ALU, takže M2 má o 50% víc výpočetních jednotek zatímco IPC má vyšší o 56% = i přes obrovský náskok v IPC má vyšší vytížení výpočetních jednotek.
Akorát že ve skutečnosti to funguje spíš naopak. Čím víc má procesor širší jádro (víc výpočetních prostředků), tím vyšší je pravděpodobnost, že nebudou při zpracování jednoho vlákna všechny využité. Při přidávání dalších ALU/SIMD/load-store jednotek obvykle nastává něco jako zákon klesajícího užitku, kdy je čím dál obtížnější ty další jednotky zaměstnat, což s tím souvisí.
Jádra s vysokým IPC mají tudíž také dobrý potenciál pro vytěžení dalšího výkonu pomocí SMT.
Nemluvě samozřejmě o tom, že část užitečnosti SMT je v tom, že využije výpočetní jednotky v okamžiku, kdy je první vlákno neschopno pokračovat protože čeká na data z paměti, což je situace, kdy je úplnějedno, jestli má dvě nebo osum ALU.
12. 7. 2023, 18:07 editováno autorem komentáře
Pane redaktore. To vaše čekání na data z paměti a zaseknutí vykonávání instrukcí (stall) se týká pouze tzv. IN-ORDER vykonávání. Já jsem naopak naprosto jasně zmínil OoO (OUT-OF-ORDER nebo-li spekulativní vykonávání mimo pořadí). V takovém případě kdy se čeká na data OoO jádro prostě začne vykonávat jinou část kódu a tedy žádným zasekávání netrpí. Tohle jsou úplné základy co se snad učí na základní škole proboha.
Nebo k vám ještě ta novinka (OoO) nedorazila ani po 30 letech?
Odkud se to vyšší IPC asi tak vzalo, když mají stejný počet výpočetních jednotek?
Není to náhodou tím že In-order CPU masivně trpí zasekáváním? A to nejen kvůli chybějícím datům, ale i kvůli čekání na výsledek Compare/Branch instrukce, zatímco OoO mezitím na nic nečeká a jednotky vytíží spekulativním vykonávání instrukcí, které se nachází vepředu před aktuální pozicí Program Counteru. Furt nic? :D
"out-of-order CPU má vyšší IPC - jak je to možné??? ŠOK"
To fakt neznamená, že problém čekání na data se ztratil. Pro vývoj CPU po Pentiu Pro byla jedna z nejdůležitějších věcí se s tím vypořádávat, ale vyřešený problém to logicky není.
Tohle je jako kdyby nějaký idiot tvrdil, že od té doby, kdy mají procesory prediktor větvení, je branching vyřešený problém a chybně odhadnuté větvení neexistuje a nesnižuje výkon. (zatímco ve skutečnosti se každá nová architektura snaží ho zlepšit, a přitom pořád stojí spoustu výkonu, protože je prostě všude). BTW podobně jsou na tom prefetchery, které se taky pořád a pořád zlepšují - proč asi? Protože to není vyřešený problém a čekání na data z paměti je tu pořád. Nebo cache. Napadlo vás, že čekání na data z paměti je důvod, proč třeba ve hrách funguje 3D V-Cache? nebo proč používá Apple velká paměti cache? Všechno out-of-order procesory.
Opět úmyslně odbíháš od tématu když jsem ti vyvrátil ten nesmysl se zasekáváním 2xALU OoO. Protože fakt je ten, že OoO je dnes tak vymakané, že s pouhýma 2xALU jsou prakticky na 100% vytížené. Jinak by dnešní moderní CPU neuměla zpracovávat průměrně 7 instrukcí/takt, že jo.
Takže zatímco 2x ALU in-order CPU se pořád zasekává, třeba kvůli instrukci DIV která trvá třeba 10 taktů a druhá ALU musí čekat nevyužitá a kam OoO jádro klidně pošle spekulativní instrukce a tak vytíží a zvýší IPC ikdyž má stejný počet ALU. Stejný efekt dosáhne SMT, když tu nevyužitou ALU vytíží druhým vláknem. Nevím co je na tom nepochopitelného, že SMT pomáhá vytížit výpočetní jednotky úplně stejně jako OoO.
Když má CPU dobré OoO, tak benefit ze SMT je mizerný, k tomu penalta z Ahmdalova zákona, a navíc poloviční IPC na vlákno.
Tudíž SMT se hodí zejména pro in-order CPU a OoO co trpí nízkým vytížením ALUs (proto SMT dostalo jako první P4, protože trpělo nízkým vytížením ALU kvůli problémům s dlouhou pipeline a špatnými předikcemi, nebo proto SMT dostal in-order Atom a Larabee, nebo proto SMT mají GPU shadery což jsou in-order výpočetní jádra).
"jsem ti vyvrátil ten nesmysl se zasekáváním 2xALU OoO"
Popravdě už vůbec netuším, o čem teď vůbec tohle mělo být, ale ty vaše idey, že SMT není užitečné na out of order procesorech nebo že neexistuje čekání na data z RAM (a jiné prostoje v pipeline CPU) je skutečně nesmysl.
16. 7. 2023, 17:24 editováno autorem komentáře
"OoO jádro prostě začne vykonávat jinou část kódu"
To sice začne ale stojí to spousta energie.
Což je velký problém u mobilních zařízeních.
A dnes kdy hlavní brzda výkonu je TDP to je problém i v desktopu a serverech.
Tohle spekulativní počítání není nic jiného než čekání na data z pamětí. Jen CPU místo nic nedělání počítá úlohy které možná bude potřebovat. A když se splete, tak to celé zahodí. Jenže vyrobilo hodně tepla takže už nemůže boostovat.
OoO je určitě dražší a náročnější na implementaci a provoz než SMT, to bez debaty. Ale nenapadl tě důvod, proč zrovna ty mobilní zařízení co se musí vlézt do pouhých 2-5W TDP vůbec SMT nemají? Protože SMT má taky dost nevýhod:
1) Sice dokáže vyškrábout 20% výkonu navíc a tím zvýšit efektivitu, ale to za cenu polovičního IPC (správně polovina ze 120%, tedy 60%) což snižuje odezvu systému (IPC hlavního procesu). Respektive OS/CPU sníží frekvenci aby udrželo konstantní odezvu/výkon, a protože spotřeba se zvyšuje zhruba se 3.mocninou frekvence, takže o 40% nižší frekvence = 4,6x nižší spotřeba pro CPU bez SMT. A to je obrovská úspora energie, byť za cenu více tranzistorů a více fyzických jader.
2) SMT nijak nepomůže pro lehkou zátěž a idle. Na to jsou nejlepší Little jádra, která jsou speciálně optimalizovaná pro max výkon/Joule.
Ano pro Cinebench a podobné algoritmy je SMT super, ale pro většinu real-life SW je benefit ze SMT velmi diskutabilní až leckdy negativní. Všechno má své pro a proti.
Já osobně jsem velkým příznivcem SMT na extra-velkých CPU, třeba kdyby AMD Zen 5 byl 2x širší jádro jak Zen4, tedy 8x ALU + 2x Branch Unit a na tom by bylo SMT2, tak řeknu super. Nebo bestie jako 12xALU + 3x Branch se SMT3 ještě lepší. Podobnou fylozofii měla i Alpha EV8, která už v roce 2003 měla mít 8xALU s pomocí SMT4. Tedy jsem zastánce jak pomocí SMT udělat obří supervýkonná CPU jádra, která by jinak nemělo smysl dělat - tady SMT přinese zvýšení výkonu o 80-100%, což je benefit který už stojí za to.
Naopak se mi nelíbí dávat SMT na současné 4+1 Zen4 zdechliny.
16. 7. 2023, 09:08 editováno autorem komentáře
V bodě 2)
Která malá jádra máte na mysli?
O ARM to možná platí.
O AMD ne. Malá jádra pouze šetří křemík.
Takže se jich vejde více do chipletu.
Možné přínosy jsou jen v teoretické rovině.
O intelu to je totální blbost. Malá jádra (Atomy)původně vznikla za tímto účelem. Šetřit energii. Ale na dnešní domu mají mizerné IPC takže nic nešetří. Poměr výkon/joule je naprosto tragický.
ARM to myslím řeší podobně. Mála jádra = stará jádra.
ARM používá pro Little jádra specielně vyvinutá jádra optimalizovaná pro max výkon/joule. Nejsou to žádná stará jádra, ale úplně nejnovější jádra. Se podívej na změny v zbrusu novém Cortex A520. Podobný cíl mají i Middle core A720.
Původní Atom byl vyvinut pro mobilní telefony kde Intel totálně pohořel, protože x86 nelze udělat úspornou už z logiky CISCu. Dnešní Gracemont už je zase optimalizovaný pro výkon/tranzistor, aby zabíral co nejmenší plochu, ale spotřebu nemá zrovna úžasnou.
AMD jde zlatou střední cestou, což je dobrá strategie.