#4939: [with patch; needs review] massive performance regression to
primes_first_n
---------------------------+------------------------------------------------
Reporter: was | Owner: was
Type: defect | Status: new
Priority: blocker | Milestone: sage-3.2.3
Component: number theory | Resolution:
Keywords: |
---------------------------+------------------------------------------------
Old description:
> This is a doctest in arith.py:
> {{{
> This is very fast, because we leave the output as a PARI object:
> sage: v = primes_first_n(10^6, leave_pari=True)
> sage: len(v)
> }}}
> In fact, the above is now way way slower than doing leave_pari=False! So
> the doctest is blatantly wrong multiple times. It also says:
> {{{
> leave_pari -- bool (default: False) if True the returned list
> is a PARI list; this is *vastly* (10 times!)
> }}}
>
> On sage.math it is not very fast, and also uses 1.5GB RAM, which is a
> major problem for doctesting this on my build farm, where some machines
> have only 1GB RAM. Also, I don't think it is reasonable to require 1.5GB
> RAM for standard doctests.
> {{{
> wst...@sage:~$ sage
> ----------------------------------------------------------------------
> | Sage Version 3.2.2, Release Date: 2008-12-18 |
> | Type notebook() for the GUI, and license() for information. |
> ----------------------------------------------------------------------
> sage: time v = primes_first_n(10^6,leave_pari=True)
> CPU times: user 24.42 s, sys: 0.63 s, total: 25.05 s
> Wall time: 25.05 s
> sage: get_memory_usage()
> 1454.27734375
> }}}
>
> For comparison:
> {{{
> wst...@sage:~/sage/devel/sage/sage/rings$ sage
> ----------------------------------------------------------------------
> | Sage Version 3.2.2, Release Date: 2008-12-18 |
> | Type notebook() for the GUI, and license() for information. |
> ----------------------------------------------------------------------
> sage: time v = primes_first_n(10^6, leave_pari=False)
> CPU times: user 0.42 s, sys: 0.19 s, total: 0.61 s
> Wall time: 0.61 s
> sage: get_memory_usage()
> 927.67578125
> }}}
>
> The documentation also says:
> {{
> However, PARI integers are much different than
> SAGE integers. If you use this option the lower
> bound must be 2.
> }}}
> which is patently false now.
>
> An easy fix is to get rid entirely of the leave_pari=True option. It was
> only ever there because it used to be really fast. But now it is 50%
> better.
>
> The problem is also in prime_range:
> {{{
> sage: time w = prime_range(10^6)
> CPU times: user 0.03 s, sys: 0.00 s, total: 0.03 s
> Wall time: 0.03 s
> sage: time w = prime_range(10^6,leave_pari=True)
> CPU times: user 0.95 s, sys: 0.02 s, total: 0.97 s
> Wall time: 0.97 s
> }}}
>
> The easiest solution is to simply delete all this "leave_pari" stuff.
> It's totally useless, bad from an api point of view, and gains only a
> little speed. Writing code against this api that uses the option would
> be particularly stupid, since in the feature we could easily have a
> native prime_range that is way faster than pari's, hence code that tries
> to be clever would be slower.
New description:
This is a doctest in arith.py:
{{{
This is very fast, because we leave the output as a PARI object:
sage: v = primes_first_n(10^6, leave_pari=True)
sage: len(v)
}}}
In fact, the above is now way way slower than doing leave_pari=False! So
the doctest is blatantly wrong multiple times. It also says:
{{{
leave_pari -- bool (default: False) if True the returned list
is a PARI list; this is *vastly* (10 times!)
}}}
On sage.math it is not very fast, and also uses 1.5GB RAM, which is a
major problem for doctesting this on my build farm, where some machines
have only 1GB RAM. Also, I don't think it is reasonable to require 1.5GB
RAM for standard doctests.
{{{
wst...@sage:~$ sage
----------------------------------------------------------------------
| Sage Version 3.2.2, Release Date: 2008-12-18 |
| Type notebook() for the GUI, and license() for information. |
----------------------------------------------------------------------
sage: time v = primes_first_n(10^6,leave_pari=True)
CPU times: user 24.42 s, sys: 0.63 s, total: 25.05 s
Wall time: 25.05 s
sage: get_memory_usage()
1454.27734375
}}}
For comparison:
{{{
wst...@sage:~/sage/devel/sage/sage/rings$ sage
----------------------------------------------------------------------
| Sage Version 3.2.2, Release Date: 2008-12-18 |
| Type notebook() for the GUI, and license() for information. |
----------------------------------------------------------------------
sage: time v = primes_first_n(10^6, leave_pari=False)
CPU times: user 0.42 s, sys: 0.19 s, total: 0.61 s
Wall time: 0.61 s
sage: get_memory_usage()
927.67578125
}}}
The documentation also says:
{{{
However, PARI integers are much different than
SAGE integers. If you use this option the lower
bound must be 2.
}}}
which is patently false now.
An easy fix is to get rid entirely of the leave_pari=True option. It was
only ever there because it used to be really fast. But now it is 50%
better.
The problem is also in prime_range:
{{{
sage: time w = prime_range(10^6)
CPU times: user 0.03 s, sys: 0.00 s, total: 0.03 s
Wall time: 0.03 s
sage: time w = prime_range(10^6,leave_pari=True)
CPU times: user 0.95 s, sys: 0.02 s, total: 0.97 s
Wall time: 0.97 s
}}}
The easiest solution is to simply delete all this "leave_pari" stuff.
It's totally useless, bad from an api point of view, and gains only a
little speed. Writing code against this api that uses the option would be
particularly stupid, since in the feature we could easily have a native
prime_range that is way faster than pari's, hence code that tries to be
clever would be slower.
--
Ticket URL: <http://trac.sagemath.org/sage_trac/ticket/4939#comment:2>
Sage <http://sagemath.org/>
Sage - Open Source Mathematical Software: Building the Car Instead of
Reinventing the Wheel
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"sage-trac" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/sage-trac?hl=en
-~----------~----~----~----~------~----~------~--~---