Published: 3. 6. 2007   Category: Programming

CPU versus paměť

Mikrobáze 1988/7

Odběratelé měsíčníku BYTE byli obštastněni 13. číslem coby prémií za své celoroční předplatné. Toto zvláštní vydání je takřka cele věnováno problematice IBM PC. Mark L. Van Name se v článku Keeping up with the CPU zabývá komunikací CPU s vnitřní pamětí počítačů:

Všechny inzeráty na počítače s 32-bitovým CPU 80386 vytrubují dvě věci – cenu a rychlost procesoru. Napřed to bylo 16, pak 20, nyní už 25 MHz. Jak se ale můžete přesvědčit pohledem do testovacích tabulek (benchmarks), ne vždy je uváděná rychlost procesoru rozhodující pro výslednou rychlost práce celého systému. Procesory jsou dnes už tak rychlé, že zahlcují systémovou pamět. Proto se její architektura stává jedním z rozhodujících faktorů efektivity využití potence stále rychlejších procesorů.

Dokud procesory běžely tak asi do 10 MHz, bylo vše bez problémů, dynamické ramky jim bohatě stačily. To už ale neplatí. Když máte systém s rychlým procesorem a pamětí, která za ním pokulhává, celý systém na to doplácí. Přehnaně řečeno asi tak, jako kdybyste v počítači s 80386 měli jako pamět jen jednotku floppy. Čekací doba pomalejší paměti RAM samozřejmě není tak velká jako u diskety. Jenže procesor je s ní ve styku prakticky neustále. A tak se také dostává do stavů čekání (wait states) na to, až jej pamět dožene, a bude mu schopna poskytnout potřebná data nebo je naopak přijmout.

Rychlost procesoru

Nejdůležitějším aspektem je doba cyklu (cycle time) procesoru. To je doba, za niž 80386 provede svou nejrychleší instrukci. U 16-MHz 80386 je to 62,5 ns. Tato informace pro samotnou rychlost, s jakou procesor provádí operace, ještě není dostačující. Některé instrukce – jako NOP – provede během jednoho cyklu. Ale jiné mu zaberou dva i více cyklů. Jednoduché operace mezi registry (register-to-register) jako např. CMP (compare, porovnej) a ADD (součet) trvají 2 cykly. Jsou i takové, které spolknou 9 cyklů – třeba MUL (násobení).

Zatím jsme mluvili jen o instrukcích, které si procesor odbyde interně. Jak programátoři vědí, takových instrukcí je v programu menšina. Větší část z nich čte z paměti nebo do ní zapisuje (není bez zajímavosti, že čtení paměti je v programech podstatně víc než zápisů). Instrukce se protahují o dobu přístupu do paměti. Když ADD vyžaduje příjem dat z paměti, trvá 2-6 cyklů v případě, že je výsledek součtu ukládán do registru. Je-li zapisován zpět do paměti, operace už zabere 7 cyklů.

Z toho vyplývá, že celý systém bude plně efektivní jen tehdy, bude-li doba přístupu do paměti harmonizovat s rychlostí procesoru. Pokud bude pamět pomalejší, bude se procesor dostávat do stavů čekání. Každý cyklus, po který procesor jen čeká na pamět – wait state – práci systému zpomaluje. Když reklama hlásá "0 WAIT STATE!", znamená to, že výrobce vyřešil architekturu paměti nabízeného počítače tak, že mikroprocesor může jet (skoro) pořád naplno.

Rychlost paměti

Protože 80386 potřebuje k zaměření se na pamět typicky 2 cykly, znamená to, že by mu pamět měla během nich umět odpovědět – tj. za dobu 2 × 62,5 ns = 125 ns. Takhle to vypadá, že 100-ns DRAM (dynamická RAM) i 120-ns DRAM by mohla být vyhovující. Bohužel není. Uvedené hodnoty uvádějí dobu přístupu (access time), tj. čas, za který je pamětový čip připraven k požadované činnosti. Jenže při každém kontaktu procesoru s pamětí se určitá její adresovaná část občerstvuje (recharge) ještě předtím, než dojde k vlastnímu přenosu dat mezi ní a procesorem. Pro výpočet doby trvání tohoto občerstvení neexistuje jednoduchá formulka. Bývá to obvykle jen o něco méně, než kolik je vlastní doba přístupu. U 100-ns DRAM je to asi 90 ns.

To ale pořád ještě není všechno. Cyklicky, nezávisle na práci mikroprocesoru (ale tak, aby se mu nepletly do cesty), speciální občerstvovací obvody udržují vytrácející se náboje v pamětových buňkách na potřebné úrovni. Tyto občerstvovací (refresh) cykly prodlužují celkovou dobu komunikace o dalších 6 až 12 procent.

Doba cyklu 100-ns DRAM je tedy ve skutečnosti 190 ns plus refresh.

Problém

Když porovnáte rychlost 16-MHz 80386 (125 ns) a 100-ns DRAM (190 ns + refresh), vidíte, že rychlost paměti je nevyhovující. Za tuto diferenci pak budete platit čekacími stavy. U procesorů 20-MHZ a 25-MHz 80386 se efektivita využití jejich schopností ještě zhorší. To je podstata problému, se kterou se potýkají současní tvůrci počítačů s vysokou operační rychlostí. Mohou se dát jednou ze šesti cest – smířit se s pomalejší DRAM, užít rychlejší DRAM, statické RAM (SRAM), nebo se přiklonit k některé ze tří speciálních architektur paměti: prokládané (interleaved, čte se inter-lívd), stránkované (paged, čte se pejdžd) a rychlé vyrovnávací (cache, čte se keš).

Jak na to?

Nejjednodušší je s daným stavem (čekacím) se smířit. Výsledkem je levný produkt, který však nevyhovuje stále náročnějším potřebám současných aplikací.

Použití rychlých pamětí DRAM vede k prudkému vzrůstu ceny systému. Mnohem podstatnější problém je ale v tom, že pro 20-MHz 80386 s cyklem 100 ns a pro 25-MHz 80386 (80 ns) paměti DRAM, které by těmto procesorům stačily, ani neexistují. Když použijeme nejrychlejší dostupné 80-ns DRAM, tak i pro 16-MHz CPU s cyklem 125 ns budou o něco pomalejší – jejich cyklus jde nad 140 ns.

SRAM mají dobu přístupu v podstatě shodnou s dobou cyklu. Srovnáme-li oba typy pamětí se shodnými dobami přístupu, SRAM jsou ve skutečnosti skoro dvakrát rychlejší. Navíc nepotřebují refresh. 100-ns SRAM tedy 16-MHz CPU plně vyhoví (až do rozsahu cca 1 MB). Problém je však v ceně. SRAM jsou mnohem dražší než paměti DRAM. To je důvod, pro který SRAM žádný z předních výrobců počítačů s 80386 nedává do hlavní paměti.

Prokládaná parnět

Podstatou je prokládání (prolínání) doby cyklu v několika mezi sebou přepínaných bankách paměti DRAM. Banky se občerstvují v různých momentech, proto odpadá nutnost občerstvení při každém jednotlivém přístupu procesoru do paměti. Každá banka obsahuje každou N-tou adresu, kde N je počet bank.

V nejjednodušších PC s 80386 jsou banky dvě – v jedné jsou liché, ve druhé sudé adresy. Pokud jde procesor adresami pamětí sekvenčně, vše probíhá bez čekacích stavů. Odskoky s sebou přinášejí 50-procentní pravděpodobnost, že skočí do banky, která bude připravena (a naopak). Když bude program potřebovat přístup postupně do dvou adres, z nichž obě budou v jedné bance, nastane stav čekání. Např. Tandy 400 běží rychleji se dvěma bankami 1 MB paměti než s jednou.

Stránkovaná parnět

Pamět DRAM je rozdělena do stránek (typicky po 2K). Když program běží v jedné stránce, nevznikají čekací stavy. Ty se objeví vždy při přechodu do jiné stránky. Tomu je nutno podřídit programovou strukturu – např. smyčky by měly zásadně být jen uvnitř jedné stránky. Počítač Compaq 386/16 dosáhl s tímto typem paměti hodnoty 0,8 čekacího stavu při použití 100-ns DRAM.

Caching

je architektura přinášející kompromis mezi pamětmi SRAM a DRAM. Cache je rozsahem malá pamět s velmi krátkým cyklem. Současné nejrychlejší systémy s 80386 používají cache 32K nebo 64K s pamětmi 25-ns až 35-ns SRAM. Cache hraje roli určitého bufferu, možno říci i stránky, se kterou je procesor v kontaktu. Kdykoli je třeba provést operace, jejichž instrukce či data jsou uloženy v DRAM, jsou převedeny do cache. Tak se samozřejmě cache velmi rychle zaplní. Pak jde o to rozhodnout, co dát odtud pryč. Nejčastěji se používá metoda LRU (Least Recently Used) – z cache jsou odstraněny instrukce/data, která procesor nepoužil nejdelší dobu. Podobně jako u stránkované paměti, je i zde nutno funkci cache podřídit strukturu programu, abychom se vyhnuli zbytečně častým přenosům mezi DRAM a SRAM.

Efektivita cache je dána dobou, po kterou v ní má procesor, co potřebuje, bez nutnosti obracet se na hlavní pamět. Vyjadřuje se v procentech. Obvod Intel 82385, který řídí pamět cache, slibuje 95 procent, většina předních výrobců nejrychlejších počítačích jej používá. Některé řídící obvody zásadně zapisují do hlavní paměti, i když třeba místo pro zápis je v cache. 82385 je i v tom dokonalejší. Když má objekt zápisu v cache, zapíše do něj bez ztráty času a dokonce mezitím, co se procesor zabývá svými záležitostmi, převede obsah zápisu na určené místo hlavní paměti DRAM za pomoci procesu DMA. Může se ovšem stát, že dojde k DMA zápisu do hlavní paměti, jejíž obsah pak nebude odpovídat obsahu adekvátního místa v cache. Pokud by tuto hodnotu procesor použil, došlo by k nepříjemnostem. 82385 to řeší tak, že kdykoli obvody DMA zapisují do hlavní paměti, zjistí, zda nemá nějaké zrcadlové dvojče v cache. Když ano, patřičné místo v cache označí jako invalidní. Pokud se na ně procesor později zaměří, pozastaví jej, odskočí pro správnou hodnotu do hlavní paměti, svou invalidní opraví a vše může pokračovat.

Jak dál?

Vývoj ukazuje, že paměti SRAM, které by byly největším garantem nulových čekacích stavů rychlých procesorů, nemají pro svou vysokou cenu v počítačích typu PC perspektivu. Uvedené architektury paměti mají své háčky a nezaručují čistý nulový stav čekání. Ze všech uvedených se nejvíc prosazuje pamět cache, pro jejíž řízení jsou vyvíjeny další nové obvody.

Přeložil  –elzet–