V tom grafu porovnavaji vykon na vlakno u multi thread procesoru vs single thread. Cili chceme-li ziskat vykon na jadro, tak musime vynasobit intel a AMD 2x? Pak rikaji, ze jednojadrovy vykon za 2 roky bude tam, co odchazejici generace x86 CPU
S tolika jadry to bude urcite slusny kombajn, ale jenom na to, co se da jednoduse skalovat.
Ted jeste kdy na to budou ty aplikace, kdyz CPU budou za 2 roky?
Myslienka je nadherna, ale ARM je na serveroch vo velkom nepouzitelne. Aspon zatial. Dam par dôvodov, preco by som ho rad nasadil, ale aj to, preco nemôzem a zial, negativa zatial vyhravaju.
1. Vela jadier je super vec, napr pre databazy ako Firebird, MSSQL a podobne, kde kazdy pouzivatel ma svoj vlastny proces a teda viem pripojit velmi vela pouzivatelov.
2. Energeticka efektivita je skvela a pouzit napr 400W zdroj, namiesto 600W zdroj v 6-8 serveroch je citit na uctoch, ale aj na chladeni. (taketo zdroje preto, pretoze ide aj o spotrebu RAM, radica diskov, samotnych diskov a podobne, na samotne CPU a urcite staci menej)
3. Vela jadier sa vyuziva najmä ked virtualizujem - no a tu je problem. ARM zatial nevie (aspon podla mojej skusenosti) virtualizovat, konkretne vmware, hyper-v. Ostatne nepouzivam/neriesim. No a pokial nebude priama virtualizacia, aj vela jadier je nepouzitelnch. Malokto spusta OS priamo na zeleze, pretoze je to narocne skalovat, backupovat a pod. Ked to mam napr. pod esxi, zalohujem celu virtualku a ak mi odide zelezo, vymenim ho a fungujem dalej. - toto je hlavny dôvod, preco to nemôzem pouzit.
4. Podpora instrukcii - toto je vyhoda aj nevyhoda ARM architektury. Vdaka tomu, ze si nenesie zeleznu gulu historie, nemusi mat extremne vela instrukcii a preto je efektivna. Ale väcsina aplikacii nebola napisanych vcera, ani pred rokom, ale funguju kludne aj desatrocie a nikto ich nebude prekopavat na ARM, pokial na to nebude extremne silny tlak. Rovnako ako napr. uctovnictvo na Linuxe alebo na MacOS nespustite (vynimka su webove).
5. Nepodpora velkych vyrobcov. HP(E), Dell, Lenovo... Pokial to nezacnu tlacit oni, ARM sa nepresadi. Preco? Lebo oni robia support, riesia zaruku, na druhy den Vam poslu nahradny diel a vymenia ho. Robia aktualizacie, upravuju OS priamo na svoj hardware a podobne. Nebudem drzat okrem redundancie aj treti zalozny server ako sklad nahradnych dielov.
Kde by to mohlo byt pouzitelne su napr storage (lun, san, nas) a obdobne veci, kde ide o jednoucelove zariadenie. Pripadne aktivne sietove prvky.
Co som popisal je moja skusenost a plati pre komercnu sferu. Specializovane aplikacie, vypocty a podobne neriesim. Ak mi ale vyvratite moje skusenosti a date linky, rad sa priucim.
aplikace už jsou. Takový nginx nebo apache z toho budou těžit IMHO docela dost, i když s příchodem HTTP/2 už ani to není taková trága. Ve světě opensource se to asi neztratí, ale nasmál bych se, kdyby na takovém stroji chtěl někdo provozovat SW, který se licencuje per-core (a že jich takových je!). :-)
Písal som to pred pár rokmi a o pár rokov to asi budem písať znova. Vtedy to bolo A72 vs Skylake, respektíve ešte predtým A57 ktoré Intel ľahko sfúkol Xeonmi-D. Ale ide o to, že ARM má stabilne desiatky % ročne, zatiaľčo Intel bol nastavený na 5% každých 18 mesiacov s tým, že posledných pár rokov sa im to zaseklo, potom (ne)vydali Kanónlake, Icelake ktorý je horší ako Skylake a Tigerlake, ktorý má vyššiu frekvenciu, ale nižšie IPC a hlavne 64W v ultrathin.
Výsledok: 3GHz A78 ~ 5GHz Icelake. To mám od niekoho, kto sa venuje optimalizáciám. S tým že ARM je podstatne lepšie v branch prediction, out of order (riešenie závislostí medzi inštrukciami), zatiaľčo Intel má stále výhodu v optimalizovanom softvéri, knižniciach a "návodoch" pre vývojárov.
Nikdo nový už nepřijde. UMC, NEC, a pár ještě menších to vzdali dávno, Cyrix a IDT koupila VIA, a i ta je s vývojem cca 10 zpátky. Transmeta dopadla jako sedláci u Chlumce.
všechny dnešní x86 CPU jsou x64, takže se opravdu už dělají jen x64 modely (opomíjím specialitky jako soudobé i486 do embedded segmentu). Odebírat instrukce nebo dokonce celé módy ale nikdo nebude, ztratila by se tím zpětná kompatibilita a navíc většina z toho je dnes stejně jen vrstva v mikrokódu...
Problém pro ARM je to, že z malých čísel můžeš růst velmi výrazně, tudíž "procenta" ti budou naskakovat vysoká. A pak to, že posun u x86 o 5% je v absolutním měřítku srovnatelný třeba s 10% u ARMu.
ARM je RISC, tudíž jeho strojový kód je daleko "řidší" - jednodušší, ale zato delší, pokud neprovádíš nějakou triviální operaci, u které si vystačíš s několika nejjednoduššími instrukcemi, které jsou na obou platformách podobné/stejné. Takže věřím, že existuje případ, který popisuješ jako "výsledok", nicméně ten ukazuje jeden konkrétní způsob aplikace, který zřejmě ARMu sedí. Nejedná se však o všeobecnou situaci.
Myslím že "3GHz A78 ~ 5GHz Icelake" úplně platit nebude (minimálně 5GHz Ice Lake neexistuje, heh...).
Tiger Lake má ~stejné nebo horší (max. bude tak o 2% lepší) IPC jako Ice Lake a ve SPEC2006, které celkem ARMům jde, má vyšší single-thread skóre než Apple A13 a proti Snapdragonu 865+ (Cortex-A77 až na 3,1 GHz) má o 47-53 % vyšší skóre. Pokud bychom normalizovali frekvence na těch 5 a 3 GHz, tak vychází, že Tiger bude mít o 58 % až 65 % vyšší výkon. Cortex-A78 má mít jen o 4-7% lepší IPC než A77, takže když přičtu 7%, tak je pořád Tiger o 48-54 % lepší. ( https://www.cnews.cz/nova-jadra-arm-cortex-a78-cortex-x1-vykona-architektura-proti-intel-amd-apple/2/ ). A i kdyby mělo jít o Cortex-X1, tak tam nebude tak velké navýšení.
Je možný že by ta ekvivalence platila, třeba kdyby se ten ARM zoptimalizoval hodně dobře a Ice Lake ne.
https://images.anandtech.com/graphs/graph16084/111168.png
Problém bych viděl spíš v tom, kolik spotřebuje Intel u Tiger Lake na těch 4,8 GHz (okolo 21 W iirc) a kolik potřebuje ten Cortex na své 3 GHz (tak 3-4 W tipuju). Tam je Intel pozadu (částečně svým 10nm procesem, částečně asi i architekturou).
Zakopaný pes je v tom, že když do toho ARMu narvete všechno, co mají x86 jádra, přijdete o to, co na tom ARMu obdivujete, tedy o malá jádra s malou spotřebou, a získáte to, co nechcete, tedy velké drahé čipy s velkou spotřebou, které pak už nepřinášejí žádnou konkurenční výhodu, kterou byste přesvědčil zákazníky, aby si je začali kupovat místo těch x86.
viz předřečníci. Smysl, fór, architektur postavených jako čistý RISC je v tom, že mají velmi omezenou sadu instrukcí, které ovšem díky tomu, že jsou jednoduché, vykonávají velmi rychle. To může, a taky je, být velká výhoda u jednodušších aplikací, které se specializují na prosté I/O operace, případně se spokojí s omezeným výpočetním potenciálem. Jako příklad lze uvést právě různé webservery, fileservery (NASy) apod. Zrovna webserver nebo reverzní proxy, kde existuje milion threadů a samotný server víceméně pouze vyhodnocuje html požadavky, je takové řešení optimální. V okamžiku, kdy začneš počítat "matematiku" apod., jde takové řešení k šípku (pokud nemá k tomu speciálně určené rozšíření)
"A pak to, že posun u x86 o 5% je v absolutním měřítku srovnatelný třeba s 10% u ARMu."
No povedzme že hej, ale stále bude platiť, že relatívna pozícia ARM sa zlepší.
A teraz pridajte to, že Intel pol dekády zlepšil IPC o 0%.
"ARM je RISC, tudíž jeho strojový kód je daleko „řidší“ – jednodušší, ale zato delší,"
To sa tu už riešilo, a s modernými kompilátormi je to skôr naopak.
Navyše x86 má problém so spätnou kompatibilitou ktorá spôsobuje že jedna inštrukcia zaberá príliš veľa miesta. (x86 má variabilnú dĺžku inštrukcií)
Všetky "krátke" miesta sú už zabraté starými inštrukciami a preto musia byť nové inštrukcie extrémne dlhé, najdlhšie majú až 120b, čo je drastický rozdiel oproti 32b ktoré potrebuje ARM (pritom tá inštrukcia nerobí 4x viac mikrooperácií).
Je to problém aj pri cache, pri fetch... a najmä kvôli tomu, že Intel má síce 5 dekóderov, ale len jeden komplexný, a súčet dĺžok inštrukcií nesmie presiahnuť 128b. (Icelake)(AMD má všetky dekódery komplexné a maximum 256b).
To znamená že v prípade moderných inštrukcií padá Intel na 1IPC zatiaľčo ARM pokračuje plnou rýchlosťou (Intel to potom samozrejme dobieha starými MOV, ADD, SUB inštrukciami kde má proti ARM samozrejme výhodu).
to je velký omyl. Pozice ARMu se zlepší jen těch triviálních operacích, nikoli celkově. IPC totiž není srovnatelné (jak jsem už psal výše).
Nevím, co se kde řešilo, ale naopak to moc být nemůže, když ve většině případů je instrukce kratší, než zpracovávaná data. A opět zapomínáš, že to, co "CISC" zvládne třeba jednou instrukcí (byť dlouhou), tak u RISCu musíš "oběhat" delším kódem, často pak i několika cykly, abys nabral stejný objem dat. (srovnej si třeba počty a délky registrů). Ono to totiž není tak úplně jednoznačné.
Je logické, že kvalita kódu závisí na kvalitě kompilátoru.
On ARM už moc RISC není, ta 64bitová verze má IIRC dobře k tisícovce instrukcí, leccos je poměrně netriviální, teď když se k Neonu přidá SVE, tak to bude další kopec instrukcí.
Takže už to ta jednoduchá architektura není, ta komplexnost už se na tu úroveň "velkých CPU" dostala.
Co z RISCu v ARMv8 přetrvává, to je hlavně konstantní délka instrukcí (32 bitů). Ta má výhody, protože to, že instrukce vždycky začínají na stejném místě, zjednodušuje instrukční dekodér proti x86, kde jsou různé prefixy a instrukce mají variabilní délku (= problém).
ARMv8 má pak ještě druhou výhodu a tou je, že je to takové relativně čisté, protože to bylo navržené v tomhle tisíciletí (skoro i v této dekádě), není tam moc historických a už zastaralých věcí a zabetonovaných chyb z minulosti.
Takže reálně návrhář ARM CPU bude mít proti návrhářovi x86 CPU za identických podmínek určitou výhodu. Tu fandové/antifandové asi leckdy přeceňujou, ale nějaká tam bude. Na druhou stranu x86 ji může často kompenzovat tam, kde se software léta na něj ladil. Ale když kód optimalizovaný není nebo je nový a prostě se kompiluje, tak to nebude.
Ještě bych řekl, že doteď měly x86 výhodu v silnějších SIMD instrukcích (256bit). SVE to teoreticky může vyrovnat nebo i obrátit, ale taky třeba ne, uvidíme, jestli třeba ta univerzální šířka vektoru nebude mít i své nevýhody a nebude to zhoršovat výkon dosažitelný v ručně optimalizovaném kódu.
AMD přežilo IMHO hlavně kvůli tomu, že do x86 přispělo nemalou měrou (měli už z dob i8080 celkem velké knowhow okolo FPU).
https://en.wikipedia.org/wiki/Intel_8231/8232
Intel a AMD jsou historicky provázaní docela hodně.
no... ani moc ne - aspoň u x86. Problém je v instrukční sadě. Pokud to má být opravdu jedna architektura, bude muset to "malé" jádro umět všechny instrukce toho velkého, aby byla zajištěna koherence kódu. A z toho plyne, že můžeš ušetřit tak max. na L1, možná L2 cache - a z "malého" jádra je opět velké. Tudy cesta nevede. Opačný přístup (tj. zakázat instrukce, které neumí malé jádro) předvedl právě Lakefield a kvůli tomu taky blbě dopadl, protože tím to plnotučné jádro zkriplil.
no nevim laicky si dokazu predstavit, ze scheduler bude vedet co muze na kterem spoustet a co ne. Je imho zbytecne spoustet chromova okna na velkem jadre, stejne jako herni engine na malem jadre.
Dalsi moznost je, ze instrukcni jednotka (treba AVX2) bude sdilena mezi dve mala jadra a pripoji si ji vzdycky jadro, ktre ji zrovna potrebuje. Jadro ktere nebude mit zrovna volnou jednotku bude pocitat pomaleji na SSE (je to asi najivni predstava, ale proc ne?)