Více jader neznamená, že je počítač výkonnější

Fakt výběru procesoru s více jádry se často nepromítá do zvýšení výkonu ve stejné míře při používání určitých programů. Proč k tomuto jevu dochází a jaké jsou tedy jeho příčiny? Vysvětlujeme vám to podrobně.

Jedním z důvodů, proč časem používat novější verze programů, je to, že jsou navrženy tak, aby lépe využívaly procesory s vyšším počtem jader. Nezapomínejme, že s postupem času se počet těchto v CPU zvyšuje. Proč se však výkon v programech nezvyšuje na stejné úrovni?

Více jader neznamená, že je počítač výkonnější

Programy se nikdy neškálují podle počtu jader

Je důležité vzít v úvahu, že programy, které jsou spouštěny, nemají schopnost rozdělit své aktivní procesy nebo úkoly v daném okamžiku podle počtu spouštěcích vláken, která máme v našem procesor. Více než cokoli kvůli tomu, že toto rozdělení je explicitní v programovém kódu, to znamená, že je výsledkem dovednosti programátora a designu aplikace.

Ve skutečnosti není při kódování programu důležité jej optimalizovat za účelem použití co největšího počtu jader, ale spíše kvůli latenci. To druhé chápeme jako čas, který procesor potřebuje k dokončení úkolu měřený v jednotkách času. A výkon CPU spočívá v dokončení většiny úkolů v co nejkratším čase. To bude záviset nejprve na vaší architektuře a na rychlosti hodin.

Co nás však zajímá ohledně latence, je vědět, kolik úkolů dokáže dokončit za dané období, což je pracovní zátěž a ta bude záviset na situaci a způsobu, jakým byly programy napsány. Jinými slovy, výkon nezávisí pouze na hardwaru, ale také na tom, jak dobře nebo špatně byl software napsán.

Futuro Procesadores Render

Dělba práce v několika jádrech

Nyní, když zvýšíme počet jader v systému, bude možné práci rozdělit na kousky a dokončit ji mnohem snadněji. Zde přichází na řadu vzorec T/N, kde T je počet úkolů, které je třeba provést, a N je počet spouštěcích vláken, které může systém provést. Je zřejmé, že bychom mohli načíst maximální počet úloh na několik jader a brutálně je přinutit je opravit. Problém je, že toto opatření je kontraproduktivní, protože zvýhodňuje nejmodernější CPU, které mají vyšší výkon individuálně na každém jádru.

Multihilo Nucleos

Rozdělení práce mezi různá jádra je však další práce, která je obvykle svěřena jádru, které funguje jako vodič a musí plnit následující úkoly:

  • Musíte vytvářet procesy a seznamy úkolů a mít je neustále pod kontrolou.
  • Musí vědět, jak vždy předvídat, kdy úkol začíná a končí, včetně času, který zabere dokončení jednoho a zahájení dalšího.
  • Různá jádra musí mít schopnost vysílat signál do hlavního jádra, aby věděla, kdy proces začíná a končí.

Toto řešení bylo přijato společnostmi SONY, Toshiba a IBM v Cell Broadband Engine, centrálním procesoru PS3, kde hlavní jádro mělo na starosti řízení zbytku. I když mnohem dále zpět to bylo adoptováno Atari Jaguar. Pro PS4 SONY tento model znovu nezopakovala a nikdo ho na PC neimplementoval, protože je to noční můra, nicméně je to nejefektivnější způsob, jak si rozdělit práci.

Ne vše může běžet na více jádrech

Pokud se sami sebe zeptáme, zda můžeme rozdělit jakýkoli úkol na dílčí úkoly, abychom je mohli nekonečně rozkládat ve větším počtu jader, odpověď zní ne. Konkrétně musíme úkoly rozdělit do tří různých typů:

  • Ty, které lze zcela paralelizovat, a tedy rozdělit mezi různá jádra, která má centrální procesor.
  • Úkoly, které lze spouštět částečně paralelně.
  • Části kódu, které nelze provádět paralelně.

V prvním případě je T/N aplikováno na 100 %, ve druhém případě již vstupujeme do tzv. Amdahlova zákona, kde je zrychlení v důsledku zvýšení počtu jader částečné a ve třetím případě jednoduše potřebujeme všechny výkon jednoho jádra pro tento úkol,

Co odlišuje CPU od GPU v multithreadingu

Zde se dostáváme k rozdílnému bodu, každý GPU nebo grafický čip má řídicí jednotku, která je zodpovědná za čtení seznamů příkazů a jejich distribuci mezi různá jádra GPU a dokonce i mezi různé jednotky. Toto je implementace na hardwarové úrovni předchozího případu a funguje perfektně v jakékoli konfiguraci, kde se chcete nasytit, pokud existuje práce, a tedy zaměstnávat co nejvíce jader. Musíme však pochopit, že koncepční vlákno provádění v GPU vždy odpovídá odpovídajícím datům a jejich seznamu instrukcí. Tedy pixel, vertex nebo jakákoliv data.

CPU GPU

Díky tomu je lze snadno paralelizovat. To znamená, že pokud bychom chtěli smažit vejce, proces v CPU by byl smažit vejce, což by bylo zcela sekvenční. Na druhou stranu v grafickém čipu by bylo úkolem jednoduše zahřát olej nebo přidat do pánve vejce. To vše by neurychlilo smažení jednoho vejce, ale několika, a proto jsou GPU lepší pro úkoly, jako je výpočet milionů polygonů nebo pixelů současně, ale ne pro sekvenční úkoly.