VyÜlo v t²denφku: COMPUTERWORLD
╚φslo:6/94
RoΦnφk:1994
Rubrika/kategorie: TΘma t²dne

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

Ji°φ Peterka

..a₧ do dneÜnφch dnφ

Tento Φlßnek vyÜel v tzv. tΘmatu t²dne v CW 6/94, jako t°etφ ze sΘrie Φlßnk∙ v∞novanΘ prvopoΦßtk∙m v²poΦetnφ techniky.

Na v²voji von Neumannovy architektury je zajφmavΘ i to, ₧e k nejv∞tÜφmu poΦtu jejφch vylepÜenφ doÜlo pom∞rn∞ brzy po jejφm vzniku (zhruba do roku 1960). PotΘ nßsledovalo urΦitΘ obdobφ "klidu", a teprve pozd∞ji, v souvislosti s v²vojem v oblasti polovodiΦov²ch a jin²ch technologiφ, se zase objevujφ dalÜφ zajφmavß vylepÜenφ p∙vodnφ von Neumannovy architektury.

ProudovΘ zpracovßnφ (pipelining)

Ve snaze co mo₧nß nejvφce zv²Üit v²poΦetnφ v²kon sv²ch procesor∙, zaΦali v²robci hledat nejr∙zn∞jÜφ cesty, cestiΦky, novΘ myÜlenky, ale takΘ skrytΘ rezervy. A prßv∞ zde se ukßzalo, ₧e je mo₧nΘ jeÜt∞ mnohΘ vylepÜit, a souΦasn∞ s tφm i mnohΘ zφskat.

Jednφm ze zajφmav²ch pozorovßnφ bylo, ₧e provßd∞nφ jednotliv²ch strojov²ch instrukcφ probφhß v urΦit²ch fßzφch: nejprve musφ dojφt k naΦtenφ instrukce z operaΦnφ pam∞ti, pak k jejφmu dek≤dovßnφ, p°φprav∞ jejφch operand∙, pak m∙₧e nßsledovat v²konnß fßze (kterß teprve d∞lß "to", co mß strojovß instrukce vykonat u₧iteΦnΘho), naΦe₧ m∙₧e jeÜt∞ nßsledovat fßze uklßdßnφ cφlov²ch operand∙ (v²sledk∙). KonkrΘtnφ poΦet fßzφ p°itom nenφ p°φliÜ podstatn² (navφc je na ka₧dΘm poΦφtaΦi r∙zn²). Podstatnß je spφÜe skuteΦnost, ₧e r∙znΘ fßze obvykle provßdφ r∙znΘ Φßsti procesoru. JednotlivΘ fßze jednΘ a tΘ₧e instrukce p°itom na sebe sekvenΦn∞ navazujφ - to ale souΦasn∞ znamenß, ₧e v ka₧dΘm okam₧iku se u₧iteΦnΘ Φinnosti v∞nuje jen jedna v vφce Φßstφ procesoru, zatφmco ty ostatnφ ne·Φeln∞ zahßlφ! No a to p°eci nebylo mo₧nΘ nechat jen tak!

Jak ale trvale vytφ₧it vÜechny Φßsti procesoru? Provßd∞t soub∞₧n∞ vφce r∙zn²ch fßzφ jednΘ a tΘ₧e instrukce nenφ dost dob°e mo₧nΘ, proto₧e tyto na sebe p°φΦinn∞ navazujφ: nenφ nap°φklad mo₧nΘ souΦasn∞ naΦφtat instrukci z pam∞ti, a souΦasn∞ s tφm i zapisovat n∞kam v²sledek jejφho provedenφ. Tv∙rci poΦφtaΦ∙ ovÜem p°iÜli na zajφmavΘ °eÜenφ: nemohou-li souΦasn∞ provßd∞nΘ fßze pat°it jednΘ a tΘ₧e instrukci, a¥ pat°φ r∙zn²m instrukcφm!

Tato myÜlenka znamenß, ₧e v procesoru se v ka₧dΘm okam₧iku bude nachßzet vφce strojov²ch instrukcφ v r∙znΘm stßdiu rozpracovanosti. Nap°φklad: souΦasn∞ s v²konnou fßzφ jednΘ instrukce se budou p°ipravovat operandy nßsledujφcφ instrukce, a souΦasn∞ s tφm bude z pam∞ti naΦφtßna jeÜt∞ jedna dalÜφ instrukce. Provßd∞nφ jednotliv²ch instrukcφ se tak bude v Φase p°ekr²vat. Doba, pot°ebnß k provedenφ jednΘ strojovΘ instrukce, se tφm sice v∙bec nezkrßtφ, ale za jednotku Φasu bude dokonΦeno n∞kolikanßsobn∞ vφc strojov²ch instrukcφ (tolikrßt vφc, kolik instrukcφ se bude najednou p°ekr²vat). Narß₧φ to sice na n∞kterΘ zajφmavΘ problΘmy (jak se zachovat v p°φpad∞ skok∙, volßnφ apod.), ale ty se dajφ uspokojiv∞ °eÜit. V²sledn² efekt, kter² prßv∞ naznaΦen² mechanismus proudovΘho zpracovßnφ (pipelining) nabφzφ, za jejich p°ekonßnφ urΦit∞ stojφ. Sv∞dΦφ o tom i skuteΦnost, ₧e tento mechanismus je v n∞jakΘ podob∞ implementovßn snad v ka₧dΘm dneÜnφm procesoru (resp. mikroprocesoru).

Samotnß myÜlenka p°ekr²vßnφ instrukcφ v procesoru (tj. proudovΘho zpracovßnφ) je relativn∞ starΘho data. PoprvΘ byl tento mechanismus pou₧it ji₧ v 60. letech, v poΦφtaΦφch UNIVAC a IBM 7030-STRETCH.

Vyrovnßvacφ pam∞¥ (pam∞¥ cache)

Prvotnφ motivacφ pro implementaci virtußlnφ pam∞ti bylo p°edstφrßnφ v∞tÜφ operaΦnφ pam∞ti, ne₧ jakß je doopravdy k dispozici (doplnit odkaz na Φlßnek: Od von Neumanna ...). Tφm se poda°ilo vyjφt vst°φc u₧ivatel∙m, volajφcφm po v∞tÜφ pam∞ti, a uspokojit jejich po₧adavky s ·nosn²mi nßklady.

OvÜem ne nadarmo se °φkß, ₧e s jφdlem roste chu¥. Kdy₧ u₧ivatelΘ dostali k dispozici dostateΦn∞ velkΘ objemy operaΦnφ pam∞ti (i kdy₧ jen p°edstφranΘ), zaΦali po₧adovat stßle rychlejÜφ a rychlejÜφ poΦφtaΦe. Jejich po₧adavky byly do znaΦnΘ mφry motivovßny pokroky ve v²rob∞ procesor∙, kterΘ zaΦaly b²t opravdu velmi rychlΘ. Tak rychlΘ, ₧e jim nßhle p°estala staΦit operaΦnφ pam∞¥ (ta reßln∞ existujφcφ), a rychl² procesor se musel p°izp∙sobovat jejφ rychlosti (Φi spφÜe pomalosti). DostateΦn∞ rychlß pam∞¥ v tΘ dob∞ sice takΘ ji₧ existovala, ale v po₧adovanΘm objemu stßle jeÜt∞ vychßzela p°φliÜ drahß. A tak se znovu opakovala situace, kterß zhruba deset let d°φve vedla ke vzniku virtußlnφ pam∞ti, jen s pon∞kud pozm∞n∞nou motivacφ: bylo pot°eba vymyslet n∞jak² trik, kter² by dokßzal p°edstφrat v∞tÜφ rychlost operaΦnφ pam∞ti.

Pot°ebn² trik se kupodivu nemusel hledat dlouho - staΦilo pouze oprßÜit tutΘ₧ myÜlenku, kterß stojφ za principem virtußlnφ pam∞ti: obsah tΘ Φßsti operaΦnφ pam∞ti, se kterou prßv∞ probφhajφcφ program pracuje, se p°esune "blφ₧e k procesoru", do tzv. vyrovnßvacφ pam∞ti (tΘ₧: pam∞ti cache), kterß bude umφst∞na mezi procesorem a operaΦnφ pam∞tφ, bude v²razn∞ menÜφ ne₧ operaΦnφ pam∞¥, ale dφky tomu zase bude moci b²t v²razn∞ rychlejÜφ. Jakmile pak prßv∞ probφhajφcφ program vyslovφ n∞jak² po₧adavek na p°φstup do operaΦnφ pam∞ti, budou se p°φsluÜnß data hledat nejprve v tΘto malΘ a rychlΘ vyrovnßvacφ pam∞ti, a teprve v p°φpad∞ ne·sp∞chu se bude "sahat" a₧ do skuteΦnΘ operaΦnφ pam∞ti.

Tento vcelku jednoduch² trik, kter² byl poprvΘ pou₧it v roce 1968 v poΦφtaΦi IBM 360/85, dokßzal pravΘ zßzraky. Jako p°φklad je Φasto citovßn poΦφtaΦ IBM 370/165 z roku 1971, kter² m∞l feritovou operaΦnφ pam∞¥ o kapacit∞ 1 MB a dobou cyklu 2 mikrosekundy, a byl vybaven polovodiΦovou vyrovnßvacφ pam∞tφ o kapacit∞ 16 kB, s p°φstupovou dobou 80 ns. V²sledn² efekt tohoto uspo°ßdßnφ byl nßsledujφcφ: z pohledu procesoru a probφhajφcφho programu se rychlost operaΦnφ pam∞ti zv²Üila 8 a₧ 10x (dφky tomu, ₧e v 70 a₧ 90% p°φpad∙ se po₧adovanß data naÜla ji₧ v rychlΘ vyrovnßvacφ pam∞ti). P°itom nßklady na po°φzenφ rychlΘ vyrovnßvacφ pam∞ti p°edstavovaly jen cca 10% nßklad∙, kterΘ by musely b²t vynalo₧eny na po°φzenφ stejn∞ rychlΘ operaΦnφ pam∞ti.

Mechanismus vyrovnßvacφch pam∞tφ (pam∞tφ cache) vznikl a slavil velkΘ ·sp∞chy v dob∞, kdy sv∞tu vlßdly prßv∞ feritovΘ pam∞ti, kterΘ byly pom∞rn∞ pomalΘ, a rychlejÜφ polovodiΦovΘ pam∞ti byly jeÜt∞ velmi drahΘ. Cena polovodiΦov²ch pam∞tφ vÜak rychle klesala, a tak tento druh pam∞tφ zßhy zcela vytlaΦil p∙vodnφ feritovΘ pam∞ti. S tφm ovÜem do znaΦnΘ mφry odezn∞la i motivace, kterΘ vd∞Φφ za sv∙j vznik myÜlenka vyrovnßvacφch pam∞tφ.

Vyrovnßvacφ pam∞ti vÜak nezmizely v propadliÜti d∞jin. Na svou renesanci si ovÜem musely chvφli poΦkat - do doby, ne₧ rychlost procesor∙ znovu vzrostla natolik, ₧e p°edb∞hla mo₧nosti polovodiΦov²ch pam∞tφ. Pak p°iÜly znovu ke slovu vyrovnßvacφ pam∞ti, kterΘ se nynφ zaΦaly st∞hovat takΘ a₧ do samotn²ch procesor∙ (jako tzv. internφ cache pam∞ti)

PoΦφtaΦe s redukovan²m souborem instrukcφ (architektura RISC)

V²robci velmi dlouhou dobu zastßvali nßzor, ₧e Φφm vφce r∙zn²ch instrukcφ dokß₧φ "nap∞chovat" do sv²ch procesor∙, tφm lΘpe. Mysleli si, ₧e u₧ivatelΘ (resp. ti, kte°φ pφÜφ programy), dokß₧φ pln∞ vyu₧φt vÜech schopnostφ pou₧φvan²ch procesor∙. A tak neustßle p°idßvali novΘ a stßle komplikovan∞jÜφ strojovΘ instrukce, vym²Üleli novΘ a stßle slo₧it∞jÜφ zp∙soby adresovßnφ, a jejich procesory se v d∙sledku toho stßvaly stßle slo₧it∞jÜφmi a slo₧it∞jÜφmi.

P°edpoklad v²robc∙ mohl snad b²t oprßvn∞n² v dob∞, kdy se programy psaly pouze v asembleru, a mohly se tak "Üφt na mφru" konkrΘtnφm procesor∙m. OvÜem v dob∞ vyÜÜφch programovacφch jazyk∙ je tomu jinak. Jak ukßzaly rozsßhlΘ testy velkΘho vzorku program∙, nejvφce pou₧φvßna je jen malß skupina pom∞rn∞ jednoduch²ch instrukcφ, zatφmco ostatnφ, relativn∞ slo₧it∞jÜφ instrukce, jsou pou₧φvßny jen velmi mßlo, a ty nejslo₧it∞jÜφ nejsou pou₧φvßny prakticky v∙bec.

SamotnΘ v²sledky tohoto pozorovßnφ by jeÜt∞ nemusely b²t argumentem proti procesor∙m s bohat²m repertoßrem strojov²ch instrukcφ. SkuteΦnost, ₧e mßm k dispozici bohatΘ prost°edky, mne nenutφ je pou₧φvat vÜechny, a naopak mi nebrßnφ vyu₧φvat jen jejich malou Φßst. Celß v∞c mß ale jeden technick² hßΦek: procesor, kter² musφ "pamatovat" na mnoho komplikovan²ch instrukcφ, je nutn∞ znaΦn∞ slo₧it² (vΦetn∞ svΘho °adiΦe), a tudφ₧ i pomal². Rozhodn∞ pomalejÜφ, ne₧ jak² m∙₧e b²t takov² procesor, kter² mß jen mßlo strojov²ch instrukcφ, a navφc velmi jednoduch²ch.

No a prßv∞ tomuto pozorovßnφ vd∞Φφ za sv∙j vznik architektura RISC, co₧ je zkratka od anglickΘho: Reduced Instruction Set Computer, neboli: poΦφtaΦ s redukovan²m souborem instrukcφ. Je protip≤lem k tendenci vybavovat procesory co nejvφce instrukcemi (architektu°e CISC, od: Complex Instruction Set Computer, neboli: poΦφtaΦ s ·pln²m souborem instrukcφ), a hlßsß zcela opaΦnou zßsadu: vybavit procesor jen mal²m repertoßrem jednoduch²ch a maximßln∞ rychl²ch strojov²ch instrukcφ.

Prvnφ poΦφtaΦem, jeho₧ procesor vychßzel z architektury RISC, byl minipoΦφtaΦ IBM 801 z roku 1980. Od tΘ doby se objevila celß °ada RISC-ov²ch procesor∙ od nejr∙zn∞jÜφch v²robc∙, a celß °ada poΦφtaΦ∙, pou₧φvajφcφch procesory s touto architekturou (nap°φklad v lednu roku 1986 p°edstavila firma IBM sv∙j RT PC, neboli osobnφ poΦφtaΦ PC na bßzi procesoru RISC).

V²hody architektury RISC oproti architektu°e CISC jsou nespornΘ. Otev°enou otßzkou, o kterΘ by bylo mo₧nΘ dlouho polemizovat, je ovÜem mφra t∞chto v²hod, zvlßÜt∞ pak s uvß₧enφm technologick²ch mo₧nostφ, kterΘ umo₧≥ujφ zrychlovat i procesory s bohat²mi instrukΦnφmi soubory. Pravdou je, ₧e RISC-ovΘ procesory dosud nevytlaΦily svΘ CISC-ovΘ konkurenty, a nic takΘ p°φliÜ nenasv∞dΦuje tomu, ₧e by se tak v blφzkΘ dob∞ m∞lo stßt.


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