VyÜlo v t²denφku: COMPUTERWORLD
╚φslo:51/94
RoΦnφk:1994
Rubrika/kategorie: Co (ne)najdete ve slovnφku

zp∞t do archivu Φlßnk∙ | rejst°φk | p°edchozφ Φlßnek | nßsledujφcφ Φlßnek

Ji°φ Peterka

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).<<>>


zp∞t do archivu Φlßnk∙ | rejst°φk | p°edchozφ Φlßnek | nßsledujφcφ Φlßnek
Tento Φlßnek m∙₧e b²t voln∞ Üφ°en, pokud se tak d∞je pro studijnφ ·Φely, na nev²d∞leΦnΘm zßklad∞ a se zachovßnφm tohoto dov∞tku. Podrobnosti hledejte zde, resp. na adrese http://archiv.czech.net/copyleft.htm