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.
No comments:
Post a Comment
**** pre vloženie hypertextového odkazu do komentára použi CSS kód: hyperlink ****