| Karim Belabas on Sat, 15 Jul 2017 09:30:45 +0200 |
[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]
| Re: Dimension of a space of modular form |
* Emmanuel ROYER [2017-07-14 12:04]:
> Hello!
>
> Why does mfdim need to increase the memory to compute the dimension of
> the space of modular forms?
> mfdim([1,12])
> *** mfdim: Warning: increasing stack size to 16000000.
The modular form package makes heavy use of various caches. (It was a
design choice to make this transparent to the user.) The cache policy
for a given table is to initialize a "small" cache as soon as possible,
then increase it as needed (up to some maximum value, currently beyond
user control but this will change).
Starting from an empty session :
? getcache() \\ caches are empty
%1 =
[ "Factors" 0 0 0 0]
[ "Divisors" 0 0 0 0]
[ "H" 0 0 0 0]
["CorediscF" 0 0 0 0]
[ "Dihedral" 0 0 0 0]
? mfdim([1,12]) \\ that this is *very* slow: we are building a "useless" cache
time = 32 ms.
%2 = 2
? getcache() \\ no longer
%3 =
[ "Factors" 50000 0 0 4479272]
[ "Divisors" 50000 0 0 5189808]
[ "H" 0 0 0 0]
["CorediscF" 0 0 0 0]
[ "Dihedral" 0 0 0 0]
? mfdim([1,12]) \\ now instantaneous
%4 = 2
? mfinit([96,10],0); \\ now computing a space of modular forms, more caches...
time = 100 ms.
? getcache()
%6 =
[ "Factors" 50000 0 0 4479272]
[ "Divisors" 50000 1 100000 5189808]
[ "H" 50000 0 0 400008]
["CorediscF" 100000 0 0 800008]
[ "Dihedral" 0 0 0 0]
? mfinit([96,10]); \\ now faster...
time = 48 ms.
? for(N=1,100,mfinit([N,1,0],0)) \\ now involving weight 1 forms ...
time = 848 ms.
? getcache()
%7 =
[ "Factors" 50000 0 0 4479272]
[ "Divisors" 50000 1 100000 5189808]
[ "H" 50000 0 0 400008]
["CorediscF" 100000 0 0 800008]
[ "Dihedral" 1000 0 0 1840768] \\ new cache
? for(N=1,100,mfinit([N,1,0],0)) \\ again faster
time = 138 ms.
Etc.
> Does it also compute the space and not only its dimension?
It doesn't in weight k > 1 (but it usually does in weight k = 1...)
There is no memoization: we do not recall the result of the last
GP function calls. What we do is save a number of costly common ingredients
there were needed to compute it so that we need not recompute them when
computations in the same general range (e.g. product N*k of the same
magnitude) are requested.
Cheers,
K.B.
--
Karim Belabas, IMB (UMR 5251) Tel: (+33) (0)5 40 00 26 17
Universite de Bordeaux Fax: (+33) (0)5 40 00 21 23
351, cours de la Liberation http://www.math.u-bordeaux.fr/~kbelabas/
F-33405 Talence (France) http://pari.math.u-bordeaux.fr/ [PARI/GP]
`