gcl-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Maxima-discuss] Should Maxima use GMP ? (Answer: YES!)


From: Camm Maguire
Subject: Re: [Maxima-discuss] Should Maxima use GMP ? (Answer: YES!)
Date: Fri, 12 May 2023 14:35:19 -0400
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/27.1 (gnu/linux)

Greetings!  Just ran across this thread.  Am traveling this week, but
will get back with a substantive reply.  In short, a much more developed
GMP interface is basically in place in the master branch, which still
has a bit of work before it is ready.  The interface could be moved over
relatively easily.

Take care,

Henry Baker <hbaker1@pipeline.com> writes:

> Here's some *very interesting* timing results on the SBCL and GCL 'gcd' 
> function using my
>
> relatively new 64-bit laptop running under WSL2 (Windows Subsystem for Linux).
>
>  
>
> If I simply fire up SBCL 2.1.1, I can do ~188,679 gcd's of random 256bit 
> numbers per second.
>
>  
>
> If I then do (require :sb-gmp) *without restarting* SBCL, I can now do 
> 909,091 gcd's of random
>
> 256bit numbers per second -- i.e., 4.8X faster !!
>
>  
>
> In other words, SBCL will use GMP for 'gcd' *if it's loaded*, but otherwise 
> not !
>
>  
>
> SBCL's utilization of GMP has a cost, however.
>
>  
>
> I can do 10,395,010 32bit gcd's per second if I call sb-gmp:mpz-gcd directly, 
> but
>
> only 4,878,049 gcd's per second if I call Lisp's 'gcd' function; i.e., the 
> cost of
>
> checking for GMP costs more than the cost of doing the 32bit gcd !!
>
>  
>
> Note that when SBCL uses GMP on 32bit gcd's, it is *slower* than using GMP
>
> on 64bit gcd's (on my 64-bit laptop).
>
>  
>
> Bottom line: *always incorporate "(require :sb-gmp)" into your SBCL Maxima 
> builds*,
>
> whether you plan to call any sb-gmp functions directly yourself or not.
>
>  
>
> ---
>
> Now for gcd's on GCL 2.6.12 on the same 64bit laptop.
>
>  
>
> On 32-bit gcd's, GCL is slightly faster than SBCL/GMP, but slightly slower 
> than calling GMP directly.
>
> On 64-bit gcd's, GCL is twice as slow as SBCL/GMP.
>
> On 128-bit gcd's, GCL is 12X slower than SBCL/GMP.
>
> On 256-bit gcd's, GCL is 10X slower than SBCL/GMP.
>
> On 512-bit gcd's, GCL is 12.5X slower than SBCL/GMP.
>
> On 1024-bit gcd's, GCL is 11X slower than SBCL/GMP.
>
> On 4096-bit gcd's, GCL is 21.5X slower than SBCL/GMP.
>
>  
>
> I'm dumb-founded as to why GCL would incorporate GMP, and then not use it for 
> the 'gcd' function !!
>
>  
>
> It's time for GCL to use GMP as much as possible.
>
>  
>
> Case closed.
>
>  
>
> -----Original Message-----
> From: Richard Fateman <fateman@gmail.com>
> Sent: Apr 21, 2023 6:00 PM
> To: Stavros Macrakis <macrakis@gmail.com>, 
> <maxima-discuss@lists.sourceforge.net> <maxima-discuss@lists.sourceforge.net>
> Subject: Re: [Maxima-discuss] Does any maxima package implement the 
> 'primorial' function ?
>
>  
>
> If you assume GMP,  you can possibly remove big floats and bignums. Thoughts?
> Richard
>
> On Fri, Apr 21, 2023, 6:19 PM Stavros Macrakis <macrakis@gmail.com> wrote:
>
>  Given that we have a nice and reasonably fast Maxima function which works on 
> all Lisps, I'm not sure I see the value of an implementation-specific 
> implementation, especially since primordial is of rather specialized 
> interest. But I would be curious to know how
>  fast the GMP primordial function is on 3*10^6. Surprisingly, perhaps, 
> generating the primes in Maxima takes about 40% of the time and the other 60% 
> are the multiplications and overhead.
>
>  On Fri, Apr 21, 2023 at 6:00 PM Henry Baker <hbaker1@pipeline.com> wrote:
>
>  I downloaded the sources for GCL, it it appears that GCL incorporates its own
>
>  version of GMP (i.e., GCL doesn't seem to use the standard libgmp dynamic
>
>  library).
>
>   
>
>  The 'primorial' function appears in the source code, as the '.c' file for it 
> exists.
>
>  However, I can't tell if this .c file appears in the final GCL binary.
>
>   
>
>  Given the close relationship of GCL and GMP, I would imagine that providing
>
>  a Lisp-level 'primorial' function would be pretty easy (if it doesn't already
>
>  exist).
>
>   
>
>  I did search the GCL symbol tables and couldn't find any hint of Lisp-level
>
>  functions for the GMP 'mpz' functions.
>
>   
>
>  -----Original Message-----
>  From: Henry Baker <hbaker1@pipeline.com>
>  Sent: Apr 21, 2023 7:39 AM
>  To: Raymond Toy <toy.raymond@gmail.com>, 
> <maxima-discuss@lists.sourceforge.net>
>  Subject: Re: [Maxima-discuss] Does any maxima package implement the 
> 'primorial' function ?
>
>   
>
>  GMP already works in SBCL as an FFI package:
>
>   
>
>  sbcl
>  This is SBCL 2.1.11.debian, an implementation of ANSI Common Lisp.
>  More information about SBCL is available at <http://www.sbcl.org/>.
>
>  SBCL is free software, provided as is, with absolutely no warranty.
>  It is mostly in the public domain; some portions are provided under
>  BSD-style licenses.  See the CREDITS and COPYING files in the
>  distribution for more information.
>  * (require :sb-gmp)
>  ("SB-GMP")
>  * (defun primorial (n) (sb-gmp:mpz-primorial n))
>  PRIMORIAL
>  * (primorial 255)
>  
> 64266330917908644872330635228106713310880186591609208114244758680898150367880703152525200743234420230
>  *
>
>   
>
>  It will be interesting to see if SBCL Maxima takes advantage of
>
>  the non-CL-standard functions from GMP.
>
>   
>
>  -----Original Message-----
>  From: Raymond Toy <toy.raymond@gmail.com>
>  Sent: Apr 21, 2023 7:28 AM
>  To: <maxima-discuss@lists.sourceforge.net>
>  Subject: Re: [Maxima-discuss] Does any maxima package implement the 
> 'primorial' function ?
>
>   
>
>   
>
>  On 4/21/23 07:10, Henry Baker wrote:
>
>  I just notice that Gnu GMP *already* provides a 'primorial' function:
>
>   
>
>  https://gmplib.org/manual/Number-Theoretic-Functions
>
>   
>
>  "Function: void mpz_primorial_ui (mpz_t rop, unsigned long int n)
>
>  Set rop to the primorial of n, i.e. the product of all positive prime 
> numbers <=n."
>
>   
>
>  So any Lisp/Maxima which utilizes GMP already has 'primorial' code loaded;
>
>  I don't know if any of these Lisp's provide access to this code via Lisp or
>
>  Maxima.  (I just tested GCL, ECL, SBCL; none have a 'primorial' function.)
>
>   
>
>  Perhaps it is time that Common Lisp (and Maxima) have an 'unofficial'
>
>  upgrade of the CL standard to include all of the standard GMP number
>
>  I doubt that's going to happen.  There's probably no desire to update the 
> official CL standard.  I think that requires a lot of work and time to make 
> happen.
>
>  theoretic functions, since adding these functions to one of these Lisps
>
>  should be only about a day's work for a knowledgeable person, once
>
>  the function name & arguments have been agreed upon.
>
>   
>
>  primep(n), next_prime(n), inverse_mod(m,n), jacobi(m,n), legendre(a,p),
>
>  kronecker(a,b), factorial(n), binomial(n,k), fibonacci(n), lucas(n), etc.
>
>  But getting lisps to support this is probably easiest if someone created a 
> lisp library that implemented these and made it available via quicklisp.
>
>   
>
>   
>
>  _______________________________________________
>  Maxima-discuss mailing list
>  Maxima-discuss@lists.sourceforge.net
>  https://lists.sourceforge.net/lists/listinfo/maxima-discuss
>
>  _______________________________________________
>  Maxima-discuss mailing list
>  Maxima-discuss@lists.sourceforge.net
>  https://lists.sourceforge.net/lists/listinfo/maxima-discuss
>
> _______________________________________________
> Maxima-discuss mailing list
> Maxima-discuss@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/maxima-discuss
>

-- 
Camm Maguire                                        camm@maguirefamily.org
==========================================================================
"The earth is but one country, and mankind its citizens."  --  Baha'u'llah



reply via email to

[Prev in Thread] Current Thread [Next in Thread]