In article <>, - HAL9000
<> wrote:
> If you look at a 64 bit Athlon mother board you'll notice that there
> are many traces running directly between the cpu and the memory
> sockets. LOL, going through a north-bridge was a silly waste of time
> (old designs) and now the cpu designers are doing it the best
> (fastest) way possible - a direct connection. So ... going through
> "AGP", like going through a north-bridge chip, is slower. The memory
> controller is integrated with the cpu.
>
> On your second question, it's much easier to make a test that is good
> for making a "relative" bandwidth comparison test than an "absolute"
> bandwidth determining test. Perhaps memtest is a relative test?
>
> Forrest
>
> Motherboard Help By HAL web site:
> http://home.comcast.net/~mobo.help/
Source is available for memtest86, if you want to see how they
do the bandwidth calculation. This code is from init.c .
*******
/* Measure cache/memory speed by copying a block of memory. */
/* Returned value is kbytes/second */
static ulong memspeed(ulong src, ulong len, int iter)
{
ulong dst;
ulong wlen;
int i;
dst = src + len;
wlen = len / 4; /* Length is bytes */
/* Calibrate the overhead with a zero word copy */
asm __volatile__ ("rdtsc":"=a" (st_low),"=d" (st_high));
for (i=0; i<iter; i++) {
asm __volatile__ (
"movl %0,%%esi\n\t" \
"movl %1,%%edi\n\t" \
"movl %2,%%ecx\n\t" \
"cld\n\t" \
"rep\n\t" \
"movsl\n\t" \
:: "g" (src), "g" (dst), "g" (0)
: "esi", "edi", "ecx"
);
}
asm __volatile__ ("rdtsc":"=a" (cal_low),"=d" (cal_high));
/* Compute the overhead time */
asm __volatile__ (
"subl %2,%0\n\t"
"sbbl %3,%1"
:"=a" (cal_low), "=d" (cal_high)
:"g" (st_low), "g" (st_high),
"0" (cal_low), "1" (cal_high)
);
/* Do the first copy to prime the cache */
asm __volatile__ (
"movl %0,%%esi\n\t" \
"movl %1,%%edi\n\t" \
"movl %2,%%ecx\n\t" \
"cld\n\t" \
"rep\n\t" \
"movsl\n\t" \
:: "g" (src), "g" (dst), "g" (wlen)
: "esi", "edi", "ecx"
);
/* Now measure the speed */
asm __volatile__ ("rdtsc":"=a" (st_low),"=d" (st_high));
for (i=0; i<iter; i++) {
asm __volatile__ (
"movl %0,%%esi\n\t" \
"movl %1,%%edi\n\t" \
"movl %2,%%ecx\n\t" \
"cld\n\t" \
"rep\n\t" \
"movsl\n\t" \
:: "g" (src), "g" (dst), "g" (wlen)
: "esi", "edi", "ecx"
);
}
asm __volatile__ ("rdtsc":"=a" (end_low),"=d" (end_high));
/* Compute the elapsed time */
asm __volatile__ (
"subl %2,%0\n\t"
"sbbl %3,%1"
:"=a" (end_low), "=d" (end_high)
:"g" (st_low), "g" (st_high),
"0" (end_low), "1" (end_high)
);
/* Subtract the overhead time */
asm __volatile__ (
"subl %2,%0\n\t"
"sbbl %3,%1"
:"=a" (end_low), "=d" (end_high)
:"g" (cal_low), "g" (cal_high),
"0" (end_low), "1" (end_high)
);
/* Make sure that the result fits in 32 bits */
if (end_high) {
return(0);
}
/* Since a copy does both a read & write we need to adjuect the time */
end_low /= 2;
/* Convert to clocks/KB */
end_low /= len;
end_low *= 1024;
end_low /= iter;
if (end_low == 0) {
return(0);
}
/* Convert to kbytes/sec */
return((v->clks_msec)/end_low);
}
*******
HTH,
Paul
>
>
> On Wed, 15 Feb 2006 00:02:32 GMT, "pigdos" <> wrote:
>
> >Since some Athlon 64 systems have 128-bit memory interfaces wouldn't AGP
> >memory be much more viable on these platforms? I'm assuming that AGP video
> >cards can make use of this wider memory interface.
> >
> >One more question. On my Nf7s v2.0, Sisoft reports a memory bandwidth of
> >roughly 3048 MB/sec (average of the two figures), while
> >memtest reports something like 1384 MB/sec. Why is there such a huge
> >discrepancy in figures?
> >
> >Last question: does PCIe feature some equivalent for AGP memory (DIME?)?