Hmm, wait a minute, there is a good chance there's a lot of duplicate
files there, due to HG or something. Perhaps there's only 300K of
python and cython lines of code.

So maybe 111 occurrences is actually a bit high based on this (silly) metric.

Bill.

2009/8/17 Bill Hart <goodwillh...@googlemail.com>:
> Well ECL uses mpz_add 11 times in 73783 lines of Lisp code *not*
> including system header files, which I removed, compared to 111
> occurrences in Sage's 1.66M lines of Python code (to be honest I am
> not sure if it counted the Cython files or not, but what's another
> 300K lines between friends). Now
>
> ECL : 11/73783 = 1.49x10^-4
>
> whereas
>
> Sage : <= 111/1.66x10^6 = 6.69x10^-5.
>
> So it seems Lisp is actually a bit mpz_add heavy. I'd write to the
> authors and complain about that. It's clearly inefficient use of Lisp
> macro processing capability, especially given that ECL is only a
> compiler, not a computational algebra package.
>
> OK, ok, so I really should add the lines of lisp code in Maxima to
> that total to be fair:
>
>
> ECL + Maxima : 11/370000 = 2.97x10^-5
>
> Yep Sage is bloated. Time to give it a haircut.
>
> By the way, ECL still uses GMP version 4.2.1 and also uses Brian's old
> Windows patches to support GMP. They really should switch, as it would
> give a real boost to them to do so, especially on the msvc stuff.
>
> Bill.
>
> 2009/8/17 William Stein <wst...@gmail.com>:
>>
>> 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
-~----------~----~----~----~------~----~------~--~---

Reply via email to