Vyšlo v týdeníku Computerworld č. 51/94 v roce 1994
Vytištěno z adresy: http://www.earchiv.cz/a94/a451c120.php3

Benchmark

Zlé jazyky tvrdí, že na světě existuje mnoho druhů lží: podle kontextu se k nim prý řadí například dlouhodobé předpovědi počasí, diplomatická dementi a nejrůznější oficiální statistky. Také lidé kolem počítačů však mají v této přehlídce svého koně: jsou jím nejrůznější programy pro testování výkonnosti počítačů, v angličtině souhrnně označované jako benchmarks (ev. benchmark programs, benchmark tests). O co vlastně jde?

Touha měřit a porovnávat výkonnost počítačů je tak stará jako historie počítačů samotných. Například již slavný ENIAC z pionýrských dob výpočetní techniky měl být 1000x rychlejší než o něco starší počítač Harvard Mark I, zatímco jeden z prvních komerčních počítačů STRETCH (alias IBM 7030) měl být zase 100x rychlejší než ENIAC. Problém byl ovšem v tom, že nikdo nevěděl, co přesně mělo znamenat ono "100x a 1000x rychlejší". Natož pak aby někdo věděl, jak správně měřit a porovnávat výkonnost počítačů, aby výsledky byly korektní a směrodatné. Tento stav vydržel ve své podstatě až do dnešních dnů. Jen s tím malým rozdílem, že od dob prvních počítačů lidé vyzkoušeli více různých technik a metod měření a porovnávání výkonnosti počítačů, ale každá z nich se nakonec ukázala v něčem diskriminující a zkreslující.

První, co lidi napadlo, bylo spočítat počet instrukcí, které určitý počítač stihne vykonat za určitý časový úsek. V době, kdy provádění různých instrukcí trvalo prakticky stejnou dobu, to bylo možné a vcelku snadné. Jakmile se ale doba provádění jednotlivých instrukcí začala výrazněji diverzifikovat, přestal být takovýto přístup možný a místo něj se přešlo na počítání průměrných dob trvání instrukcí. Ty se vypočítávaly tak, že každé jednotlivé instrukci se přidělila určitá váha (vyjadřující míru její relevantnosti), a z takto ohodnocených instrukcí se pak počítal tzv. vážený průměr. To dalo vzniknout tzv. instrukčním mixům (instruction mix), v rámci kterých se pro ohodnocení jednotlivých instrukcí použila jejich statistická četnost v dostatečně velkém vzorku programů.

Možnost vypočítat průměrnou dobu trvání strojové instrukce umožnila zavést veličinu vyjadřující počet vykonaných instrukcí za jednu sekundu (měřený v milionech). Tato veličina, označovaná jako MIPS (od: Million Instructions Per Second), se ale příliš nehodí pro potřeby porovnávání výkonnosti různých počítačů, tzn. počítačů s různými instrukčními soubory, a tudíž i s různou průměrnou dobou trvání strojové instrukce.

Proto se začalo uvažovat o něčem, co by nebylo bezprostředně závislé na konkrétním souboru instrukcí. Přitom se přišlo na myšlenku vzít program v nějakém vyšším programovacím jazyku (a tudíž nezávislý na konkrétním počítači), spočítat, kolik je v něm aritmetických operací v pohyblivé řádové čárce (které se tak jako tak musí promítnout do vhodných strojových instrukcí), a potom měřit, kolik z těchto operací dokáže konkrétní počítač provést za jednotku času. Tím se došlo k veličině označované příhodně jako MFLOPS (Million Floating Point Operations Per Second). Ani ona však nedokázala dostatečně věrně postihnout výpočetní schopnosti počítače, který kromě počítání v pohyblivé řádové čárce dělá i jiné věci. Navíc se brzy zjistilo, že ani v pohyblivé řádové čárce si všechny počítače nejsou rovny: například superpočítač CRAY-2 vůbec nemá strojovou instrukci pro dělení v pohyblivé řádové čárce, zatímco například koprocesor Motorola 68882 má strojové instrukce i pro sinus, kosinus apod. Nemluvě již o tom, že různé počítače používají různé formáty čísel v pohyblivé řádové čárce a že doba provádění příslušných instrukcí na tomto formátu samozřejmě také závisí.

Jestliže tedy umělé omezení jen na operace v pohyblivé řádové čárce nevedlo k žádoucím výsledkům, samotná myšlenka vyjádřit testovací program ve vyšším programovacím jazyku, nezávislém na konkrétním počítači, se ukázala velmi rozumnou. Zcela zákonitě se proto objevily takové uměle vytvořené testovací ("benchmark") programy, psané ve vyšším programovacím jazyku, které se snažily postihnout co možná nejširší škálu činností (operací) a přitom být přenosné na co možná nejvíce různých počítačů (kde je stačí jen přeložit příslušným překladačem).

Jedním z takovýchto programů je program Whetstone, který vznikl na základě analýzy programů pro vědecko-technické a inženýrské výpočty v Algolu (ve kterém byl také původně napsán, ale posléze byl přeložen do Fortranu). Jiným obdobným testovacím programem ("benchmark" programem) je program Dhrystone, který si více všímá vlastností a chování systémových programů. Původně byl napsán v jazyku ADA, později byl přepsán do jazyka C.

Výkonnost počítačů se s pomocí těchto syntetických (tj. uměle vytvořených) testovacích programů vyjadřuje v počtu iterací příslušného programu, které daný počítač zvládne za sekundu (výkonnost se měří např. v jednotkách "Whetstone za sekundu"). Problém je ovšem v tom, že ani takovéto syntetické testovací programy nemohou být dokonale věrným a směrodatným měřítkem výkonnosti konkrétních počítačů při provádění reálných aplikací - jsou jen určitou abstrakcí reálných programů, navíc nutně zjednodušenou. Kromě toho skýtají i dost velký prostor výrobcům, kteří chtějí své zákazníky podvádět: jelikož jsou tyto testy pevně dány (a všem známy), může výrobce optimalizovat svůj výrobek tak, aby v příslušném testu vyhověl co možná nejlépe (zatímco na provádění "normálních" aplikací takováto optimalizace nebude mít žádný vliv). Jsou například známy i konkrétní překladače, které poznají, že překládají příslušný benchmarkový program, a vygenerují předem připravený a optimalizovaný kód, který pak poskytuje výsledky lepší až o desítky procent.

Dá se vůbec zabránit tomu, aby alespoň do budoucna nebyly testovací programy pro měření a srovnávání výkonnosti počítačů (benchmarkové programy) jen jednou velkou lží, ale aby spravedlivě a směrodatně vypovídaly o tom, jak je který počítač výkonný a rychlý? Dokonalý benchmark dost možná nebude nikdy existovat, ale celkový trend v této oblasti spěje k postupnému zmenšování míry nevěrohodnosti benchmarkových programů. Významným krokem na této cestě je zakládání různých sdružení, která usilují o další vývoj a sjednocení metodiky hodnocení a porovnávání výkonnosti počítačů. Jedním z nejreprezentativnějších je sdružení SPEC (System Performance Evaluation Cooperative), které bylo založeno v roce 1988 předními světovými výrobci počítačů a které již také vypracovalo několik vlastních benchmarkových programů (označovaných podle data svého vzniku jako SPEC89, SPEC92).<<>>