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ě

Ladíme výkon Athlonu 64

27.7.2005, Eagle , článek
Ladíme výkon Athlonu 64
Procesor Athlon 64 má řadu možností nastavení časování pamětí. Řada z nich je ovšem nedokumentovaná (podporované jsou neoficiálně). Dnes si ukážeme, jak měnit nastavení pamětí za chodu z operačního systému - včetně oněch nedokumentovaných nastavení jako například změny frekvence na 180 MHz. Mimo to si také povíme, jak zjistit maximální přípustnou teplotu čipu (TCaseMax).
Generování frekvence pamětí u Athlonu 64

Frekvence pamětí se u procesorů Athlon 64 odvozuje z frekvence jádra. Samotné jádro se frekvenčně odvozuje z 200 MHz hodin pocházejících z externího clock generátoru ze základní desky. Typicky třeba Athlon 64 3000+ s frekvencí 1.8 GHz násobí 200 MHz 9x.


Protože AMD chtělo maximální výkon, není paměť časována z clock generátoru, ale dělením frekvence jádra. Samotný procesor má takto mnoho dělících poměrů od zhruba 5x do čísel větších než 30x. Základním nedostatkem tohoto systému je, že dělící poměry jsou vždy celočíselné. To znamená, že výsledná frekvence ne vždy odpovídá použitým pamětem. Tak například u procesoru s frekvencí 1800 MHz (9x 200) se pro čtyři základní podporované paměťové skupiny použijí následující dělící koeficienty:

DDR200 (reálná frekvence 100 MHz): 1800 / 18x = 100 MHz
DDR266 (reálná frekvence 133 MHz): 1800 / 14x = 129 MHz
DDR333 (reálná frekvence 166 MHz): 1800 / 11x = 164 MHz
DDR400 (reálná frekvence 200 MHz): 1800 / 9x = 200 MHz

Jak vidíte, ne vždy se výsledek přesně trefí. V případě volby DDR266 pojedou paměti ve skutečnosti na frekvenci o 5 MHz nižší, než by měly - výsledek tedy není DDR266, ale "DDR257". U volby DDR333 pak bude výsledkem "DDR327".

Tento problém se týká všech procesorů, ale liší se podle použitého násobiče frekvence jádra. Pokud třeba budeme mít nominální frekvenci 2000 MHz (10x 200), pak použité dělitele budou jiné:


DDR200 (reálná frekvence 100 MHz): 2000 / 20x = 100 MHz
DDR266 (reálná frekvence 133 MHz): 2000 / 15x = 133 MHz
DDR333 (reálná frekvence 166 MHz): 2000 / 12x = 166 MHz
DDR400 (reálná frekvence 200 MHz): 2000 / 10x = 200 MHz

Jak vidíte, s násobičem 10x je možné přesně vystihnout cílové frekvence. Pokud ale bude 11x, pak už dojde opět k rozhození. Procesor vždy volí takový dělící koeficient, aby výsledná frekvence pamětí byla co nejblíže cílové hodnotě, ale nikdy ne vyšší (takže z dvou dělitelů vždy volí ten vyšší).


CPU-Z si frekvenci pamětí dopočítává podle nastavení procesoru - nezjišťuje jí reálně!

Pozor na to, že žádný program vám spolehlivě nedokáže zjistit, na jaké skutečné frekvenci paměti běží. Procesor to totiž nikde nehlásí, takže neexistuje způsob, jak tuto informaci získat. Všechny programy, pokud nějakou hodnotu zobrazují, jí dopočítávají stejnou metodikou, kterou jsem uvedl výše - bohužel ale často v těchto programech jsou takové chyby, že není vůbec radno se na ně spoléhat.

Poznámka: Pokud se vlivem přetaktování změní frekvence z generátoru z 200 MHz na jinou hodnotu, použité dělitele se nezmění. V podstatě tak vyšší frekvence z generátoru způsobí i vyšší frekvenci paměti. Pomocí jednoduché matematiky uvedené výše je pak možné snadno dopočítat, na jaké konkrétní frekvenci paměti poběží.

Nastavování frekvence pamětí

Frekvence pamětí se nastavuje v Device 24, Function 2, Offset 94h (DRAM Configuration High Register).


U revizí D0 a starších slouží k nastavení frekvence bity 22 až 20. AMD v tomto registru popisuje pouze nastavení pro čtyři frekvence - 100, 133, 166 a 200 MHz. Protože se ale jedná o tři bity, je celkový počet nastavení osm. Některé frekvence jsou totiž neoficiální. Jejich funkčnost nikdo nezaručuje, ale obvykle to funguje bez problémů. Některé základní desky (například DFI) dokonce umožňují tyto neoficiální frekvence volit přímo v Setupu BIOSu.


Bity 22, 21 a 20 obsahují nedokumentovaná nastavení.

Experimentováním a benchmarkingováním jsem zjistil, že hodnoty bitů jsou následující:

Nastavení bitů [22:20]
Výsledná frekvence pamětí v MHz
Cílová frekvence za ideálních podmínek v MHz
Skóre ve WinRARu
Propustnost podle Sandry
000
100
100
332
3009
001
120
125*
373
3567
010
129
133
389
3827
011
138
142*
406
4114
100
150
155*
430
4420
101
164
166
457
4660
110
180
183*
479
4839
111
200
200
500
5048

* Uvedené hodnoty nejsou oficiálně podporované, jedná se o moje odhady.

Takto to dopadlo u Athlonu 64 3000+. K uvedeným frekvencím jsem dospěl na základě regresní analýzy metodou nejmenších čtverců.


Přestože uvedené hodnoty nemůžu stanovit přesně (model vykazuje spolehlivost jen kolem 99 procent, což je na tak drobné odchylky málo), alespoň velmi orientačně s přesností na řekněme +/- 3 MHz je lze označit za správné. Na modelu je ostatně vidět, že při 95% spolehlivosti jsou intervaly konfidence poměrně úzké.

Revize E procesorů procesorů Athlon 64 mají novinky v podobě nastavování frekvence pomocí více bitů. Namísto bitů 22 až 20 jsou použity bity 23 až 20. Celkový počet nastavení je tak ještě o mnoho vyšší. Experimentem jsem zjistil, že nastavení 1000 odpovídá frekvenci 200 MHz, tedy je stejné jako nastavení 0111. Bohužel moje paměti nejsou schopny zvládnout o mnoho vyšší frekvence než právě DDR400, takže nejsem schopen zjistit, které nové cílové hodnoty jsou u těchto nových procesorů dostupné. Pokud někdo ze čtenářů má možnost zjistit, jaké frekvence to jsou, nechť mě kontaktuje.

Read Preamble (bity 11 až 8)

    • 0000 = 2 ns
    • 0001 = 2.5 ns
    • 0010 = 3 ns
    • ...
    • 1111 = 9.5 ns
- Jedná se o nastavení v závislosti na počtu DIMM slotů a frekvenci. Určuje, kdy se mají zapnout přijímače DQS (Data and memory strobe). Vyšší frekvence vyžadují rychlejší nastavení, jinak se systém stane velmi nestabilním. Na druhou stranu příliš rychlé nastavení nemusí řadič zvládat. Doporučené nastavení:


- Rozhodující je počet fyzicky přítomných DIMM slotů, ne počet osazených modulů.

Revize E a novější - OddDivisorCorrect

Athlony 64 v revizích E (tedy E3, E4 a E6) podporují také další nastavení nazvané OddDivisorCorrect. Jedná se jednobitový přepínač, který donutí procesor změnit dělitele tak, že eliminuje liché. Nastavuje se ve stejném registru jako frekvence, onen bit je číslo 31. Jednička znamená eliminaci lichých dělitelů, nula pak jejich zachování. Standardní nastavení je nula.



OddDivisorCorrect se nachází v bitu 31

Při zapnutí se pak tedy frekvence pamětí nedělí lichým číslem, ale pouze sudým vyšším. Následuje příklad z procesoru Athlon 64 3000+ (1800 MHz):

Nastavení bitů [22:20]
OddDivisorCorrect = 0
OddDivisorCorrect = 1
Výsledná frekvence pamětí v MHz
Použitý dělitel
Výsledná frekvence pamětí v MHz
Použitý dělitel
000
100
18x
100
18x
001
120
15x
112
16x
010
129
14x
129
14x
011
138
13x
129
14x
100
150
12x
150
12x
101
164
11x
150
12x
110
180
10x
180
10x
111
200
9x
180
10x

Jak vidíte, nějaký veliký přínos to nemá. V podstatě to jen umožňuje nastavit oficiální cestou to, co se jinak dá nastavit nedokumentovanou kombinací bitů. Mimo to to u 3000+ nabízí jeden dělitel navíc - konkrétně 16x. V některých případech se ale mohou nové možnosti hodit.