The correct way to compute memory speed for AMD 64's

shira

Diamond Member
Jan 12, 2005
9,500
6
81
Suppose you set your FSB speed to 240 and your memory divider to 166, what do you think your actual memory speed will be? 200MHz? In general, that's incorrect.

To determine the true speed, you need to know what speed your CPU is running, and then perform a calculation:

1) Determine the least integer greater than CPU-speed/memory-divider.
2) Divide the CPU speed by the integer determined in (1)
3) Multiply the result of (2) by FSB-speed/200.

For example, suppose you have a CPU running at 10x240 = 2400MHz and your memory divider is 166 (= 166.666666666 . . .):

1) 2400/166.666666666 = 14.4 ==> 15
2) 2400/15 = 160
3) 160*(240/200) = 192MHz (versus the expected 200MHz)

Edit: I corrected my lousy initial example.

 

Peter

Elite Member
Oct 15, 1999
9,640
1
0
You don't have an FSB to begin with ;)

What you're cranking up is the reference clock. CPU clock multiplies up from there, RAM clock divides back down from CPU frequency.

When you're cranking the refclk, you're confusing the BIOS as well as the processor itself about the CPU core speed. Thus you need to compensate by choosing faux RAM speed limits.

So with the CPU at 8x300, the processor itself and the BIOS will think the CPU is running 8x200 = 1600 MHz. Putting a 133 MHz limit to the RAM speed will lead to divider setting CPU/12 for the RAM clock.

Now since we're actually running 2400 MHz, CPU/12 will get you to the 200 MHz you wanted.
 

darkeyed

Member
Jan 19, 2005
125
0
0
So I take it that CPU-Z displays the correct results and NvTune shows wrong values. NvTune just takes the clock rate mult x 2 to show ddr vale of ram.

 

miketheidiot

Lifer
Sep 3, 2004
11,060
1
0
Originally posted by: shira
Suppose you set your FSB speed to 300 and your memory divider to 133, what do you think your actual memory speed will be? 200MHz? In general, that's incorrect.

To determine the true speed, you need to know what speed your CPU is running, and then perform a calculation:

1) Determine the least integer greater than CPU-speed/memory-divider.
2) Divide the CPU speed by the integer determined in (1)
3) Multiply the result of (2) by FSB-speed/200.

For example, suppose you have a CPU running at 8x300 = 2400MHz and your memory divider is 133:

1) 2400/133 = 18.045 ==> 19
2) 2400/19 = 124.3
3) 124.3*(300/200) = 189.5MHz (versus the expected 200MHz)

the old way works with even multipliers. :)

<---has an even multiplier.
 

darkeyed

Member
Jan 19, 2005
125
0
0
Originally posted by: shira
Suppose you set your FSB speed to 300 and your memory divider to 133, what do you think your actual memory speed will be? 200MHz? In general, that's incorrect.

To determine the true speed, you need to know what speed your CPU is running, and then perform a calculation:

1) Determine the least integer greater than CPU-speed/memory-divider.
2) Divide the CPU speed by the integer determined in (1)
3) Multiply the result of (2) by FSB-speed/200.

For example, suppose you have a CPU running at 8x300 = 2400MHz and your memory divider is 133:

1) 2400/133 = 18.045 ==> 19
2) 2400/19 = 124.3
3) 124.3*(300/200) = 189.5MHz (versus the expected 200MHz)

OK I just did the math and rounding is a problem here.

1) 2400/133 = 18.045 (not 19)
2) 2400/18.045 = 133 (133*18.045=2400)
3) 133*(300/200) = 199.5

 

shira

Diamond Member
Jan 12, 2005
9,500
6
81
Originally posted by: darkeyed
Originally posted by: shira
Suppose you set your FSB speed to 300 and your memory divider to 133, what do you think your actual memory speed will be? 200MHz? In general, that's incorrect.

To determine the true speed, you need to know what speed your CPU is running, and then perform a calculation:

1) Determine the least integer greater than CPU-speed/memory-divider.
2) Divide the CPU speed by the integer determined in (1)
3) Multiply the result of (2) by FSB-speed/200.

For example, suppose you have a CPU running at 8x300 = 2400MHz and your memory divider is 133:

1) 2400/133 = 18.045 ==> 19
2) 2400/19 = 124.3
3) 124.3*(300/200) = 189.5MHz (versus the expected 200MHz)

OK I just did the math and rounding is a problem here.

1) 2400/133 = 18.045 (not 19)
2) 2400/18.045 = 133 (133*18.045=2400)
3) 133*(300/200) = 199.5

But the critical point is that the result of (1) cannot be a fractional value. The CPU memory controller uses the next larger integer (unless the result of [1] is an integer), which results in a value of 19, not 18.045. That's why the resulting memory speed ends up lower than expected (for this example).

Edit: Actually, you're right for the example I chose, because the memory divider of "133" is actually 133.333333333333. . . . ., so 2400/133.3333333333 = 18.0 exactly, and no adjustment to 19 occurs.

 

shira

Diamond Member
Jan 12, 2005
9,500
6
81
Originally posted by: miketheidiot
the old way works with even multipliers. :)

I understand what you're saying, but I don't think this is generally true. For example, if the memory divider is 200 but the CPU speed is not an even multiple of 200, you'll end up with a memory speed less than 200.

For example, if a 3500+ is overclocked to 2.5GHz, you'll get

2500/200 = 12.5 ==> 13.
2500/13 = 192.3
192.3*(200/200) = 192.3

Check out the following table for confirmation of this:

Memory speed table

 

darkeyed

Member
Jan 19, 2005
125
0
0
Ok I understand what your saying now.

I am still kinda new to some of this and the AMD64 makes things a bit trickier.

Also I get different values in software too - like between Nvtune and CPU-Z
 

GuitarDaddy

Lifer
Nov 9, 2004
11,465
1
0
Nice post Shira! Right on the money!

For the rest of you non-beleivers, check it with CPU-Z or clockgen! Then humbly apologize:eek:
 

darkeyed

Member
Jan 19, 2005
125
0
0
Also it would seem the NvTune is wrong as well. I assumed it would be correct since they make the chip set. They just base the divider on the clock feq not the actuall CPU speed.
 

deadseasquirrel

Golden Member
Nov 20, 2001
1,736
0
0
Does this work with .5 multipliers as well? I know there's been conflicting info out there on half multis.

I've got 333 * 7.5x at 120 divider for 2497.5 mhz.

According to this formula, ram is at 198mhz. Is it correct? I can't trust Clockgen or CPU-Z when using a .5 multi.
 

GuitarDaddy

Lifer
Nov 9, 2004
11,465
1
0
Originally posted by: deadseasquirrel
Does this work with .5 multipliers as well? I know there's been conflicting info out there on half multis.

I've got 333 * 7.5x at 120 divider for 2497.5 mhz.

According to this formula, ram is at 198mhz. Is it correct? I can't trust Clockgen or CPU-Z when using a .5 multi.

I think in this case, you can trust Clockgen or CPU-Z but not bios. With the settings above I think Clockgen or CPU-Z will correctly show ram at 185.6mhz as follows.

2497.5/120=20.8125 rounds to 21

2497.5/21=118.9

118.9 *(312.2/200)=185.6mhz


And this should also prove that you are really running 312.2 x 8 = 2497.5 not 333 x 7.5 =2497.5.

This is the basis for the argument that .5 multis don't exist on A64's. I have done the math on similar settings on my machine, and I'm a believer that .5 multi's don't exist.

Please tell us what CPU-Z and Clockgen show your memory speed for the above settings


 

Megatomic

Lifer
Nov 9, 2000
20,127
6
81
Timely thread shira, I asked a similar question earlier in the Soltek thread I've been participating in. Thanks for confirming my hopes. :beer:
 

deadseasquirrel

Golden Member
Nov 20, 2001
1,736
0
0
Originally posted by: GuitarDaddy
This is the basis for the argument that .5 multis don't exist on A64's. I have done the math on similar settings on my machine, and I'm a believer that .5 multi's don't exist.

Please tell us what CPU-Z and Clockgen show your memory speed for the above settings

CPU-Z has the Frequency greyed out and blank. Clockgen shows the memory at -333.33mhz.

Again, I can't trust either one to tell me what my memory is running at a .5 multi.

I get better memory benches in Everest with the 333*7.5x (and, naturally, better benches all around).

Also, I should mention that I cannot even POST when trying anything over 300 FSB with the 8x multi. Whereas if I drop the multi to 7.5x, I can up the FSB. So, if there truly is no .5 multi, I can live with that... the setting alone allows me better clocks and better performance (even if RAM is running slower actual).

I need to do some more testing it seems.
 
Jan 9, 2001
704
0
0
I am currently running my A64 3000 @ 2550 (8.5 x 300) with a 133 divider with a resulting memory speed of 196.2 mhz according to CPU-Z. Everything seems to be quite normal, value ram that is rated @ PC3200 (2.5-3-3-7) is running great @ 196.2 mhz (2-3-3-10). System is Prime 95 stable and will compute 32 M in SuperPi with no problem.
 

deadseasquirrel

Golden Member
Nov 20, 2001
1,736
0
0
Originally posted by: CCityInstaller
I am currently running my A64 3000 @ 2550 (8.5 x 300) with a 133 divider with a resulting memory speed of 196.2 mhz according to CPU-Z. Everything seems to be quite normal, value ram that is rated @ PC3200 (2.5-3-3-7) is running great @ 196.2 mhz (2-3-3-10). System is Prime 95 stable and will compute 32 M in SuperPi with no problem.

Well that's interesting. CPU-Z says 196.2 mhz. The formula above computes to 191 mhz. And, GuitarDaddy says it really is 180 mhz since you're using the .5 multi.

Which one is right??