| Ilya Zakharevich on Fri, 13 Dec 2002 21:55:57 -0800 |
[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]
| Re: [PATCH oldish CVS] primelimit above 1<<31 |
On Fri, Dec 13, 2002 at 09:16:19PM -0500, Igor Schein wrote:
> On Thu, Dec 12, 2002 at 03:20:20PM -0800, Ilya Zakharevich wrote:
> > Actually, the bug in initprimes0() has a one-line fix, but this patch
> > also fixes other places where the limit was signed, and adds some minimal docs.
> >
> > Some minimal cache optimizations are also performed. Now sieving up
> > to 4e9 takes less than 2min on Athlon/850 or Ultra Sparc/333.
>
> !!!
>
> Remember I kept saying that MPQS and primetable are 2 things that
> exhibit performance inconsistenly between iterations on Linux? Well,
> whatever Ilya did fixed that for primetable. Now I get consistent
> timing for the following:
>
> while 1
> time gp -q -f -p `echo 2^32-2^12|bc` < /dev/null
> end
I use
gp -p 4000m </dev/null
> Now if the same cache optimizations could be applied to MPQS, I'd be
> a very happy camper :) And, we could legitimately talk about a
> comparison between MPQS and PPSIQS.
I spent *a lot* of time trying to provide some cache strategy which
may be reused in other procedures. I ran out of time... [It did not
help that I misplaced timings for Sparc... - but with the new API in
place it is much easier to test things:
install(set_internal,lLDG)
set_internal(2,100) \\ disable dependence on limit
{ time_primes_arena(ar,limit) =
set_internal(1,floor(ar*1024));
default(primelimit, 100 000);
gettime;
default(primelimit, limit);
if(ar >= 1, ar=floor(ar));
print("arena "ar"K => "gettime"ms");
}
{ time_primes(lim) =
print("test primelimit = "lim);
X = 16;
while(X < 4000,
time_primes_arena(X,lim);
time_primes_arena(X*1.5,lim);
X *= 2;
);
}
\\time_primes(10 000 000);
\\time_primes(30 000 000);
\\time_primes(100 000 000);
\\time_primes(300 000 000);
\\time_primes(1 000 000 000);
time_primes(2 000 000 000);
\\time_primes(4 000 000 000);
]
Ilya