On 9 sep, 18:24, David Harvey <[email protected]> wrote:
> Sage is very slow. I discovered this (again) while trying to write a
> prototype of an algorithm for computing zeta functions of projective
> varieties. I need to multiply lots of polynomials and matrices over
> finite rings, and frequently move coefficients between polynomials
> and matrices. The arithmetic is actually not too bad; it's the boring
> data movement stuff that really sucks.
Well, it's nothing new that Python is slower for low-level, highly
iterative functions (tight loops) than other languages such as C.
That's why part of the Sage source code is written in Cython rather
than Python.
Sage can load (using load()) 3 file types:
- Sage (*.sage), a slightly modified version of the Python languages;
- Python (*.py);
- Cython (*.pyx), a sort of Python with some C declarations.
Cython is way faster than Python, so if your code can be rewritten to
use Cython on the most CPU-intensive parts, it will be very fast.
Example:
----- py_iter.py -----
def pyIter(n=20000000):
x = 1e-80
for i in xrange(n):
x *= 1.000017
print x
--- (time: 4.47 s) ---
----- cpy_iter.pyx -----
cdef double _cpyIter_(long n): # C declaration
cdef double x = 1e-80
cdef long i
for i in xrange(n):
x *= 1.000017
return x
def cpyIter(n=20000000): # Python declaration
return _cpyIter_(n)
--- (time: 0.06 s) ---
You can find some documentation here: http://docs.cython.org/
(Oh, and here http://docs.cython.org/src/quickstart/build.html you may
find something familiar)
--
To post to this group, send an email to [email protected]
To unsubscribe from this group, send an email to
[email protected]
For more options, visit this group at http://groups.google.com/group/sage-devel
URL: http://www.sagemath.org