One thing that I've discovered since I bought it is that cache size is
much more important then main memory bandwidth. I also have a Compaq
R3000z notebook that has an Athlon 64 3400+ in it. The 3800+ in the GX5050
is a 939 pin with 1/2M of cache. The 3400+ is a 754 pin with 1M of cache.
When I run Verilog simulations with no I/O the 3400+ is twice as fast as
the 3800+. GCC performance is slightly faster than the 3400+ but I feel
safe in saying that a 754 pin A64 with a 1M cache will perform at least as
well as a 939 pin A64 with 1/2M cache.
Could I beg you to do me a three minute benchmark favor
on your two different processors? This does multi-thousand
bit exponentiation and greatest-common-divisors, over and over.
If you have or can get the javac compiler and java runtime
on the two machines I would dearly love to see the amount
of time it takes for each of the two machines to run this.
You can get the free compiler in the JDK from
http://java.sun.com/j2se/1.5.0/download.jsp
and the free runtime from
http://www.java.com/en/download/manual.jsp
If you want to compile the 45 line program below you save
it in a file ywe2t.java and then type
javac ywe2t.java
and it should create ywe2t.class
If you don't have the JDK Java Development Kit with the
compiler then you can grab my compiled program from
http://www.rdrop.com/users/dont/ywe2t.class
and the source is also there if you want that
http://www.rdrop.com/users/dont/ywe2t.java
Then, either way, to run it you type
java ywe2t
and I'm hoping that in about 90 seconds it will print out
how long it took to do the 100 iterations.
Running that on each machine will compare these on compute
intensive calculations.
For my Athlon 2000 I get a little under 90 seconds and I'm
right on the edge of buying an Athlon 64 3200. I'm wondering
which model will give more performance. If your machines
aren't doing anything else that would consume resources then
this would give me a good idea how much I might gain from each
model processor.
Thank you
=========
import java.math.BigInteger;
import java.util.Date;
public class ywe2t {
public static void main (String args[])
throws java.io.IOException {
BigInteger two = new BigInteger("2");
BigInteger fac1 = new BigInteger("3");
BigInteger fac2 = new BigInteger("13219");
BigInteger sqrt = new BigInteger("0");
BigInteger n = new BigInteger("0");
BigInteger T = new BigInteger("1");
BigInteger b = new BigInteger("1");
BigInteger a = new BigInteger("2");
BigInteger w = new BigInteger("2");
int loop;
long starttime;
long finishtime;
long duration;
n = two.pow(2203).add(BigInteger.ONE).divide(fac1).divide(fac2);
while (w.compareTo(n) < 0)
w = w.multiply(two);
// really simple but inaccurate approximation of sqrt(n)
sqrt = n.shiftRight(n.bitLength()/2);
loop = 100; // enough iterations to report about every 1 minute
starttime = System.currentTimeMillis();
while (a.compareTo(sqrt) <= 0 && (T.compareTo(BigInteger.ONE) == 0 || T.compareTo(n) == 0)) {
b = a.modPow(w, n);
T = n.gcd(b.modPow(n, n).subtract(b));
if (loop-- == 0) {
finishtime = System.currentTimeMillis();
duration = (finishtime-starttime);
starttime = finishtime;
System.out.println("a="+a.toString()+", duration=" + duration + " milliseconds");
System.exit(0);
}
a = a.add(BigInteger.ONE);
}
System.out.println("T="+T.toString());
}
}