Portál AbcLinuxu, 5. května 2025 13:14
Ale jestli tam máš tisíc vláken, tak i kdyby jsi polovinu jader vyřadil (třeba úplně vypnul někde v /sys/bus/cpu/devices/cpu0/ po natažení cpuhotplug), tak se ti stejně budou na zbylých mezi sebou přetahovat o zdroje.Mně jde o to, abych vedle tisícivláknového floatového gnuradia, kterému efektivně stačí čtyři jádra (protože ten signál mi tam prostě přitéká realtime, takže ho víc není), mohl provozovat ještě celočíselné aplikace (které bych rád naalokoval na ta zbylá jádra). Ty cgrupy zní jako dobrý nápad.
Pokud nemáš hodně staré jádro, tak se defaultně scheduluje tak, aby se přednostně obsazovala jádra v různých modulech. Takže pokud mi na FX-8150 poběží jen čtyři thready, nestane se, že by měly dohromady jen dva nebo tři FPU schedulery. Pokud jich ale poběží tisíc a jen čtyři budou používat FPU, pak to AFAIK scheduler sám nepozná, aby je podle toho přemigroval.
Zajímavé je, že je k tomu využit stejný mechanismus, který se používá kvůli intelímu hyperthreadingu, takže třeba lscpu
reportuje údaje, které jsou vůču Bulldozerům hodně nefér:
unicorn:~ # lscpu Architecture: x86_64 CPU op-mode(s): 32-bit, 64-bit Byte Order: Little Endian CPU(s): 8 On-line CPU(s) list: 0-7 Thread(s) per core: 2 Core(s) per socket: 4 Socket(s): 1 NUMA node(s): 1 Vendor ID: AuthenticAMD CPU family: 21 Model: 1 Model name: AMD FX(tm)-8150 Eight-Core Processor ...
De facto je to pravý opak toho, kvůli čemu je ta žaloba.
Prťavoučké ARM jádro Cortex-A35To bude zajímavý porovnat real life výkon s tím Intel Quarkem. Podle všeho Intel tvrdí, že Quark má menší spotřebu, ale při takových velikostech bude záležet i na pár kB RAM. Chtělo by to tabulku závislosti taktu a spotřeby (předpokládám, že ten ARM půjde taktovat dost dolů). Bylo by hustý mít v kalkulačce něco co může skutečně spustit třeba Octave
Pro AMD hovoří to, že historicky je CPU (dnes CPU jádro) chápáno jako jednotka pro integer výpočtyNechápu proč všechny zpravodajské servery řešej integer výpočty, některý procesory nemusí umět ani násobit, nebo jen omezeně. Důležité je kolik zvládne najednou skoků. Každopádně žalující by mohl být nemile překvapen až zjistí, že moderní procesory obsahují SIMD instrukce, kde se pracuje nad několika integery současně
Zalujici postavi zalobu uplne jednoduse - veme jedno(dvoj)jadrovy CPU a zmeri jeho vykon, 8 jader = rekneme 7-7,5x zvednuti vykonu. Pokud to pro AMD neplati (pro libovolnou ulohu) tak ma AMD problem a to hodne velkej.
A dost pravdepodobne se mu povede dolozit, ze prave pro vypocet ve float ... je to "8mijadro" jen cca 3-3,5x rychlejsi nez jedno jadro.
Tímhle způsobem pomocí vhodně zvolené úlohy "dokážete", že žádný procesor nemá tolik jader, kolik uvádí (kromě jednojádrových, pochopitelně). Takže spíš - jako obvykle - půjde o to, kdo bude mít přesvědčivější právníky a experty.
Pokud to pro AMD neplati (pro libovolnou ulohu) tak ma AMD problem a to hodne velkej.Aby pak tímhle způsobem neplatil i Intel. Ten může viset třeba na sdílené cache nebo na čekání na paměť.
ze od dob 486 az do prvniho vicejadra byl vzdy soucasti kazdeho CPU i matematickej modulNebyl
Zalujici postavi zalobu uplne jednoduse - veme jedno(dvoj)jadrovy CPU a zmeri jeho vykon, 8 jader = rekneme 7-7,5x zvednuti vykonu. Pokud to pro AMD neplati (pro libovolnou ulohu) tak ma AMD problem a to hodne velkej.To je pitomost, scaling neni dan jen poctem vypocetnich jader a sdileni casti subsystemu procesoru je celkem bezne. AMD se zde chova v mezich standardu a architekturu na teto urovni netajilo, at na urovni verejne prezentace ci manualech pro vyvojare.
Pokud to bude škálovat jen na 3-3,5násobek, tak bude chyba v programu, že prostě nesaturuje osm vláken, ne v Bulldozeru.Jo, určitě to bude tím, že jsem ve skutečnosti nespustil osm vláken, a ne tím, že ve všech počítám floaty a AVX a tyhle jednotky tam jsou prostě jenom čtyři, nebo že čekám na náhodné přístupy do paměti, nebo že jsem zahltil paměťovou sběrnici, nebo že už se mi ty dvě paralelně běžící FFT nevejdou do sdílené L2 cache, zatímco jedna instance se tam těsně vešla.
V dnešní době, kdy se šifruje a jedou multimédia snad na každým kroku (i když osobně si teď nejsem jistej, jestli komprimace jedou floaty) je od AMD nerozvážnost tam ty jednotky nemít
Na šifrování je tam spešl HW podpora a šifrování v CPU je mnohem rychlejší, než jak rychle jsou schopné jakékoliv konvenční zdroje dat (síť, disky - možná až na PCI-E SSD) ta data dodávat. Na šifrování navíc FPU není potřeba, to jsou většinou logické operace nad bloky dat, tam se víc hodí SIMD.
Na multimedia existují AVX. Buldozer má dvě 128b jednotky na modul (tedy jednu FMAC na jádro) a umožňuje je spojit do jedné 256b. Tedy čtyřmodulový buldozer má buď 8x128b FMAC nebo 4x256b FMAC (přičemž není nutné spojovat všechny jednotky). (Převod do řeči AVX je komplikovaný, některé instrukce udělají v buldozeru jiné jednotky a FMAC je volná.) Každopádně, když něco komprimuju v handbrake (což je asi stejně jen nastavba nad ffmpeg), tak to jede skoro osmijaderně (asi tak 720%). Což nevím, zda je dáno tím, že něco nestíhá dodávat data do threadů, nebo je to dané architekturou toho programu. Je to celkem jedno, těch 300fps (při konverzi na něco jako 576p (něco jako full non interleaved pal) to umí 300fps). A zvládá to i realtime 1080p záznam během hraní her (stejně málokterá umí víc jak 2 výpočetní threadu).
Pokud někdo potřebuje FPU výpočty, tak je mu k disposici GPU. Tam to spočítá rychleji a levněji, než na kterémkoliv general purpose cpu. Tam třeba AMD směruje s APU (CPU + GPU v jednom socketu).
Intelu taky kdysi neprošlo když měl na prvních Pentiích chybu právě v FPU, a taky by principiálně šlo tehdy říct „tak tu jednotku prostě vypnem a u složitějších výpočtů si chvíli počkáte”.
Tj snad úplně jiné téma, ne? Mít tam vadnou jednotku a mít tam deklarovaný počet funkčních jednotek.
aby vesnice správně fungovala tak tam toho divnýho matematika prostě potřebujou
Ne všechny architektury ho mají. A zdaleka ne pro všechny úlohy ho potřebujete. Např. v jádře se nepoužívá vůbec a spousta userspace aplikací se bez FPU taky pohodlně obejde.
V dnešní době, kdy se šifruje a jedou multimédia snad na každým kroku (i když osobně si teď nejsem jistej, jestli komprimace jedou floaty) je od AMD nerozvážnost tam ty jednotky nemít
Tak třeba pro AES-NI se FPU nepoužívá vůbec (prakticky vyzkoušeno, na FX-8150 to škáluje perfektně až do osmi threadů) a tipoval bych, že výrazná většina šifrovacích algoritmů na tom bude stejně.
Sečteno a podtrženo, snažit se po tomhle vozit je nesmysl. Pokud někdo potřebuje vysoký výkon v aplikacích masivně používajících FPU, tak si takový procesor nekoupí. A pro zbávajících 100-ε procent aplikací vůbec nepoznáte, že jsou tam jen čtyři FPU. Naopak, kdyby jich tam dali osm a místo toho museli slevit někde jinde (třeba cache), byl byste na tom v drtivé většině případů hůř.
Jde o class action lawsuit, takže jediný, kdo má šanci na tom něco netriviálního vydělat, jsou právníci.
Rád bych se zeptal, u Zenu plánují až 40% nátůst výkonu, je to reálné a pokud jo, čím ho dosáhnou, když FPU jednotky nejsou až tak důležité? Zen prý staví na tom, že bude mít zas "plnohodnotné" FPU.
Jinak děkuji fšem za pěknou diskusi. Už asi začínám chápat, proč se AMD vydalo touto cestou. Každopádně podle různých (zejména herních) testů má FX nižší výkon hlavně v single tasku, čím to může být, kromě možná FPU, ještě způsobeno?
u Zenu plánují až 40% nátůst výkonu, je to reálné
Uvidíme příští rok.
čím ho dosáhnou, když FPU jednotky nejsou až tak důležité?
Podle materiálů, které byly zatím zveřejněny, se má především zlepšit "instructions per clock" poměr, tj. snížit průměrný počet taktů potřebných k vykonání instrukce. To je zatím jeden z hlavních faktorů, v němž AMD za Intelem zaostává (druhým je tempo přechodu na vyšší hustotu součástek).
Zen prý staví na tom, že bude mít zas "plnohodnotné" FPU.
Nevím, tuhle informaci jsem zatím nezaznamenal a, upřímně řečeno, je mi úplně jedno, jestli je to pravda nebo mne. U aplikací, kde je pro mne výkon nejdůležitější, na FPU nezáleží.
nižší výkon hlavně v single tasku, čím to může být, kromě možná FPU, ještě způsobeno
Především již zmíněná vyšší taktová náročnost instrukcí. Tím při stejné frekvenci stejný kus kódu trvá déle. Možná tam bude i nějaký rozdíl v efektivitě přístupu do paměti, ale to nevím jistě.
Ale ono to celé záleží na tom, jak se porovnání postaví. Pro mne je třeba zajímavé kritérium "jsem ochoten za procesor dát přibližně 5000-6000 Kč, kdo mi nabídne nejvyšší výkon?" A v takovém případě odpověď zní AMD. Nasadím-li cenu dostatečně vysoko, odpovědí bude Intel. A stejně tak u kritéria "chci co nejvyšší výkon, ať to stojí, co to stojí" (tedy aspoň bavíme-li se o x86_64 architektuře) - jenže to je otázka, která zajímá především autory srovnávacích článků v časopisech a na webech, ty, kdo procesory opravdu kupují, většinou ne.
V dnešní době, kdy se šifruje a jedou multimédia snad na každým kroku (i když osobně si teď nejsem jistej, jestli komprimace jedou floaty) je od AMD nerozvážnost tam ty jednotky nemít,Vetsina aplikaci jede na intech, vcetne sifrovani. V praxi FPU jednotka neni i u vetsiny aplikaci vytizena a tak jeji sdileni nevadi, a navic bottleneck je vetsinou u pristupu k pameti.
Jo, určitě to bude tím, že jsem ve skutečnosti nespustil osm vláken, a ne tím, že ve všech počítám floaty a AVX a tyhle jednotky tam jsou prostě jenom čtyři
Z té argumentace vidím, že jsem to asi měl vysvětlit víc po lopatě.
Vidím, že máte představu, že ta sdílená FPU má prostředky akorát tak na to, aby ji vytížilo jedno z těch integerových jader a když by si chtělo líznout i druhé, tak oba dostanou jen polovinu toho, co by mohlo jedno, takže rychlost spadne na 50 %. Ale to je vyslověně cyhbný předpoklad a tak to nefunguje, na což jsem ve svém komentu narážel. Ve skutečnosti je ta FPU pro jedno jádro silně předimenzovaná, ona je skutečně stavěná na dva thready.
Právěže kdybyste si to pořádně ověřil benchmarky, tak byste dostal to škálování, o kteérm jsem mluvil, dejme tomu ze 100 % na jednom vlákně na 180 % na dvou. Platí to i pro úlohy které tu FPU silně vyěžují, například x264, které stráví 60% času v SIMD kódu (jede v té sdílené FPU). Ta jednotka má docela velkou kapacitu, jsou tam čtyři nebo u Steamrolleru tři pipe (eveidentně máte představu, že FPU je nějaká "jedna" jednotka), které jedno vlákno nemá v praxi moc šanci vytížit samo. Prostě v AMD nebyli dle vašeho předpokladu až tak pitomí aby si mysleli, že tam stačí šoupnout jednu FPU jaká by stačila na jedno jádro, ale použili o něco silnější.
Fakt si to na těch CPU zkuste vyzkoušet, než budete říkat s prominutím blbosti jako to ocitované.
To mi trochu připomíná mou první zkušenost s FPU ještě v době, kdy to byl samostatný koprocesor (387). Když jsem si ho pořídil, chtěl jsem ho hned vyzkoušet, tak jsem narychlo v Turbo Pascalu napsal vizualizaci Juliovy množiny tím nejtupějším způsobem a v double precision. Přeložil jsem to bez využití koprocesoru a s ním; s využitím koprocesoru byl sice program rychlejší, ale jen asi třikrát, což mi přišlo málo. Tak jsem se podíval disassemblerem a nevěřil jsem svým očím. Překladač vyrobil kód, kde např. vynásobení tří čísel probíhalo asi takto:
Tak jsem vnitřní smyčku přepsal do assembleru s tím, že se celý výraz vždy počítal v FPU a zpátky se četl až výsledek. Finální verze byla oproti původnímu programu (bez FPU) rychlejší asi stokrát.
Dnešní překladače jsou samozřejmě mnohem chytřejší, ale i tak je potřeba mít na paměti, že ani složitý výpočet ve float/double nemusí zdaleka celý probíhat v FPU. Ono i u "normálních" instrukcí se běžně stává, že se nějaká komplexní instrukce nepoužije, protože v konkrétním případě (nebo dokonce obecně) je rychlejší ji rozepsat do jednodušších.
kdy to byl samostatný koprocesor (387).Podobna zkusenost s 80287 a pocitanim fraktalu v assembleru
Dnešní překladače jsou samozřejmě mnohem chytřejší, ale i tak je potřeba mít na paměti, že ani složitý výpočet ve float/double nemusí zdaleka celý probíhat v FPU.Stale se nam u numerickych algoritmu vyplaci pouziti SIMD (NEON/AVX/SSEx) a compiler intrinsics.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.