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

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 pro DOS využívá známý "extender" DOS/4GW...
K dispozici jsou čtyři verze

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