Aktuality  |  Články  |  Recenze
Doporučení  |  Diskuze
Grafické karty a hry  |  Procesory
Storage a RAM
Monitory  |  Ostatní
Akumulátory, EV
Robotika, AI
Průzkum vesmíru
Digimanie  |  TV Freak  |  Svět mobilně
13.3.2007, Milan Šurkala, aktualita
IBM Cell je procesor, který se doposud vyráběl 90nm technologií a je používán v serverech IBM BladeCenter a herních konzolích Sony PlayStation 3. Tato konzole je oproti konkurenční konzoli Xbox 360 dosti drahá, její ceny se pohybují až kolem...
jafpu | 13.3.200716:12
SSE jsou 128­-mi bitové? Možná jsem jen něco nepochopil, nebo si pletu dojmi, ale měl jsem pocit, že jediný x86 procesor schopný provádět 128­-mi bitové operace je Core 2 Duo ­(a chystaná Barcelona od AMD­). Všechny ostatní CPU provádí SIMD výpočty jen 64bitově. Jinak řečeno, na výpočet prováděný na čtyř­-složkovém vektoru potřebují dva takty. Právě před uvedením Core 2 Duo na trh, se v marketnigovém hype tohle často přetřásalo. I drtivé výkony Core 2 Duo v teoretických benchmarcích ­(Sisoft Sandra­) tomu nasvědčovali.
Není těch registrů tolik kvůli očesané architektuře jader typu SPU v Cellu? Pokud se nemýlím, nepodporují tyto jednotky v HW ty optimalizační fiňáry typu predikce, branching a tak dále. Pak je možná výhodné jich mít tolik, aby se v nich dalo skladovat kde co a nedocházelo k drsným prodlevám, než se samotné jednotce podaří z RAMky vydolovat potřebná data, nebo odhadnout správně větvení.
Ale stále nechápu, jak ty vektorové SIMD výpočty procesory vlastně provádí. Proč má SIMD v x86 tolik instrukcí, teď už jich asi bude hodně přes 100 ­(SSE4 jich prý bude mít asi 50­), kdežto o Cellu, nebo shaderech v GPU se vždycky jen píše, že mají například 4D ­(nebo třebo 128bitovou­) vektorovou jednotku a tím to pro ně hasne. K čemu tam ty instrukce jsou? Těch 50 nových instrukcí SSE4 dokáže vektorově zpracovat i něco, co ty předchozí ne? Nebo i ty vektorové jednotky jako VMX mají podobné instrukce a jen se o tom nepíše ­(tedy alespoň na běžných servrech­)?
Pardon za asi příliš laické otázky, které budou zasvěceným připadat trapné.
Odpovědět0  0
Milan Šurkala (4985) | 13.3.200716:59
SSE jsou 128­-bitove, maji sirku 128 bitu, vlozite do nich 2 64­-bitove promenne, nebo 4 32­-bitove, az 16 8­-bitovych. Core 2 Duo pokud je mi znamo, dokaze v kazdem taktu dokoncit jednu SSE operaci, kdezto jine procesory na to potrebuji minimalne takty dva. Jak je to v Cellu netusim, o to jsem se prilis nezajimal.

Vypocty SIMD zkusim vysvetlit treba na vypoctu ja nevim, ceny s DPH pro vsechny polozky v databazi. Mate 1000 vyrobku, ktere maji cenu bez DPH a vy potrebujete spocitat pro vsechny cenu s DPH. Normalne byste udelali takto: vezmete prvni polozku, vynasobite to 1,19 a mate vysledek, vezmete druhou polozku, vynasobite 1,19 a mate dalsi vysledek. Pro kazde spocitani ­(dejme tomu ze databazi zde mame ve forme klasickeho pole­[­]­) potrebujeme nacist jednu hodnotu, vynasobit a ulozit vysledek, tedy 3×1000 operaci = 3000 operaci.
SIMD instrukce umozni nahrat do SSE registru treba 8 hodnot, vsechny na jeden zatah vynasobit cislem 1,19 a opet na jeden zatah ulozit. Dostanete tedy 3×1000­/8 operaci, tedy 375 operaci, samozrejme musite pocitat s tim, ze treba nacteni osmi hodnot do SSE registru trva trochu dele nez nacteni hodnoty jedne do standardniho registru, nicmene je to stale casove uspornejsi nez nacteni osmi hodnot zvlast.

Proc je instrukci tolik? Je to pomerne jednoduche, vezmete si jednoduche scitani. Jen to muzete u SSE pouzit v sesti pripadech, na scitani celociselnych 8­-bitovch, 16­-bitovych, 32­-bitovych, 64­-bitovych promennych a desetinnych 32­-bitovych a 64­-bitovych. To mate hned sest instrukci vzhledem k datovym typum, ktere do nich vstupuji. Dale existuji tri typy scitani, s kontrolou preteceni, nez kontroly a este jedno ­(ted presne nevim, myslim, ze je to neco s bezeznamenkovym scitanim­). Muze­-li byt v registru cislo 0­-255, pak mame­-li tam cislo 250 a pricteme cislo 10, tak s kotrolou preteceni dostaneme 255, bez kontrly dostaneme cislo 5. Takze to mate hned dalsi 3 moznosti, celkem uz 6×3 = 18 moznosti jen pro jednoduche scitani. Ted si vezmete odcitani, nasobeni a deleni, mate 54 instrukci.
Dale zde mate pakovaci instrukce, ktere rozhodi data opet po bytech ­(8b­), slovech ­(16b­), dvojslovech ­(32b­) nebo ctyrslovech ­(64b­) do registru ci je naopak slozi zpatky, mnoho porovnavacich instrukci ­(opet pro nejruznejsi datove typy­), instrukce pro presun mezi registry, registry a pameti ­(ty mohou byt klasicke MOVQ, MOVD u MMX nebo zarovnane MOVDGA nebo nezarovnane MOVDQU u SSE. Nesmim zapomenou na logicke funkce OR? XOR, samozrjme v jejich SSE verzi POR PXOR, PAND,... a funkce bitoveho posunu. A to jsem zminil jen zakladni typy instrukci u MMX, SSE pridava dalsi silenosti, ktere snad ani nejdou vyuzit. SSE3 konecne prinas nekolik horizontalnich operaci, nektere jsou i v SSE2, napriklad secteni dvou cisel a vynasobeni, ci tak nejak. Proste je toho hodne pro vsechny mozne moznosti datovych typu a stale mi nektere instrukce chybi.
Odpovědět0  0
Huiii | 13.3.200717:06
SSE registry jsou skutecne 128b. To, ze nektere operace trvaji vic nez jeden takt s tim vubec nesouvisi. Je vyhodnejsi mit vice registru, protoze i rychla cache ma latence, kdezto data z registru jsou pristupna hned ­(ale ma to i sve nevyhody, jako vsechno­). Jine architektury nex x86 pouzivaji vice registu uz dlouho. Instrukci je i ve VMX ­(aka Altivec­) spousta ­(podle http:­/­/www.freescale.com­/webapp­/sps­/site­/overview.jsp?nodeId=0162468rH3bTdGmKqW5Nf2hG12 je jich 162­).

Vcelku vsechno co pisete je pravda, jen ne zcela dobre vstrebana ;­-­)
Odpovědět0  0
x_R | 13.3.200717:39
1. SIMD u CPU jsou 128­-bitové z pohledu software. Hardwarová implementace se liší a právě Core2 je první architektura schopná spočítat celý vektor v jednom taktu ­(efektivně­). Po HW stránce neexistuje nějaká SSE jednotka, ale všechny SSE isntrukce se provádí ­(alespoň u AMD­) v FPU jednotce.
Odpovědět0  0
x_R | 13.3.200717:40
2. CELL má 8 nezávislých specializovaných vektorových jednotek.
Odpovědět0  0
x_R | 13.3.200717:44
3. ERROR ...
Odpovědět0  0
x_R | 13.3.200717:45
4. SSE umožnuje přímý přístup do paměti, kdežto jiné sady pracují jen s registry ­(kromě speciálních instrukcí­).
5. Jiné architektury jsou od začátku navrženy jako vektorové s dlouhými pipelines a co nejefektivněji navrženou instrukční sadu . SSE instrukce jsou naroubované do x86 a sdílejí všechny její nevýhody. To ale neznamená, že musí být nutně pomalé.
Odpovědět0  0
x_R | 13.3.200717:47
Instrukční sada u MMX­/SSE je taková divná, protože instrukce odpovídají spíš tomu, co v dané době daný CPU byl schopen udělat nebo některý SW potřeboval.
Odpovědět0  0
x_R | 13.3.200717:50
3. Instrukční sada u MMX­/SSE je taková divná, protože instrukce odpovídají spíš tomu, co v dané době daný CPU byl schopen udělat nebo některý SW potřeboval. Další důvody množství instrukcí jsou ty, že jsou ­(postupně­) podporovány formáty INT8­-INT32 a FP32­-FP64 + všemožné konverze.
Odpovědět0  0
x_R | 13.3.200717:52
a taky hlavně v omezení na 2 operandy ­- v3echny GPU a ostatní vektorové sady používají flexibilní 3­-operandový systém a často ­(GPU­) i volný swizzle a maskování zápisu
Odpovědět0  0
jafpu | 13.3.200719:20
Dík, zajímavé informace, dost věcí mi to objasnilo. Naskýtá se ještě otázka, jak je to s kvalitou samotné Altivec a x86 SIMD instrukcí. Trochu jsem hledal na netu a skoro bych nabyl dojmu, že SIMD instrukce v x86 CPU jsou naprosto ubohé. Možná jsem měl jen smůlu a narazil pouze na fandovské stránky Applistů, kteří dlouhou používali procesory Power ­(nebo co to bylo­) od IBM a nemaj rádi x86. Nicméně našel jsem i nějaké benchmarky a podle všeho se zdá, že Altivec je mnohem lepší. Nevím jestli za to může samotná sada SIMD, nebo zastaralá architektura x86, která si s sebou táhne ocelovou kouli kompatibility. Zdá se, že tomu zde plno lidí rozumí. Co je podle vás kvalitnější ­(jestli se to dá porovnívat­)? VMX v procácích IBM ­(a asi i jiných­), nebo instrukce MMX až SSE3 ­(nebo i SSSE3 ­- což je snad ta sada v Core 2 Duo­)?
Odpovědět0  0
jafpu | 13.3.200714:24
Měl bych jeden dotaz, jenž se této novinky až tak moc netýká, ale snad mi to bude prominuto. Neví někdo jaký je rozdíl mezi vektorovýmí jednotkami, například těmi co obsahuje Cell, a instrukcemi SSE 1 až 4 v procesorech AMD a Intelu? Obojí by mělo zvládnout vykonat více výpočtů najednou ­(respektive provést s více daty jednu stejnou operaci­). Nechápu, proč Intel každou ­"chvíli­" přichází s novými instrikcemi ­(MMX a SSE1 až 4­), kdežto vektorové jednotky v Cellu ­(nebo v shaderech GPU­) tu prostě jednou jsou a tím to končí. Tedy, jaký je rozdíl mezi napříkald vektorovou jednotkou v Cellu a SIMD jednotkama v x68 c CPU?
Vím, že to asi není uplně vhodná ozázka pod tuto novinku, ale občas jsem zde viděl diskutoval lidi, kteří do toho dost vidí. Pokoušel jsem se o tom něco najít na netu, ale nic kloudného jsem neobjevil. Předem dík za případné odpovědi.
Odpovědět0  0
Milan Šurkala (4985) | 13.3.200715:10
MMX jednotky jsou 64­-bitové jednotky, kde můžete dát 1x 64­-bitovou, 2x32­-bitove, 4x16­-bitove ci 8x8­-bitovych promennych. SSE umoznuje totez, akorat ma 128­-bitu, takze se jich tam vejde dvakrat tolik. SSE navic podporuje i desetinna cisla, zatimco MMX pouze celociselna. Celkem je v procesoru 8 registru MMX ­(namapovany na registry ST, ktere se pouzivaji pro desetinne vypocty, proto nelze kombinovat MMX kod a x87 kod s desetinnymi cisly­) a 8 vlastnich 128­-bitovych registru SSE ­(XMM0­-XMM7­). Procesory AMD Athlon 64 v 64­-bitovem rezimu maji aktivnich 16 SSE registru XMM0­-XMM15, jak je tomu u Pentii a Core 2 Duo, netusim.

Vektorove jednotky v PowerPC jsou znamy napriklad pod nazvem Altivec, Velocity Engine nebo VMX. To plati pro prvni generaci techto jednotek, novejsi procesory jako IBM Cell maji VMX128, tedy druhou generaci, ktera castecne z puvodniho Altivecu vychazi. Prvni generace mela 32 techto 128­-bitovych registru, VMX128 jich ma dokonce 128. Zatim mi neni jasne, proc jich je tolik, ja osobne jsem si jakz takz vystacil s osmi XMM registry a pokud mi nekdy chybely, tak takovych 12 registru celkem by to spravilo. VMX podporuje specialni RGB pixel datovy typ a oproti SSE podporuje podstatne vice horizontalnich operaci, ktere Intel ve vetsim pridal az do SSE3, AMD uz je melo v prvnim 3DNow!
Odpovědět0  0
olsen. | 14.3.20071:51
No, co se týče altivec­/vmx, tak tato jednotka je obsažena v centrálním ­(řídícím­) powerPC jádře Cellu. Mám ale podezření, že jafpu myslel ty SPE v Cellu ­- těch 8 dalších jednotek.

Četl jsem, že tyto vektorové ­(asi­) procesory jsou Turingovsky kompletní, takže zvládnou jakýkoli úkol ­- s jediným omezením ­- musí být inicializovány powerPC jádrem ­(PPE­). Jinak je ještě otázka, jestli nejsou optimalizovány na někollik málo instrukcí, a další nevykonávají s velkou výkonostní ztrátou, každopádně jsou ale ­- podle toho, co jsem četl ­- univerzální.

Jinak jsem toho k tomu, co je ten Cell vlastně zač a co umí, taky moc nenašel.
Odpovědět0  0
Tom 007 | 14.3.20078:35
Nesmis verit vsemu co ctes :­) Tezko rict co si predstavit pod tim ze ze ­"jsou Turingovsky kompletni­" ale pokud by to jako melo znamenat ze jsou ekvivalentni Turingovu stroji tak pak zrejme nevis co to vlastne Turinguv stroj je :­) Mimochodem ani ten Turinguv nedokaze resit vsechny problemy a to se jedna o matematicky nejsilnejsi prostredek reseni problemu, takze asi tak.

SPE jsou proste velmi hloupe ­(ackoliv pomerne vykonne­) in­-order pracujici jednotky. Takze treba FFT nebo DCT zvladnou pocitat dobre, ale predhodis jim treba A* algoritmus nebo neco podobneho z AI a zjistis ze vykon jde dolu narozdil od komplexnejsich procesoru typu x86.
Odpovědět0  0
Zajímá Vás tato diskuze? Začněte ji sledovat a když přibude nový komentář, pošleme Vám e-mail.
 
Nový komentář k článku
Pro přidání komentáře se přihlaste (vpravo nahoře). Pokud nemáte profil, zaregistrujte se pro využívání dalších funkcí.