Měření propustnosti pamětí - STREAM

Pro "pokročilé": Určujícím faktorem výkonu dnešních počítačů je často propustnost pamětí. Jsou to totiž právě paměti, které dnes brzdí rozvoj směrem k vyšším frekvencím. Nejvíce markantní je to u grafických karet, problémem je ale i pomalá systémová paměť. Ke změření efektivní propustnosti systémové RAM napomůže program STREAM.

Spočítat teoretickou propustnost pamětí je velice jednoduché. Stačí k tomu snadno zapamatovatelný vzorec a primitivní matematika:

propustnost = datová šířka * frekvence

Teorie je jedna věc, praxe druhá. Zásadní problém je v tom, že v této propustnosti nejsou zohledněny hodinové cykly, kdy paměť provádí specifické úkoly - obnovuje data, otevírá paměťovou stránku apod. Mezitím se data pochopitelně nečtou (tento problém se dá částečně obejít způsobem zvaným interleaving). Dalším problémem je, že procesor není schopen paměť plně vytížit. Část dat pro své výpočty má totiž uloženou v interní cache a nová data nepotřebuje tak často - paměť jednoduše zahálí.

Paměť dnes velice zpomaluje výkonné systémy
graf rozvoje propustnosti pamětí (modře) a výkonu procesorů (červeně)

Tyto dva faktory způsobí, že praktická propustnost se k té teoretické ani nepřibližuje. V praxi je to obvykle minimálně dvakrát méně než teoreticky, při špatném vyladění systému je to ještě horší.

STREAM

STREAM je syntetický benchmark měřící praktickou propustnost pamětí napsaný Johnem McCalpinem. Jedná se o jednoduchý program v C nebo Fortranu. Je možné si stáhnout i zdrojové kódy... těm jsem porozuměl dokonce i já ;-))).

Streamd
Streamd pro DOS využívá známý "extender" DOS/4GW...

K dispozici jsou čtyři verze

Wstream
Wstream pro Windows 9x / NT

Já jsem vyzkoušel první dvě výše jmenované verze - důrazně doporučuji tu pro Windows. Streamd je dnes již postarší a navíc je Windows verze zajímavá tím, že udává časy potřebné pro provedení operace.

Co program dělá?

Jednoduchou matematiku - přičítání, kopírování... například Streamd a Wstream se od sebe liší množstvím výstupních hodnot (5 vs. 4), v zásadě ovšem provádí totéž:

Copy a(i) = b(i)
Scale a(i) = q*b(i)
Add a(i) = b(i) + c(i)
Triad a(i) = b(i) + q*c(i)

Příjemné je, že program umožňuje nastavení počtu opakování (doporučuji obejít standardní hodnotu a nastavit 400). Značně se tím zvýší přesnost. Na výsledek si ovšem budete muset v některých případech chvíli počkat....

K čemu je to dobré?

Běžnému uživateli k ničemu, zkušenému ladiči se tyto informace budou velice hodit. Správným laděním čipsetu je možné dosáhnout značného nárůstu propustnosti. Program je tyto změny schopen zachytit a zobrazit všechny podstatné údaje - propustnost v MB/s a také časy (u Wstreamu). To je totiž také velice důležité. Dá se tím odhalit třeba to, jestli procesor musí často čekat na vyřízení paměťových požadavků jiných zařízení (AGP, PCI apod.).

Pro názornost uvedu příklad vlivu různých nastavení systému s Celeronem 633 (66,66 MHz x 9,5) a čipovou sadou VIA VT82C694X

Před vyladěním...

Function Rate (MB/s) RMS time Min time Max time
Copy: 189.8007 0.0845 0.0843 0.0866
Scale: 184.1857 0.0871 0.0869 0.0899
Add: 213.3536 0.1127 0.1125 0.1165
Triad: 176.0736 0.1369 0.1363 0.1405

...a po vyladění:

Function Rate (MB/s) RMS time Min time Max time
Copy: 245.2170 0.0656 0.0652 0.0670
Scale: 253.8476 0.0634 0.0630 0.0653
Add: 292.7413 0.0824 0.0820 0.0850
Triad: 221.6045 0.1087 0.1083 0.1150

Jak zvýšit propustnost

V zásadě dvěma způsoby - snížit čekací dobu pamětí, což vyžaduje znalosti nastavení čipové sady a také kvalitní (=značkovou) paměť, nebo koupě rychlejšího procesoru. Ten totiž požaduje nová data častěji, protože ta, co má uloženy v cache, je schopen spočítat v kratším čase. Na druhou stranu je ale rychlejší procesor pomalou pamětí více zpomalován, výkonnostní nárůst s rostoucí frekvencí proto klesá :-(((.

Web "Streamu" je zde.

Eagle

Určitě si přečtěte

Články odjinud