This is now http://trac.sagemath.org/14627  (needs review)



On Tuesday, May 21, 2013 12:40:00 PM UTC+1, Volker Braun wrote:
>
> Reposted at the top to increase visiblitiy (see 
> https://groups.google.com/d/msg/sage-devel/5PdRIUic2Es/l0yDYLG_8qIJ)
>
> The sage matrices use unsigned long for the mod_int datatype. This does 
> not fit into a (signed) python int, so whenever it reaches Python 
> (assigning to a Python variable, or passing as an argument to a non-cdef 
> function) it gets converted to a Python arbitrary-precision integer. This 
> wastes quite a bit of time when creating it and gets worse once you start 
> doing arithmetic:
>
> --------------------------------------
> ctypedef unsigned long mod_int   # this is how we define it
>
> cpdef caster_slow():
>     cdef int i
>     foo = None
>     for i in range(10000000):
>         foo = <mod_int>(1.0)
>
> cpdef caster_fast():
>     cdef int i
>     foo = None
>     for i in range(10000000):
>         foo = <int>(1.0)
> --------------------------------------
>
> Then we get
>
> sage: timeit('caster_slow()')
> 5 loops, best of 3: 137 ms per loop
> sage: timeit('caster_fast()')
> 25 loops, best of 3: 34.4 ms per loop
>
> Should we just switch to (signed) long? This wastes one bit (factor of 2) 
> of maximum modulus length, but at least for now we define MAX_MODULUS = 
> 2**23 so this wouldn't be an issue.
>
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"sage-devel" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to sage-devel+unsubscr...@googlegroups.com.
To post to this group, send email to sage-devel@googlegroups.com.
Visit this group at http://groups.google.com/group/sage-devel?hl=en.
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to