Re: Maxima and thread safety

Leo Butler <[email protected]> Tue, 9 Jun 2026 22:01:32 +0000
Newsgroups gmane.comp.mathematics.maxima.general
Message-ID <[email protected]>
Fateman mentions normal-form calculations in another email. These
continue to be slow using symbolic methods. Polynomial multiplication
(with truncation) is a bottleneck, I think.

Leo

On Tue, Jun 09 2026, Stavros Macrakis <[email protected]> wrote:

> I would be interested to hear from the community about problems they've
> tackled with Maxima where compute time was the primary challenge.
>
> Then we could think about helping to make them faster, whether by
> parallelization, new Maxima functionality, improved Maxima algorithms,
> improved application code, or some other approach. Or maybe suggesting some
> other, more suitable, tool.
>
>
> On Tue, Jun 9, 2026 at 12:42 PM David Scherfgen via Maxima-discuss <
> [email protected]> wrote:
>
>> Yes, but we try it with the ..._threads.lisp file. The one you tried uses
>> multiple processes, which are completely isolated from each other.
>>
>> Leo Butler <[email protected]> schrieb am Di., 9. Juni 2026, 18:25:
>>
>>> Hi David,
>>>
>>> I cannot reproduce your crash using `distribute_over_tranches_mt.lisp'
>>> from Michel's github repo.
>>>
>>> I played around with the number of threads (1, 4, 8) and your example
>>> works
>>> fine and it clearly is using multiple threads.
>>>
>>> Leo
>>>
>>> Maxima-version: "branch_5_49_base_416_g162a6093a_dirty"
>>> Maxima build date: "2026-06-08 12:29:08"
>>> Host type: "x86_64-unknown-linux-gnu"
>>> Lisp implementation type: "SBCL"
>>> Lisp implementation version: "2.6.4.debian"
>>> User dir: "/dev/null"
>>> Temp dir: "/tmp"
>>> Object dir:
>>> "/home/butlerlt/maxima/sandbox/git/maxima-code/binary/branch_5_49_base_416_g162a6093a_dirty/sbcl/2_6_4_debian"
>>> Frontend: false
>>>
>>>
>>> On Tue, Jun 09 2026, David Scherfgen via Maxima-discuss <
>>> [email protected]> wrote:
>>>
>>> > Hi Michel,
>>> >
>>> > You might add this to your examples:
>>> >
>>> > distribute_over_tranches(
>>> >   '(block(
>>> >       [x_n: float(N), x_next, i],
>>> >       for i : 1 thru 1000 do (
>>> >           x_next: 0.5 * (x_n + N / x_n),
>>> >           x_n: x_next
>>> >       ),
>>> >       x_n)),
>>> >   N, 1000, 16);
>>> >
>>> > Nothing fancy, it's Newton's algorithm to compute the square root, with
>>> a
>>> > fixed number of iterations, just for demonstration purposes.
>>> > Note that I have done everything possible to make sure that the
>>> variables
>>> > x_n, x_next, i are local, by using a block.
>>> > But yet, the calculation crashes as soon as one uses more than 1 thread.
>>> > So, the situation is even more delicate than I thought.
>>> >
>>> > Best regards
>>> > David
>>> >
>>> > Am Di., 9. Juni 2026 um 16:45 Uhr schrieb Michel Talon <
>>> > [email protected]>:
>>> >
>>> >> I have updated the README in
>>> >>
>>> >> https://github.com/mtalon/mtalon/tree/master/mtalon/maxima-parallel
>>> >>
>>> >> to reflect David insightful examples.
>>> >>
>>> >> Finally "distribute_over_tranches_thread.lisp" is another way to
>>> >> achieve the same parallelism, using threads in just one Unix
>>> >> process. Here we use the sbcl threading support. For sufficiently
>>> >> independent computations one may expect to get correct behaviour.
>>> >> However if threads modify the internal state of maxima chaos can
>>> >> occur. Examples have been provided by David Scherfgen, notably:
>>> >> distribute_over_tranches('(concat('v, i) :: i), i, 10000, 16)$
>>> >> which under the hood affect the global variable $values, so at the end
>>> >> one gets length($values) different from 10000. The problem is that
>>> special
>>> >> variables with global extent are not bound in thread local storage, but
>>> >> can be read and modified independently by all threads. But they are not
>>> >> protected by a mutex.
>>> >> A small lisp program which  shows the behavior of such special global
>>> variables is:
>>> >>
>>> >> ;;; We are in main thread
>>> >> (defparameter *x* 0)
>>> >> (format nil "~a" *x*)    ;;; value of global *x* in main thread
>>> >> (let ((*x* 1))
>>> >> a  (format t "~a ~%" *x*)  ;;; value of *x* in main thread TLS
>>> >>   (sb-thread:make-thread (lambda ()   ;;; spawning new thread
>>> >>                         (format t "~a ~%" *x*) ;;; value of *x* in new
>>> thread, the global one.
>>> >>                         (setq *x* 3)
>>> >>                         (format t "~a ~%" *x*) ;;; altered value of
>>> *x* in new thread
>>> >>                         "Sorry! *x* in main thread is not isolated.")))
>>> >> (format nil "~a" *x*)     ;;; The global value of *x* has been altered
>>> in main thread
>>> >>
>>> >> However i still believe that the threading program may be very useful
>>> to distribute a bunch of "ordinary standard"
>>> >> computations over the many cores of modern processors.  For example
>>> running the same computation a hundred of times for
>>> >> different values of parameters which may take hours of compute time,
>>> will be scaled down basically by the number of cores.
>>> >> Fortunately special variables bound locally in a let form or similar
>>> (this being called dynamically bound) get bound in TLS
>>> >> (thread local storage) which isolates them from thread to thread, so
>>> that most parts of maxima can still work OK.
>>> >>
>>> >>
>>> >> Le 07/06/2026 à 16:55, David Scherfgen a écrit :
>>> >>
>>> >>
>>> >> Unfortunately, Maxima has many hidden side effects that are surprising
>>> to
>>> >> the average user. The following innocent looking example simply creates
>>> >> Maxima variables v1, v2, v3, ..., v10000 in 16 parallel threads:
>>> >>
>>> >> --
>>> >> Michel Talon
>>> >>
>>> >> _______________________________________________
>>> >> Maxima-discuss mailing list
>>> >> [email protected]
>>> >> https://lists.sourceforge.net/lists/listinfo/maxima-discuss
>>> >>
>>> >
>>> > _______________________________________________
>>> > Maxima-discuss mailing list
>>> > [email protected]
>>> > https://lists.sourceforge.net/lists/listinfo/maxima-discuss
>>> >
>>>
>>> --
>>> ---
>>> Best regards,
>>> Dr Butler
>>
>> _______________________________________________
>> Maxima-discuss mailing list
>> [email protected]
>> https://lists.sourceforge.net/lists/listinfo/maxima-discuss
>>

-- 
---
Best regards,
Dr Butler
_______________________________________________
Maxima-discuss mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/maxima-discuss