Resenim je proste se na HT vys*at! Bylo to dobry jako takovej "falesnej" a levnej multiprocessing v casech, kde dvou-jadro bylo vrcholem nabidky. Dnes kdyz mam k dispozici i pro desktop levne 6-8 jadrove CPU uz HT nepotrebuju.
Pro vps-hosting to samy. Dnes jsou k dispozici levne >20 jadrove CPU, tak proc se trapit s HT a riskovat ze se objevi naka bambilionta verze spectre? Tohle je skratka slepa vetva vyvoje, a budouci generace CPU by mela byt bez HT. Narust vykonu minimalni, nestoji to za ty problemy...
btw, mam tady v praci 2x Xeon 4114 (20 cores + HT). Testoval sem na reseni velkejch soustav rovnic metodou ktera pekne skaluje s poctem CPU. Meril sem celkovej cas, a 20cores+HT bylo o ~3% rychlejsi, nez kdyz sem pouzil jenom 20cores. Naco tedy HT? Na nic! Pohrbit tuhle vec, a jede se dal...
Ta tak. Kdyby vykopli HT a flákající se jednotky použili místo branch prediktoru tak, že se pojedou do rozhodnutí obě větve v rámci dvou pipelines. Pak výkon nezávisí na skoku (volí se jeden nebo druhý zpracovaný výsledek) a vnější pozorovatel vidí načtení cache za podmínkou ať je splněná, nebo ne. A nikdo cizí paralelně s taskem nesdílí stavový informace. A kernel při výměně threadu prostě musí uklidit tak jako tak.
Větvení je problém kvůli pipeline, že se musí zahazovat co už je hotovo. Pokud je pipeline s 10 řezy, zpracovává 10 (mikro) instrukcí. Když se skok vyhodnotí jinak, těch 10 rozpracovaných instrukcí se zahodí. Branch prediktor se snaží tohle zahazování omezit.
Pokud za skokem další skok následuje po >= 10 instrukcích, vystačíš si s dvěma "pipelinama" pro zpracování, protože při další podmínce je už předchozí slepá větev zahozena.
Při < 10 instrukcích by se holt muselo v té větvi interně vložit pár NOPů, ale furt lepší tři NOPy, než zahozených 10 instrukcí.
Průšvih by to byl akorát v případě cyklu s <10 instrukcema, tam by se musel proložit NOPama a výkon by šel trochu dolů. Tam BP dává lepší výsledky.
Tak pokud s bavíme o bezpečnosti, tak právě na tom, jestli se načte/nenačte cache stojí pěkná řádka útoků na CPU. Takže je na výběr - secure mode (= načte se vždycky, ale je to pomalejší a útočník nevidí rozhodnutí), nebo power mode (= NOPy do doby, než bude jistota, že jsou data potřeba).
Samozřejmě, že to není takhle bipolární. Když už data v cache jsou, zůstanou tam do doby, než v cache dojde místo. Takže pokud budu mít 1000 iterací cyklem a načítání až za ním, bez ohledu na BP se začne ládovat cache a pak se na ni nečeká takovou dobu na konci cyklu. Takže i v tom "secure mode" se to v tomhle případě trochu zrychlí.
To je trochu falešné dilema. Spekulovat lze i transakčně, což je nejspíš směr, kam se nové CPU vydají. Do cache se data dostanou až po commitu. Ano, i to bude asi stát něco výkonu a znamená to si pro tento účel část cache vyhradit.
Tak mě napadá, další směr může být exkluzivní cache, jakou má/mělo AMD…
A jak je implementováno sgn() ? Aby to nebylo
int sgn(int x) {
if( x < 0) return-1;
if( x > 0 ) return 1;
return 0;
}
Pak by to byla 8x podmínka + 4x skok do funkce + obecný násobení (celkem drahá operace) + 4x matematická operace. Optimalizace jak od hochů z M$.
Lepší je využít, že
1) Porovnání je odčítání
2) při prohození operandů odčítání dostanu opačný znamínko - rozdíl mezi menším a větším
3) MSB je znamínko a pro záporný číslo je 1
if( ( (max - pos) | (pos - min) ) & (1 << (8 * sizeof(int) - 1) ) ) rychlost = 0;
2x odečítání v roli porovnání (první je číslo, který má být větší), sloučeno ORem (na ničem kromě MSB nám u mezivýsledku nezáleží), ANDem vybrán bit pro znamínko (za ANDem je konstanta, kterou vybleje kompilátor - 1 << 31 nebo 1 << 63 podle velikosti INTu), takže 4x rychlá aritmetická/logická instrukce + 1x čtení konstanty + 1 skok při nenulovým MSB. Nazdar.
Proč tak komplikovaně? msb se dá otestovat porovnáním s nulou
if( ( (max - pos) | (pos - min) ) < 0 ) rychlost = 0;
a kód je stejný - sub, sub, or, cmov.
Ale stejně je lepší nesnažit se přechytračit překladač. Tohle
if( pos > max ) rychlost = 0;
if( pos < min ) rychlost = 0;
vede na skoro stejný kód, akorát místo oru je tam druhý cmov. A aspoň je na první pohled jasné, co to dělá.
Za normálních okolností to udělá sám překladač - Compiler Explorer
Nesmysl. To je totéž jako tvrdit, že stejně nesmíš v ČR jezdit víc než 130, tak se všem autům vyndá z jednoho hrnce píst, aby to nikoho ani nenapadlo. Hardware prostě umožňuje efektivnější využití hardwaru a tím zvýšení výkonu výměnou za snížení bezpečnosti, takže ať si každý zvolí co mu s ohledem na jeho potřeby vyhovuje. Samozřejmě je lepší informovaný souhlas a jako výchozí bezpečnější nastavení, ale je kokotina to zatrhnout natvrdo jen proto, že jseš paranoidní a nechceš, aby v NSA viděli jak ti jdou miny a na jaký porno koukáš.
Sice fajn myšlenka, ale problém je, že tady to přepnout prostě nejde.
Prodali ti bezpečnostní dveře, který sice odolají střelbě ze samopalu, ale nemají kvůli rychlejšímu otevírání zámek (hledání klíčů a strkání do dírky přece zdržuje) a ten se ani nedá doinstalovat. Tak se na ně montují petlice a když chceš zamknout zevnitř, musíš napřed ven oknem, odemknout a vrátit se oknem dovnitř. Což je mnohem pomalejší, než kdyby tam ten zámek dli rovnou.
A momentálně vývojáři přemýšlí, jak udělat do dveří díru, skrz kterou bys dosáhl na zámek u té petlice, aniž by utrpěla neprůstřelnost.
Jenomže oni to tak udělali proto, že to zákazníci chtěli, a pořádný dveře odmítali kupovat. Fakt pochybuju, že by IT a následně prakticky všechno bylo tam kde to teď je bez toho, že by posledních 20 let byly k dispozici dostupný procesory. Myslíš, že by v každý rodině byla SPARCstation a každej člen rodiny by měl v kapse SPARCphone, a jupíci by si před roštěnkama ve školní jídelně šudlali iSPARCmini?
Bylo by to na úrovni katolickýho školství v době Jiráskova Temna.
2MasoxCZ: A samozrejme taky fungujou, protoze v CPU se sdili prakticky vse. V dalsim kroku se totiz bude resit, ze vsechny CPU pristupujou do stejny RAM. A kupodivu, si tam kazdej jeden muze precist a zapsat co chce a kam chce. A pak se s prekvapenim zjisti, ze to vsechno pouziva jeden disk, o kterym plati totez.
Hyperthreading nie je urceny pre ulohy, ktore jednostranne vytazuju len urcity typ vypoctovyvh jednotiek v CPU ako je riesenie rovnic (FPU jednotky). HT vylepsuje celkovy vykon systemu, kde bezi mix rozlicnych uloh, ktore rovnomerne vyzivalju rozlicne typy jednotiek (FPU, integer, load/store...), vtedy sa da dosiahnut navysenie vykonu o 30-50%.
Je samorejme, ze "skutocne" jadro je ovela lepsie ako to z HT a suhlasim s tym, ze v pripade dostupnosti viacjadrovych procesorov straca HT postupne zmysel. Napriklad POWER8 procesor podporuje SMT8 (to je IBM nazov pre HT - Symetric Multithreading s 8 threadmi na core) ale da sa to v systeme (v AIXe) za chodu menit na SMT4, SMT2 alebo sa da HT uplne vypnut a administrator tak moze odladit vykon systemu podla uloh ktore tam bezia.
POWER9 sa uz dodava v dvoch verziach alebo s SMT8 alebo s maximalne podporovanym SMT4, ktory ma ale na cipe 2x viac jadier ako verzia s SMT8.
Tak mi rekni, jak dokaze beznej uzivatel vytizit cpu s 10 cores + HT? Samotne efektivni vyuziti 10 jader neni tak jednoduche, to musi byt aplikace specielne napsana a nekdy to ani nejde.
Tak naco ma byti na cpu s 10 cores jeste HT? Ja bych bral radsi 12cores bez HT za stejnou cenu (coz by snad plochou cipu mohlo byti +/- na stejno)...
Běžný uživatel nevytíží ani deset jader. Chyba byla, že si vůbec takový procesor koupil. Zda to má nebo nemá HT na té chybě nic nezmění.
Tolik jader a ještě s HT si bude pořizovat někdo, kdo provozuje třebas virtuálky nebo webový server, který v jednu chvíli obsluhuje desítky požadavků. Prostě na něco, co samo o sobě obnáší desítky vláken, každé dělající něco jiného nebo v jinou chvíli.
Na paralelní výpočty je lepší maximalizovat počet jader * frekvence. HT pomůže jen v hodně specifických paralelních úlohách, které vyžadují jednotky, které jsou skutečně zdvojené (příkladem budiž zpracování textu). Jenže většina zátěže půjde po věcech jako jsou FPU a tam na sebe ta vlákna budou čekat, protože FPU je pomalejší než jedno vlákno. A obvykle jich tam není tolik, aby to upočítalo vlákna dvě.
No kdo by to byl řekl, že pokud sdílím funkcionalitu s ukládáním stavu, sdílím i ten stav...
Pokud už něco sdílet (bez ohledu na to, jestli HW nebo SW) , tak samostatnou instanci, nebo bezstavovovu variantu, která nic nikam neukládá. Za předpokladu, že nechci sdílet ty data.
Můžu sdílet třeba shifter, data protečou v jednom taktu a jsou fuč. Můžu sdílet ALU, data protečou a jsou pryč. Ale koho sakra napadlo sdílet branch prediktor (který se učí = pamatuje si předchozí stavy) a cache???
I při psaní programu v blbým Cčku, pokud mám několik vláken, musím přece přemýšlet, jestli ta vnitřní stavová proměnná ve funkci má být statická, nebo jí to dávat zvenčí argumentem. První možnost je rychlá, druhá bezpečná.
Koho napadlo sdílet cache nevím, ale pokud bylo cílem maximalizovat výkon multithreadové aplikace, která něco počítá, tedy vlákna přistupujou ke stejným datům a provadí stejný kód, pak je ta volba celkem logická!
Blbé je samozřejmě tohle všechno, když na procesoru mohou běžet nepřátelské procesy, které využijou každé slabiny, aby se dostali k informacím, ke kterým normálně nemůžou.
Těžko říct, zda tohle dřív nikoho nenapadlo nebo to ignorovali, ale předpokládám, že spekulativní provádění, cache a další principy vznikaly v době, kdy se na bezpečnost hledělo dost jinak. Vůbec bych se nedivil, kdyby před lety vývojáři dostali zadání, že klíčový jen výsledný výkon (skóre v benchmarcích) a teoretickými blbostmi, které "nikdy" nenastanou, se nemají zdržovat... nějaké roky vše hezky fungovalo, začalo se to používat všude... hups a najednou je všechno špatně. :-)
"Koho napadlo sdílet cache nevím, ale pokud bylo cílem maximalizovat výkon multithreadové aplikace, která něco počítá, tedy vlákna přistupujou ke stejným datům a provadí stejný kód, pak je ta volba celkem logická!"
Není. Nastuduj si "Race Condition"! Nemůžeš pustit dvě vlákna na stejný data, pokud minimálně jedno z nich zapisuje. A pokud se data liší, liší se automaticky i obsah D-cache, registrů,... Shoda branch prediktoru je i v tomhle případě spíš sakra velká náhoda, protože skoky vyhodnocují obecně nějaký různý data. A to i v případě, že nějakou náhodou je shodná I-cache.
Nemyslím, že by mělo cenu hádat se o drobnosti, určitě existujou situace, kde to výhodnější bude. Třeba tím, že se data a kód načtou z RAM, když je potřebuje první vlákno, druhému mohou aspoň z části přijít vhod.
Pochopitelně vlákna nemusí hrabat přímo na stejný byte, aby cache byla přínosem, navíc spousta dat se opravdu jen čte, o těch skocích by se taky dalo diskutovat... ono je to jedno, prostě se na začátku tohle řešení mohlo jevit tak, že v určitých situacích bude výhodnější a ničemu neškodí... zatímco teď už víme, že škodí velmi. :-)
Může, většinou na umělé zátěži v benchmarku.
V praxi stačí splnit jenom několik "triviálních" podmínek:
1) Musí to být dvě vlákna v rámci jednoho procesu. Jiný proces = jinak mapovaná "velká RAM" = CPU neví, že je tam to samý.
2) Vzhledem k velikosti I cache musí být vlákna hodně přesně synchronizována.
3) Nesmí do toho kecat kernel a přehazovat vlákna, zastavovat je,...
4) Musí se jednat o zpracování (= kompletní řetězec read - modify - write). Vstupní operace, výstupní operace a přesuny přes CPU jsou výkonový nesmysl, to si řídí DMA efektivněj.
Takže v praxi - překódování videa (na GPU je na to víc jader a HW akcelerace), počítání dlouhé řady hashů (věc, kterou na HT opravdu nechceš dělat kvůli bezpečnosti) a podobný opičárny.
Ono hlavně PCIe tak nějak funguje na principu DMA samo, takže k přesunu dat SATA-RAM, Ethernet-RAM nebo Grafika-RAM si CPU vůbec nečuchne, jenom ovladač skrz CPU řekne kartě, co a kam přesunout a ono se to tak nějak stane.
Např. podle SATA specifikace požadavek na čtení dostane adresu ve fyzické RAM, kam ty data doručit.
Proto píšu, že přesuny a I/O operace na CPU už ani nemají smysl.
"Vůbec bych se nedivil, kdyby před lety vývojáři dostali zadání, že klíčový jen výsledný výkon (skóre v benchmarcích) a teoretickými blbostmi, které "nikdy" nenastanou, se nemají zdržovat... "
A já myslel, že varianta "obchodní rozhodnutí maximalizovat výkon a minimalizovat cenu" výměnou za tehdy pouze spekulativní snížení bezpečnosti bylo jako správná hypotéza dávno potvrzeno.
@Unknown
Snahu odsud posoudit nemohu, výsledky však ano. Ukázku dávat nebudu, nebudu tě krmit ...
I když, he, nedá mi to ... nebudeme přece riskovat že umřeš hlady. Takže hned tvůj první příspěvek výše - kdopak nám to sem k článku o poklesu výkonu konstruktivně zatahl na rootu tolik oblíbené [1] a často emotivní [1] téma "politika"?
"Kdyby Linuxaci takhle rychle, jasne a vtipne reagovali i na politicky troly v diskusich pod clankama, tak by to bylo fajn ..."
[Unknown (neregistrovaný) 78.108.102.---, 2018, Včera 10:21]
Widle jsou jako ženská. Ideál je hezká a chytrá panna, ale buďto je ošklivá, nebo blbá, nebo už není panna.
Widle jedou rychle a stabilně, pokud vypneš update. Pak ale nejedou bezpečně, protože mají děr víc jak cedník na těstoviny a ty je nezalepuješ.
Widle jedou bezpečně a rychle, když zapneš automatický update. Pak ale nejsou moc stabilní, přijdeš z oběda a nejenom že systém ukončil programy, ale máš i jinou verzi Widlí a s jiným nastavením.
Widle jedou bezpečně a stabilně, pokud děláš ruční update a ruční nastavování všeho, co ti rozdrbou. Pak je ti rychlost houby platná, protože na hodinu práce potřebuješ tři hodiny tunění...
Ale houby su rychlejsie. Nechce sa mi googlit ale existuje nejaky test kde zistili ze prakticky kazda operacia jadra sa na windows robi niekolko nasobnym mnozstvom instrukcii nez na linux-e. Od spustenia noveho procesu, az po otvorenie suboru a kontroly privilegii. Takze nech robis co robis, na rovnakom zeleze to rychlejsie behat ani nemoze.
Nezabudajme pri tom na to ze mnohe optimalizacie ktore su Linux-e na windows ani neexistuju, filesystemy, memory, threading, ... . Preco asi vsetky superpocitace uz bezia vyhradne na Linuxe (teda myslim okolo 99%) a na samotnom Azure od microsoftu je uz viac ako 50% virtualov Linuxovych. Iste preto ze windows je rychlejsie :-D.
Přesně. Za úspěchem Windows nestojí jejich dokonalost, nýbrž jejich faktická dostupnost za akceptovatelnou cenu a kvalita DOSTAČUJÍCÍ pro požadovaný účel. Nic víc, ale taky nic míň. Anglicky se to řekne "good-enough". A sice to nikdy nikdo nepřizná, ale troufnu si tvrdit že to je jeden z faktických důvodů, proč v EULA Microsoft (ale nejen oni) prohlašují, že neručí za vhodnost ke konkrétnímu účelu. BTW tohle prohlášení je už léta zcela standardní součástí provozní dokumentace prakticky všech západních výrobků a produktů.
Pro drtivou většinu lidí je linux, ač z hlediska principů bezpečnosti lepší, zbytečnej overkill; asi jako kdyby sis kvůli měsíčním nákupům kupoval nákladní vlak nebo kontejnerovou loď.
Přiznám se, že úplně nechápu toho červeňáka. Že linuxové systémy mají (až na naprosté výjimky) distribuční model neslučující se s pozicí mainstreamového desktopového systému, je prostě fakt. Můžete s tím nesouhlasit, můžete si proti tomu protestovat, můžete o tom i diskutovat, ale to je v podstatě všechno, co s tím můžete dělat. Přitom pro drtivou většinu uživatelů není důležitá konkrétní platforma; zajímá je to, aby došli do krámu a řekli / naklikali na eshopu, že chtějí dělat kancelářskou práci, chtějí tisknout / skenovat / hrát xy, a pustit si občas film, a nechtějí kvůli tomu nic studovat, stahovat, stavět, nebo se nedejbože dokonce učit něco, co budou potřebovat jednou při instalaci. Chtějí, aby to bylo pochopitelné a použitelné na první dobrou, a linux jim nenabízí žádnou game-changing výhodu, která by ospravedlnila úsilí navíc, které by na jeho získání museli proti Windows vynaložit. PROTO se proti Windows prosadil iOS a Android, a proto se na školních strojích slušně prosazuje ChromeOS, i když zatím hraje druhé až čtvrté (podle regionu) housle. Linux se na desktopu prosadil v podstatě výhradně na vysokých školách TECHNICKÝCH směrů a ve firmách, kde jej potřebují. Všude jinde jsou to Windows a na uměleckých směrech má významný podíl MacOS.
Tvůj názor ale stojí na předpokladech, že
1) Na widlích nemusí nic vědět a studovat. Jenomže v okamžiku, kdy si připojí mobil, foťák, tiskárnu,.... to začne řvát něco o ovladačích a už musí studovat, co ta hláška "Driver not found" znamená, jak to vyřešit, kde ten ovladač roste,...
2) Že widle fungují bez toho, aby musel uživatel něco řešit. Toto ale neplatí, furt řeší nějaký problémy s updatem, s padáním, se změnama UI pod rukama,...
3) Pokud uživatel dostane dražší a horší řešení, upřednostní je. Proč by to ale dělal, pokud před ním někdo to levnější a lepší řešení nezatají?
4) Že jsou widle použitelný "na první dobrou" po vybalení z krabice. Sorry, ale tam je tolik sr*ček od výrobce, že jediná možnost je sehnat si instalačku widlí a před prvním použitím se vrhnout na disk, smazat včetně systémové partition a čistá instalace. Setnat instalačku Linuxu je o stažení image, sehnat instalačku widlí znamená warez fórum, kontrolu antivirem (nebo raděj třema různýma) a řešit licenci a nějaký registrace u Mrkvošrotu.
To mas sice pravdu (ony se takhle uz par patku daji sosnou i starsi veci, kdyz teda vis ten spravnej a peclive utajenej link...), ale tuhle vec na spoustu specilene "znackovyho" HW vubec nenainstalujes, protoze to proste nejde. Nekdy ti to uz pri instalaci vynada, ze se mas obratit na vyrobce svyho HW aby ti tu instalacku poskyt. A pokud se ti povede to znasilnit, tak to nenabootuje, protoze to nezna CPU, RAM, DISK, ...
Přešel jsem na laptopech a desktopu na OpenBSD. Ten má defaultně HT vypnutý. Měl jsem trochu obavy z výkonu, ale zatím nic nepozoruji.
Jednoduché, smysluplné a bezpečné defaulty. Vše funguje jak má, žádné Lennartovy nesmysly...
Na serverech (soukromých) totéž, OpenBSD vyjma NASu, tam je FreeBSD.
"Společnost Intel radí uživatelům většiny operačních systémů, aby v BIOSu počítače vypnuli podporu technologie HyperThreading u procesorů, které tuto technologii nabízejí."
sprava z 10. září 2004
uz tehdy se to nedoporucovalo pouzivat ... tak na co si to ti lidi stezuji? :-D
ale pro takovou 'hloupost' snizovat vykon procesoru?
(/ironie)
posledni dobou je to opravdu pruser kolem problemu s procesory - soft se jeste jaktz-takz da ohakovat, ale hw?
Nech byt, už jsem řešil i problémy s dotykovým displejem při ESD výbojích pomocí SW. HW řešení a dva měsíce laborování nepomohly. Tak to hodili po mě. Nakonec jsem se naštval, přidal dva řádky do ovladače po Indech a najednou to nemělo problém... :D Jenom chvilku trvalo přijít na to, co ti zmetci pohnojili.
to chces rict, ze indove neco pohnojili?!
tomu neverim ... vzdyt s nima spolupracuji den co den! jsou to naslovovzati odbornici - dokazou slibit vsechno! :-D
BTW: jsem zvedav, kdy a kdo prvne vyda knizku: Moje zazitky s indickym IT
podle mne to bude ta nejprodavanejsi knizka, jaka kdy uzrela svetlo sveta, protoze to bude komedie, drama, sci-fi, detektivka ... a vsechno v jednom ;)
Jo, hnojí furt něco... Teda nevím jak IT, ale vývoj v Indii je jedna velká kontinuální katastrofa.
V tomto konkrétním případě implementovali SPI tak, že hodili při initu SS do nuly a už na to nesahali. Při ESD výboji do touchscreenu komunikace o bit poskočila a už se to nechytlo. Takže to testovali a pokud se jim výsledek nezdál, vypli a zapli napájení touchscreenu. samozřejmě tam někdo musel udělat ovládání toho napájení a další revizi desky.
Jenom tím, že jsem SS hodil do nuly před komunikací a do 1 po komunikaci, odpadla celá ta opičárna s testováním, protože komunikace se prostě restartovala bez řadiče. Daly se odpárat součástky kolem pro vypínání napájení touchscreeny a i pár transilů se ukázalo, že jsou tam už jenom na ozdobu. Takže o $3,5/kus levnější...
Řešit HW problémy v software?
To mi něco připomíná... když bylo potřeba, aby ten krám prošel EMC zkouškami, nařídili nám nezobrazovat žádný chyby, srazit frekvence všeho na minimum, upravit kernel a klíčové drivery tak, že by autoři plakali, do zblbnutí resetovat USB hub, všechna spojení neustále znovu navazovat... a zacvičit obsluhu, aby přesně věděla, co kdy může mačkat...
Ale podařilo se, zkušebna na nic nepřišla a zkouškama to prošlo... :-D
Nebudu jmenovat firmu nebo výrobek, ale prý naši obchodníci slíbili zákazníkovi papír, aniž by se zajímali o to, zda je to vůbec možné. Nevím už rozsah frekvencí, ale výrobek měl fungovat v poli 20KV/m. Zkoušelo se to velikou anténou z metru. Když jsme to zapli poprvé, během čtvrt hodiny nám nařidili to vypnout, protože v okolních kancelářích popadali všechny PCčka a síťaři nechápali co se děje... :-D