| Karim Belabas on Wed, 09 Nov 2005 09:20:03 +0100 |
[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]
| Re: bug in ellglobalred() |
* Igor Schein [2005-11-08 21:56]:
> On Mon, Nov 07, 2005 at 07:27:43PM +0100, Karim Belabas wrote:
> > * Bill Allombert [2005-11-02 19:52]:
> > > We should probably use elldata to build a comprehensive test-suite for
> > > ellglobalred().
> >
> > John sent me a nice script doing exactly this. I've included it as
> >
> > 'make test-ellglobalred'
> >
> > (~ 5 minutes to check all conductors up to 10^4). Having installed elldata
> > is a pre-requisite.
>
> It did take 5m yesturday, today it takes less than 2s. What happened?
ellsearch is horrendously slow when used in a loop: it must parse and load in
memory a large table even if only 1 curve (or 1 conductor as here) is
needed.
In the bench script, I replaced ellseach by something like
checkfile(n) =
{ local(v);
v = read( Str(default(datadir,,1), "/elldata/ell", n) );
for (i = 1, #v, check(v[i]))
}
which checks all curves in a given 'elldata' file [ loading it only once of
course ].
If that inefficiency is a problem, there are a few possible improvements :
1) use direct access as above
2) caching (leave the "current" table in memory for later accesses)
3) implement a forell(N = min, max, ...) control structure, as has
been already suggested [ with the same net effect as 2) ]
4) saving the 'elldata' files in binary format (using writebin instead of
write) results in files which are 3.5 times larger [ compressed or not,
no difference ], but load 15 times faster [ compressed or not, no
difference again ].
We can't distribute the tables in that format, which would make them
architecture-dependant, but we can provide scripts automating the
translation on a given machine.
Karim.
--
Karim Belabas Tel: (+33) (0)5 40 00 26 17
Universite Bordeaux 1 Fax: (+33) (0)5 40 00 69 50
351, cours de la Liberation http://www.math.u-bordeaux.fr/~belabas/
F-33405 Talence (France) http://pari.math.u-bordeaux.fr/ [PARI/GP]