# Athlon64 Overclocking Optimizer

#### Do you have a question? Post it now! No Registration Necessary.  Now with pictures!

•  Subject
• Author
• Posted on

Hey I made a tool to help find the best multipliers and dividers for
your maximum cpu, memory and htt speeds.

http://math.gogar.com/athlon64.cgi

It should even do half multipliers and the memory dividers correctly
(for the people who know what i'm talking about)

Enjoy :)

## Re: Athlon64 Overclocking Optimizer

C.Angenent@gmail.com wrote:

You're calculating the memory dividers incorrectly. For example, choose
2600MHz, 230MHz, 1050MHz, 300MHz, 11x and leave the weightings at default.
This will give you the line 236x11 with a 183MHz ratio (should be 11:12 not
9:10 btw) giving you 216.33MHz RAM. This equates to a divider of 12.
However, the actual divider used in this situation is 13, for reasons
unknown (possibly a programming error at AMD with respect to floating point
accuracy). I've got an explanation (and free code) in

[...]

--
Michael Brown
www.emboss.co.nz : OOS/RSI software and more :)
Add michael@ to emboss.co.nz ---+--- My inbox is always open

## Re: Athlon64 Overclocking Optimizer

Hey thanks for replying and giving me at least something interesting to
look at. I don't own an A64 myself so it's hard to test.

I know the divider is actually 11:12.. but the bios of the boards that
support those multipliers call them 9:10 so to avoid confusion i left
the names wrong.

9:10(183), 7:10(141) and 3:5(125)
Are actually  11:12, 17:24 and 5:8   or at least i think so..
All the multipliers seem to have a common numerator of 24.

also let me calculate what you're saying
200 * 11 = 2200
2200 / 183.333 = 12.0000

ah.. i see
So somehow it actually rounds it up to 13?
Has this been tested, or just looked up from the table at xtreme?

Maybe amd doesn't use ceil(divider) but  int(divider +1) ?
Though I doubt that will hold for other situations.

It actually does work out for the 166.66 divider... (which i think is
most commonly used)

11*200 / 166.66 =  13.2     that's not close to an exact integer so no
problem there...

Are there any multipliers where a divider of 166.66 would give an exact
integer?
10*200 / 166.66 = 12
Perhaps someone would be willing to test a 10 multiplier and a 166.66
ratio and see if the divider becomes 12 or 13.

Come to think of it.. does an A64 even have a native ceil() function?

Thanks

## Re: Athlon64 Overclocking Optimizer

Gogar wrote:

Neither. I just read around a lot and bug other people to test stuff :)

The ratios I use (for agreement with Oskar Wu's tables, which have yet to be
faulted and have had the unusual cases checked) are:
{} 1:1 or 200MHz
{} 11:12 or 183MHz
{} 5:6 or 166MHz
{} 3:4 or 150MHz
{} 5:7 or 143MHz
{} 2:3 or 133MHz
{} 5:8 or 125MHz
{} 1:2 or 100MHz
I chose the 5:7 one because (besides from agreeing with the tables :) ) it
would be the one required to run 166MHz RAM in a system with a 233MHz FSB.
Err, yeah, but mainly because it works.

Funny you should ask that :) The reason why I picked you up on it is due to
The unexpected divider of 13 does appear to be what was being used. This
would point towards a mistake made during the A64 design phase when the
engineers were calculating what the dividers should be. Essentially, 11 /
(11/12) is very slightly greater than 12 due to rounding in the FPU, so the
ceil function takes it up to 13.

The "algorithm" used is that it selects the divider such that the memory
speed is as high as possible without exceeding the specifiied speed. So
(assuming a 200MHz system clock at all times) if you ask for your RAM to run
at 166MHz, it will pick the highest integer such that (CPU speed / number)
is less than 166.666... MHz. The ceil(...) function is just an programming
way of expressing it. Hardware-wise, it's just a lookup table exactly like
the one Oskar Wu made. It puts multiplier and requested ratio in one end and
the (precomputed) optimal divider pops out the other end.

Yes, but no the test you're thinking of won't work :)

The critical part of the problem is that the floating-point representation
for 11/12 causes it to overshoot the mark, whereas all the 166MHz
possibilities cause undershoots. For example,
11 / (11/12) = 12 + 4.85E-16
but
10 / (5/6) = 12 - 5.33E-16

All "critical" multipliers are (with their corresponding error):
11:12 ratio
{}  5.5: +2.42E-016
{} 11.0: +4.85E-016
{} 16.5: +7.27E-016
{} 22.0: +9.70E-016
5:6 ratio
{}  2.5: -1.33E-016
{}  5.0: -2.66E-016
{}  7.5: -4.00E-016
{} 10.0: -5.33E-016
{} 12.5: -6.66E-016
{} 15.0: -8.00E-016
{} 17.5: -9.33E-016
{} 20.0: -1.07E-015
{} 22.5: -1.20E-015
{} 25.0: -1.33E-015
3:4 ratio
{} None
5:7 ratio
{}  5.0: -1.55E-016
{} 10.0: -3.11E-016
{} 15.0: -4.67E-016
{} 20.0: -6.21E-016
{} 25.0: -7.77E-016
2:3 ratio
{}  2.0: +1.67E-016
{}  4.0: +3.33E-016
{}  6.0: +5.00E-016
{}  8.0: +6.66E-016
{} 10.0: +8.33E-016
{} 12.0: +9.99E-016
{} 14.0: +1.17E-015
{} 16.0: +1.33E-015
{} 18.0: +1.50E-015
{} 20.0: +1.67E-015
{} 22.0: +1.83E-015
{} 24.0: +2.00E-015
5:8 ratio
{} None
1:2 ratio
{} None

The 11:12 ratios have been confirmed to be done "incorrectly". This agrees
with the values from Oskar Wu's table. The next step to look at would be the
2:3 ratio. If they values are calculated correctly, the even multipliers
should have higher memory bandwidth than odd multipliers. If they are
calculated incorrectly, odd multipliers should give higher performance.

Test:
180*10, 2:3 ratio
200*9, 2:3 ratio

This keeps the CPU speed constant at 1800MHz. The first will give a memory
speed of 120MHz (15 divider) or 112.5MHz (16 divider), the second should in
all cases give a memory speed of 128.6MHz (14 divider). So the relative
memory speed of the first test should be 93.3% or 87.5% of the second test,
which should be easily resolvable given previous results. Otherwise, lower
multipliers can be used for a greater difference in performance.

I suspect that the 133MHz values are correctly calculated, as Oskar Wu's
table (which so far has been faultless, "incorrect" values and all) gives a
divider of 15.

Yes (all x87 FPUs do).

[...]

--
Michael Brown
www.emboss.co.nz : OOS/RSI software and more :)
Add michael@ to emboss.co.nz ---+--- My inbox is always open

## Re: Athlon64 Overclocking Optimizer

Could one of you guys explain this A64 overclock? I have an Nforce3 754
motherboard and a 2800+(1800)
My memory is starting out at 166. Okay I lowered HTT to x3 and raised FSB to
246. Okay so now at bootup my CPU reads 2223 and memory reads 410. How did
this happen?

be
to
the
run
and
the
in
test,
a

## Re: Athlon64 Overclocking Optimizer

Dawg, I think whatever reports the 410 is wrong.
The 410 comes from 166/200 * 246 = 205  (DDR410)

I assume you're using a 9x multiplier.

9*200 / 166.66 = 10.8  rounded up that's 11

You actual memory speed is:
2223 / 11 = 202.1   (DDR404.2)

## Re: Athlon64 Overclocking Optimizer

Yeah, 9x multi, CPUID shows memory/11. This is pretty strange compared to
what I'm used to. Anyway, Is this a decent overclock compared to running it
at default settings?
BTW, I had to start at 166 for the memory because my BIOS has no manual
setting for 200. The choices are 100,133,166 and AUTO. Because my ram is not
recognized by the BIOS as PC3200 or better (it's supposed to be PC3700) the
AUTO setting starts it at 166. The original BIOS would recognize it and boot
at 200 but the bios was flaky.

## Re: Athlon64 Overclocking Optimizer

I made my page output a similar table as Oskar WU's

http://math.gogar.com/athlon64.cgi?showtable=1
I put a * where the divider hits a whole integer.

All the ones with a * in the 183 column seem to disagree with Oskar
WU's. I guess that's why some dividers ended up being described as
"Reserved" by amd, because it would be too much of a hassle to describe
the behaviour?
I still disagree with Oskar's table though :) because i think the 143
ratio is 17/24

DRAM MEMCLK Frequency (MemClk)
111b 24/24 * 200 = 200.00MHz
110b 22/24 * 200 = 183.33MHz
101b 20/24 * 200 = 166.66MHz
100b 18/24 * 200 = 150.00MHz
011b 17/24 * 200 = 141.66MHz
010b 16/24 * 200 = 133.33MHz
001b 15/24 * 200 = 125.00MHz
000b 12/24 * 200 = 100.00MHz

Doesn't this look convincing?

Hmm also.. 7:10 is slightly smaller than 17:24  and perhaps because of
that the bug doesn't show up when that divider is used.

About the 2:3 ratio, I'm confused. You showed the floating point
representation overshoots, just like 11/12 did. That would suggest that
the dividers would get calculated incorrectly when multi/(2:3) is an
integer, right?
But then you conclude that it calculates them correctly?
How about 16:24  which is essentially the same, but maybe that
undershoots?
Either way i have yet to find people reporting that the 133.33 ratio
shows abnormal behaviour so for now i'll assume it works correctly.
Could you find out which 24-numerator dividers undershoot and
overshoot?
Thanks :)  This is getting really interesting.

## Re: Athlon64 Overclocking Optimizer

http://www.devhardware.com/forums/t38760/s.html

It will be interesting to see what you guys think of it.
--
Ed Light

Smiley :-/
MS Smiley :-\

Send spam to the FTC at
uce@ftc.gov
Thanks, robots.