reklama
Aktuality  |  Články  |  Recenze
Doporučení  |  Diskuze
Grafické karty a hry  |  Procesory
Storage a RAM
Monitory  |  Ostatní
Akumulátory, EV
Robotika, AI
Průzkum vesmíru
Digimanie  |  TV Freak  |  Svět mobilně

Semprony proti Athlonům - souboj levných s drahými

19.9.2005, Eagle , recenze
Semprony proti Athlonům - souboj levných s drahými
Levné procesory Sempron v nižší cenové kategorii sekundují dražším kolegům Athlonům 64. Oproti nim mají menší velikost paměti cache a zároveň nemají tak rychlé paměti. Jsou toto rozdíly, které ospravedlňují téměř padesátiprocentní cenovou prémii za Athlon 64 ? Podíval jsem se na to, jak si vedou oba typy levných čipů se 128 a 256kB L2 cache proti dražším modelům s 512kB či 1MB a dual-channel DDR400.
Jak jsme si již řekli, hlavním rozdílem mezi Semprony a Athlony 64 (a Opteronem) je rozdílná velikost L2 cache. V diskuzích se hodně objevují názory ohledně toho, jaká velikost je ta optimální. Někteří tvrdí, že rozdíly jsou zanedbatelné, někteří naopak preferují cache co největší. Pro pochopení významu pojmu cache si ale nejdříve musíme vysvětlit, o co že to vlastně jde.

SRAM vs. DRAM

V počítači se standardně používají dva typy pamětí - SRAM (Static Random Access Memory) a DRAM (Dynamic Random Access Memory). Tyto se od sebe zásadně liší. Druhý jmenovaný typ se používá pro dnes běžně používané DIMM moduly s technologií DDR SDRAM (Double Data Rate Synchronized Dynamic Random Access Memory).



Typický příklad pamětí DRAM

Paměť typu DRAM se vyznačuje poměrně vysokou hustotou záznamu, je s ní možné levně vyrobit velká množství kapacity. Na druhou stranu je také vcelku pomalá. Data v ní uložená se musí čas od času obnovovat, protože jinak vyprchají. Toto obnovování pak znemožní jakoukoli operaci - tedy čtení či zápis. Navíc rychlost vyhledávání není u DRAM nijak vysoká. Naopak paměť typu SRAM je velmi rychlá - žádné obnovovací cykly se u ní nekonají. Jenže je také velmi drahá a neskladná.


Výrobní vzorek 9MB SRAM čipu obsahujícího půl miliardy transistorů
(doposud neprodávaná 65nm technologie)

Zatímco 512MB DIMM modul sestavený z čipů DRAM koupíte v obchodě za cca. dva tisíce Kč, pouze 9MB SRAM čip vyžaduje již půl miliardy transistorů, což je natolik nákladné, že se takové čipy komerčně nevyrábí. Proč se tedy SRAM používá? Některá zařízení totiž potřebují obrovskou rychlost. Mezi tato zařízení patří i procesor.

Co je cache

Procesory dnes operují na frekvencích více než 2 GHz a jsou často schopny každý hodinový cyklus (... kterých má 2 GHz procesor za vteřinu dvě miliardy) spočítat hned několik instrukcí. K těmto instrukcím jsou zapotřebí data. Dnes typická paměť typu DDR400 operuje na pouze 200 MHz. Rychlost, s jakou je schopná dodávat data, začíná u jednoho hodinového cyklu a končí u desítek. Když vezmeme v úvahu, že této modelové situaci je jeden hodinový cyklus paměti roven deseti cyklům procesoru (frekvence procesoru je totiž desetinásobná), a ještě přičteme nějaké to zpoždění zapříčiněné řadičem pamětí a případně sběrnicí FSB, zjistíme, že načtení dat z modulu DIMM trvá běžně stovky hodinových cyklů procesoru:



Screenshot z latency testu na Athlonu 64. Po překročení datové velikosti 64kB se zvýší latence z 3 cyklů na cca. 12 až 15. A po překročení 512kB se zvýší až na 80 (vliv DRAM).

Těch cyklů, při nichž procesor nic nedělá, protože musí čekat. A to není optimální. Pomalosti pamětí DRAM si vývojáři všimli již před desítkami let, a tak se do procesoru přidává paměť typu SRAM, která se nazývá cache (vyrovnávací paměť). Tato paměť je mnohem rychlejší. Typicky pracuje na stejné frekvenci jako zbytek procesoru, navíc má ale přístupovou dobu v řádu běžně 2 až 20 cyklů - je tedy cca. 10x až 100x rychlejší než paměťový modul DIMM.

Některé z vás možná napadne, že nač taková paměť je, když její velikost je značně limitována - a opravdu, dnešní procesory mají od 128 kB do 2 MB cache, tedy zhruba 1000x méně, než kolik je v počítači paměti DRAM. Vtip je v tom, že procesor nepřistupuje k celé dostupné velikosti najednou, ale často provádí obrovské množství výpočtů se stále jedněmi daty. Většina výpočtů probíhá na opravdu malém množství dat, protože ty se neustále přepisují výsledky. Tak například operace (A + B) * (C + D) vyžaduje nejprve spočtení dvou součtů. Ze začátku jsou zapotřebí čtyři údaje, k nimž přibudou další dva (výsledky). Jenže čtyři plus dva nerovná se šest, nýbrž dva. Původní hodnoty A, B, C, D totiž zahodíme a ponecháme si pouze ony výsledky. Stejně tak kdybychom měli operaci (A + 2) * B, budeme opět potřebovat pouze dvoje data - původní A se nahradí hodnotou A + 2. V cache se tak v podstatě stále vyměňují čísla, ale málokdy je potřeba, aby tato SRAM paměť byla přehnaně veliká.


Některé z vás jistě napadlo, že první příklad s výpočtem nemusí být pravdivý, pokud není vhodně naprogramován. Konkrétně jistě máte na mysli rozdíl mezi následujícími zápisy:

int main() {

int A, B, C, D;
A=A + B;
C=C + D;

return A*C;
}
int main() {

int A, B, C, D, vysledek1, vysledek2;
vysledek1=A + B;
vysledek2=C + D;

return vysledek1*vysledek2;
}

V příkladu uvedeném napravo máme šest proměnných, vlevo čtyři. Jak je tedy možné, aby byly v cache zabrány pouze dvě proměnné a navíc oba zápisy byly z hlediska požadavků na kapacitu zcela identické? Zde si musíme uvědomit, jak cache pracuje.



Cache totiž není přídavnou úložnou kapacitou, ale jakýmsi zrcadlem. Pokud máte 512MB paměti DRAM a k tomu procesor s 1MB cache, pak celková úložná kapacita je 512 a nikoli 513MB. Když se data načítají do cache, zároveň zůstávají v paměti. Data jsou tak najednou uložena dvakrát - vše v paměti DRAM a něco málo okopírováno také v SRAM. Procesor pracuje pouze s cache, přímo s DRAM nikdy. Instrukce, které něco počítají, načítají potřebná data z cache a ukládají své výsledky také do cache. Protože vypočtením výsledku se rozhodí shodnost obsahů cache a DRAM, jsou výsledky postupně zapisovány do DRAM. Samotná cache je pak ovládána řadičem, který je nezávislý na výpočetní části. Z procesoru dostává neustále požadavky na načítání dat z paměti a ukládání výsledků do paměti. Řadič tyto požadavky plní, nicméně při čtení se setkává s tím, že již nemá kam nové hodnoty uložit, protože cache je již plná. Proto sleduje využití jednotlivých částí cache, a rozhoduje, která data z ní vyhodí. Obvykle se využívá metody, kdy se vyhazují ta data, ke kterým se nejdelší dobu nepřistupovalo. V příkladech výše proto v levém vyhodí proměnné B a D, zatímco v tom pravém vyhodí A, B, C, D. Obsazená velikost v cache tak bude v obou případech stejná - dvě proměnné. Naopak ale velikost v DRAM bude v příkladu vpravo o dvě proměnné větší.


Z popisu již možná vyplynula jedna důležitá věc - cache není o výkonu, ale o plynulosti. Základními faktory užitečnosti cache je její rychlost a velikost. Rychlost neboli její zpoždění (latence) ovlivňuje, kolik cyklů bude procesor čekat na dodání dat přímo z cache. Čím nižší číslo, tím lepší. Protože většina výpočtů pracuje s maličkým množstvím dat, mají dnešní procesory několik úrovní cache.

    • Level 1 (L1) je malá v řádu 16 až 128 kB a zároveň rychlá (latence 2 až 4 cykly). Slouží pro uskladnění těch nejčastěji používaných dat.
    • Level 2 (L2) je větší v řádu 128 kB až 2 MB a zároveň středně rychlá (latence 10 až 20 cyklů). Tato paměť slouží k uskladnění dat, s kterými se sice nepracuje tak často, ale zároveň dostatečně často na to, aby se vyplatilo je nečíst z DRAM.

Rychlost cache vždy ovlivňuje výkon a je to jeden z nejdůležitějších prvků v designu procesoru.

Druhý faktor - velikost - pak ovlivňuje, kolik dat je možné zrcadlit. Čím více, tím lépe. Problémem bohužel je, že čím větší cache je, tím pomalejší musí být - vyhledávání ve větším množství údajů trvá déle. L1 cache je vždy malá, protože je navržena tak, aby vyhověla operacím s malým množstvím dat, o to však intenzivnějším. U L1 cache tak spíše hraje roli rychlost než velikost, protože druhý jmenovaný faktor je pro jeden výpočet téměř ve všech případech dostačující. U L2 cache již situace není tak jednoznačná - jednak zde musí být kapacita pro možnost zrcadlení velkého množství dat z DRAM, zároveň ale musí tato cache být schopná dodávat data směrem do L1 cache dostatečně rychle na to, aby se nebrzdily výpočty.

Jak hledět na výkon


Protože již víme, že cache sama o sobě výkon nezvyšuje, nýbrž zabraňuje jeho poklesům, musíme také patřičně zacházet s výsledky testů. Je nutné si uvědomit, že existují cca. tři typy programů:

    1. Ty, které se bez problémů vejdou i do těch nejmenších cache - u takových programů nemá procesor s velikou cache žádný smysl. Typicky se jedná o některé typy intenzivních vědeckých výpočtů, například známá šifra RC5.
    2. Ty, které pracují se středně velkými datovými bloky a u nichž se větší velikost cache projeví menší četností přístupu do DRAM, tj. vyšším výkonem.
    3. Ty, které zpracovávají obrovská množství dat průtokovým způsobem. Tedy tak, že data jsou načtena z paměti, je na nich provedena jednoduchá operace a ve velkém množství se změněná vrací zpět. U takovýchto programů má velikost cache podřadnou roli, protože výkon je bržděn především rychlostí pamětí DRAM.

Jinými slovy v mnoha případech vyjde, že procesory s malou a velkou cache podávají zcela identický výkon. Jsou ale i situace, kdy procesor s dvojnásobnou cache může podávat desetinásobný výkon. Ilustruje to test Linpack:


Graf znázorňuje, jak se mění celkový výkon s rostoucí velikostí zpracovávaných dat. Na vodorovné ose je zobrazena velikost bloku dat, s kterou se právě pracuje. Na svislé ose pak dosažený výkon. Z křivky je možné vysledovat závislosti výkonu na velikosti zpracovávaného bloku a také to, jak výkon ovlivňuje rozdělení cache do úrovní L1 a L2 a také rychlost přístupu k pamětem.

Porovnávány jsou čtyři procesory se téměř stejnými parametry - všechny mají frekvenci přesně 2 GHz a všechny mají datovou L1 cache o velikosti 64 kB. Dále se ale liší velikostí L2 cache a přístupem do paměti. Semprony mají pouze jednokanálový DDR400 řadič a 128 (3300+) či 256 (3400+) kB L2 cache. Naproti tomu Athlon 64 3200+ a Opteron 146 mají dvoukanálový přístup a 512 kB, resp. 1 MB L2 cache. Nejvyššího výkonu je u všech procesorů dosahováno při datové velikosti odpovídající L1 cache - ta je, jak již bylo zmíněno, rychlá (zde rychlost tři cykly), a nebrzdí tak výpočty. Jakmile se ale velikost dostane do takových rozměrů, že již musí být použita L2 cache, výkon se propadne. Přestože latence L2 cache je u těchto procesorů 12 cyklů, propad činí pouze asi 20%. To je dáno tím, že rychlá L1 cache stále mluví do hry. Velikost L2 cache je ale jasně cítit a to je právě onen moment, kdy se procesory výkonem liší.

Všimněte si, že při práci pouze s pamětí DRAM klesá výkon Sempronů na 35 procent špičkové hodnoty. U Athlonů 64 a Opteronu je to cca. 45 procent. To je poměrně tragický výsledek, stále však vynikají. V těchto situacích je procesor vytížen pouze třetinu až polovinu toho, čeho je jinak schopen. Čím menší cache má, tím dříve se do této situace dostane. Takovéto situace mohou nastat v případech, kdy máme nějaký program, který vyžaduje velké bloky dat, nebo když máme spuštěno více programů, které vyžadují větší bloky dat. Čím pomalejší paměť DRAM, tím je dopad horší - nezáleží jen na její absolutní rychlosti, ale také na poměru frekvence DRAM k frekvenci procesoru. V zcela extrémní situaci by procesor pracující na 2.8 GHz mohl být naprosto stejně rychlý jako procesor pracující na 1.8 GHz (neuvažuji teď to, že se s vyšší frekvencí také zrychluje paměťový řadič).

Při porovnávání výkonu v závislosti na velikosti L2 cache si musíme uvědomit ještě jednu věc - průměrné hodnoty nejsou úplně to pravé. Týká se to především her. V nich požadujeme, aby scéna probíhala plynule, tj. aby počet snímků za vteřinu neklesnul pod řekněme 25 (tolik zhruba umí lidské oko rozeznat). Když máme počet snímků za vteřinu menší, hra trhá a to je nepříjemné, protože to kazí celý dojem. Více než maximální či průměrný počet snímků za vteřinu nás zajímá počet minimální. Bohužel většina her udává počet průměrný. Problém si ilustrujme na příkladu. Pokud budeme mít konstantní hodnotu 25 snímků za vteřinu, i průměr bude 25. Když ale budeme mít v 90% případů 25 a ve zbylých 10% pouze 5, jaký bude výsledek? 0.9 * 25 + 0.1 * 5 = 23 snímků za vteřinu. Jak vidíte, oněch 10% způsobí pokles průměru o pouze 8%. Jenže z logiky věci vychází, že hra, která bude v deseti procentech případů chodit pouze 5 snímků za vteřinu, bude nehratelná. Na Internetu již proběhlo mnoho testů, z nichž měl čtenář možnost se dozvědět, že rozdíl v rychlosti mezi třeba 256kB a 1MB cache je pár procent. Přesně z tohoto důvodu jsem provedl testování her za pomocí prográmku FRAPS, který loguje počet snímků za vteřinu právě každou vteřinu.

reklama