1. 6. 2012

Singel thread >>> multi core

Pentium 66 je rýchlejšie ako rovnako taktovaná i486DX2-66. Dôvodom je superskalárna architektúra pentia, ktoré je schopná v jedno cykle spracovať občas aj 2 inštrukcie, kým 486ka bojuje aj s tou jednou /plus ďaleko výkonnejšia FPU jednotka pentia/. Amiga 500 a Atari ST mali to isté CPU na takmer tom istom kmitočte /7 versus 8Mhz/. Práca s Amiga OS však bola rýchlejšia /efektívnejšia/ vďaka vtedy revolučnému preemptívnemu multitaskingu. Určite si pamätáte staršie AMD, ktoré sa indexovali podľa toho akému výkonu konkurenčného Pentia zodpovedali. Moje obstarožné AMD 3000 by teda malo zvalcovať 3Ghz intel aj keď beží iba na 1800Mhz. Najnovšie Bulldozer AMD Opteron so 16 jadrami však často prehráva s 12 jadrovým Magny Cours od tej istej firmy. A Magny Cours zas s 8 jadrovým Intelom. A čo tým všetkým vlastne do pekla sledujem ? Tož - naše skvelé viacjadrové systémy čo ovládnu svet iba hrubou silou sú mýtus, rozprávka pre deti. Najpodstatnejší je paradoxne ten najviac klasický - singel thread výkon a tam intel absolútne kraľuje.

Axióma - na to aby ste mohli použiť viac jadier v rovnakom čase je nevynutné, aby váš kód bol rozdelený medzi viaceré vlákna /threads/. Opačne to neplatí - viac vláken nepotrebuje nevyhnutne viac jadier !!!

Nechcem vám príliš motať hlavy, na to čo chcem povedať treba aspoň trochu slušnú znalosť Amdahlovho a Gustafsonovho zákonu. Ten prvý exaktne hovorí /dá sa to vypočítať/ od akého počtu jadier váš kód stratí schopnosť ďalšieho zrýchľovania /aký veľký kus platiny treba na to aby ho nedokázalo uniesť ľubovoľné množstvo ľudí za pripevnené držadlo/. Zákon číslo dva hovorí ako obísť Amdahla a obaja dokopy zas, že je singel thread výkon nadradený počtu jadier.

Vlákno /thread/ je vlastne iba sekvencia inštrukcií. Program môže obsahovať niekoľko takých vláken. CPU sa snaží tieto sekvencie-vlákna spracovať čo najrýchlejšie. Nie všetky vlákna jedného programu bežia naraz a rovnako rýchlo, ich výsledok sa však pochopiteľne musí synchronizovať /relevantné vlákna/. Potrebujete teda centrálny metronóm, ktorý sa postará aby sa potrebné výsledky stretli na jednom mieste. Je žiadúce aby sa audio, AI, fyzika alebo grafika zladili v jeden presný moment. Na starej Amige s jej zdanlivým multitaskom ste na to mali operačný systém, ktorý jednu sekundu rozdelil na 1000 milisekúd a tento čas postupne na striedačku prideľoval jednotlivým taskom-úlohám. Teraz pozor. Vlastne to znamená, že nikdy nebežalo viac ako jedno vlákno naraz. Dostali proste svojich 10-20-40 milisekúnd a potom sa OS preplo na inú úlohu /mažete flopáč, počúvate mód, píšete text/ a takto stále dokola ako na kolotoči. Multitasking na amige teda nebol nejaký z neba padlý zázrak, ale iba šikovné rozdeľovanie času /jedna časová osa/ tak rýchlo, že ste si nič nevšimli a pripadalo vám, že to všetko beží naraz. Viac menej identicky pracuje aj vaše moderné PC.



8 jadier, 64 HW vláken - nepriame zvýšenie výkonu znížením latencie /"hotové" vlákna čakajú za "opozdilcami", medzitým systém obsadzuje tie "voľné", nikdy nebežia všetky naraz/

Nie až tak rovnako, heh, funguje PS3 /CELL procesor/. Základ však ostáva - SPE jednotky sú skalárne, single thread jednotky ale zároveň sú aj oveľa rýchlejšie ako centrálne PPE na tej istej rýchlosti s dvoma HW threadmi. Finta je v tom, že SPE sú naozaj extremne rýchle singel thread procesory a tento článok vám chce povedať následovné. Ak teda máte svoj program /hru/ paralelizovaný medzi 2-4-6 jadier na mnohých vláknach a tie sa musia synchronizovať - potom celkový výkon pochopiteľne stojí a padá práve na výkone singel thread výpočetnej jednotky a nie na počte jadier /Amdahl - čím viac jadier tým vyššia závislosť na rýchlosti spracovanie jednej sekvencie/. Na PS3ke sa teda všetci snažia minimalizovať čas behu kódu na SPE, a čo sa dá prehodiť z PPE na SPE. Mimochodom jedna SPE je rýchlejšia ako jedno jadro Xcrapu /opäť bez ohľadu na rovnakú frekvenciu/. No a PS4 má dostať ako CPU AMDčko zo zaprášeného skladu, ktoré práve v tomto /singel thread výkon/ už roky nijako neexceluje na rozdiel od Intelu, takže treba brať budúce počty jadier a threadov s veľkou rezervou /nikdy nejdú všetky jadrá a vlákna na 100% - vždy sa čaká na spracovanie nejakej sekvencie - toho jedného "singel thread" kódu/. Mám pocit, že po CPU stránke nebude PS4 žiadne terno a šprint na 100 metrov skončí s penou v hube a infarktom po 8 sekundách a pred cieľovou páskou.