Nahoru
 

Vyplatí se zrychlit Software nebo Hardware?

Možná jste v nějakém programátorském sitcomu zaslechli softwarového programátora nadávat na pomalý hardware. Také jste mohli slyšet opak, tedy „hardweráře“ nadávat na neefektivně napsaný program. Kdo z nich (a případně kdy) má pravdu?

Vezměme si ukázkovou situaci, kde dostaneme velice neefektivní program i archivní počítač. Program slouží k vyhledávání jmen v databázi. Jmen je tam však miliarda, což není málo. Programu to trvá neskutečně dlouho, než na pomalém počítači nalezne požadované jméno. V nejhorším případě si musíme počkat až 100 minut. Porovnejme, co se stane, pokud vylepšíme program nebo počítač.

Vylepšení hardwaru

Místo toho, abychom se vrtali ve složitém kódu na to půjdeme jednoduše. Koupíme lepší počítač a výkonnější díly. Tato sestava s levným procesorem a průměrnou pamětí nás stála 20.000 Kč. Pojďme pro 2× efektivnější soustavu. Bohužel, cena dílů nestoupá lineárně, tedy 2× větší rychlost nás nestojí 40.000 Kč, ale zhruba 60.000Kč. Dokázali jsme tedy vyhledat jméno za 50 minut, což není moc velké zlepšení.

Pojďme se vydat ještě dále. Kupme 10× efektivnější sestavu. To nás bude stát miliony. Doba čekání s novou „nadupanou“ sestavou spadla na 10 minut. Nové součástky však potřebují obrovské množství energie i místa. Je jasně vidět, že tato cesta nemusí být nejlepší. Pojďme se podívat, co se stane, když vylepšíme program.

Počítač
Obrázek č. 1: Hardware stojí obrovské peníze. Jak koupě, tak údržba.

Vylepšení Softwaru

Nechme počítač takový, jaký je a začněme se vrtat ve zdrojovém kódu. Vidíme, že algoritmus pro vyhledávání máme lineární. Porovnává tedy každičkou položku zvlášť (miliardu položek). Díky svému hardwaru můžeme učinit přibližně 167 000 porovnání za vteřinu, a proto to trvá celých 100 minut.

Kdybychom však uložená data uchovávali ve vyváženém binárním stromu, pak by vyhledávání nebylo lineární, ale logaritmické (více o složitosti algoritmů můžete zjistit ve článku Jak se určuje efektivita algoritmu). To znamená, že bychom k nalezení jednoho z miliardy prvků potřebovali pouhých 30 porovnání! Tak drastické snížení počtu porovnání změní vyhledávací čas na 0,00018 sekund (neboli 0,18 milisekund).

Podobné softwarové vylepšení by zabralo maximálně pár hodin. Pokud vezmeme extrémní poplatek 2000 Kč za programovací hodinu, tak v nejhorším případě utratíme 10.000 Kč.

Kód
Obrázek č. 2: Dobře vymyšlená software zrychlí program nespočetněkrát.

Novější hardware rychlost vylepší, avšak zdaleka ne tak, jako efektivní a chytrý software

Pokud tedy zefektivníme software, tak nejenom že to stojí daleko méně peněz bez žádné údržby navíc, ale dosáhli jsme naprosto úžasných výsledků. Takovou rychlost bychom s konvenčním hardwarem nemohli dosáhnout. Můžeme tedy s jistotou říci, že zrychlit software se vyplatí mnohonásobně více nežli hardware.