On Mon, Aug 17, 2009 at 2:10 AM, Bill Hart<goodwillh...@googlemail.com> wrote: > > 2009/8/17 William Stein <wst...@gmail.com>: >> >> On Mon, Aug 17, 2009 at 1:17 AM, Bill Hart<goodwillh...@googlemail.com> >> wrote: >>> Actually Python is often vastly slower than Lisp. It is very rarely >>> faster. The point of python is most certainly not its speed. It is >>> ease of use, through and through. The whole language was designed with >>> that in mind. >>> >>> Of course the speed problem becomes much less of a problem when you >>> can link in libraries written in C, assembler and Cython of course >>> (which compiles to C++ and fairly closely approximates it). >> >> Yep. Here's a very good chart showing SBCL Lisp being faster than >> Python on nearly every single programming challenge: >> >> http://shootout.alioth.debian.org/gp4/benchmark.php?test=all&lang=python&lang2=sbcl&box=1 >> >> However, I think the table shows that the corresponding Lisp >> programmers are all much longer, and less memory efficient. >> >> Of course, if I were implementing any of those time critical >> programming challenges for Sage, I would use Cython, which is the same >> speed as C (since one can paste in any C program, with minor >> modifications). The corresponding table is >> >> http://shootout.alioth.debian.org/gp4/benchmark.php?test=all&lang=gcc&lang2=sbcl&box=1 >> >> where C is between 1 and 4 times faster than Lisp at every single benchmark. >> >> When you're trying to write code that is "faster than Magma", a factor >> of 4 matters a *huge* amount. >> >>>> Yep, those are probably some of the reasons for Python being popular. >>>> >>>>>> It has not been >>>>>> done because of a (valid) design decision to keep the syntax as close >>>>>> to python as possible (the Sage preprocessor does almost nothing). >>>>> >>>>> If it were a good decision, I think one would not have to write mpz_s >>>>> so much. >>>> >>> >>> I wonder if William only included Cython and Python files in his >>> count, or whether he also included all the compiled Cython files and >>> perhaps even the C libraries. There's only about 100 uses of mpz_add >>> across the whole of Sage in Python and Cython code. That actually >>> really surprises me, because it is so low. >> >> I just did "sage -grep", which includes everything not autogenerated >> under devel/sage/sage/, which is everything the Sage developers wrote. >> This also includes all of the official interface/header files. So, >> e.g., every single mpz_ function in all of GMP is listed in one of >> those header files, and contributes to the count. >> >>> >>>> What is wrong with writing code that uses the GMP library directly? >>>> The GMP library API is clean, mature, explicit, well thought out, >>>> offers hundreds of useful functions, is stable, and code written than >>>> uses it is often straightforward to read and understand, and is very >>>> fast. Many programmers like writing tight "inner loop" code that >>>> has to be fast against the GMP API. I *like* GMP. >>>> >>> >>> As far as I can tell, Maxima doesn't even use GMP. It must be dog slow >>> for multiprecision arithmetic. GMP and MPIR have sped up by about a >>> factor of 2 in the last year and the speed increases have been going >>> like that for years in GMP. How does maxima handle multiprecision >>> arithmetic? Or does it just do everything to single precision? >> >> The multiprecision arithmetic that Maxima uses is determined by the >> underlying lisp. When Sage used clisp, it didn't use MPIR, and was >> dog slow for large integer arithmetic. One of the technical >> advantages to Sage switching from Clisp to ECL is that ECL *does* use >> MPIR. Check this out in Sage-4.x: >> >> sage: k = 3^1000000+1 >> sage: m = maxima(3)^1000000+1 >> sage: timeit('j=k*k') >> 25 loops, best of 3: 14.2 ms per loop >> sage: timeit('j=m*m') >> 25 loops, best of 3: 17.6 ms per loop >> >> If you tried that in sage-3.x, it would take forever. >> >> Overall, Maxima+ECL is much much better for Sage than Maxima + Clisp for >> Sage. >> >> By the way, ECL = embedded common lisp. The point of "embedded" is >> that ECL is supposed to be easy to embed in C programs. We should >> thus be able to easily create a Cython interface to ECL and maybe >> somehow make the Sage <--> Maxima interface work entirely via the C >> library without using pexpect. This could speed up some things by a >> factor of 1000. >> > > Ah, that makes sense. It never occurred to me to check if any of the > lisp implementations actually used GMP or MPIR. Now I just recalled > that you recently encouraged ECL to switch from GMP to MPIR. Did they > do so? I recall PHP did switch.
I don't know what happened. ECL definitely works with MPIR, since we build it on MPIR as part of Sage. > > So ECL uses GMP or MPIR. Well maybe Lisp isn't so bad after all, eh. ;-) Indeed. See my April 1, 2009 master plan. :-) > > Bill. > > > > -- William Stein Associate Professor of Mathematics University of Washington http://wstein.org --~--~---------~--~----~------------~-------~--~----~ To post to this group, send an email to sage-devel@googlegroups.com To unsubscribe from this group, send an email to sage-devel-unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/sage-devel URLs: http://www.sagemath.org -~----------~----~----~----~------~----~------~--~---