[GiNaC-list] using GiNaC in a multithreaded environment

Vladimir V. Kisil V.Kisil at leeds.ac.uk
Sat Feb 8 12:12:59 CET 2025


	Hello,

	I do not think multi-threading is possible with GiNaC, you may
  want to read one of the past discussion of this starting from here: 

https://www.ginac.de/pipermail/ginac-list/2010-August/001715.html

  Best wishes,
  Vladimir
-- 
Vladimir V. Kisil                  http://v-v-kisil.scienceontheweb.net
  Book:      Geometry of Mobius Maps       https://doi.org/10.1142/p835
  Soft:      Geometry of cycles         http://moebinv.sourceforge.net/
  Jupyter notebooks:        https://github.com/vvkisil?tab=repositories
>>>>> On Fri, 07 Feb 2025 09:35:58 +0100, Bastian  via GiNaC-list <ginac-list at ginac.de> said:

    > Hello, I have a rather large number of expressions,
    > which I must normalize. To increase performance I wanted to
    > implement this on multiple threads.  However, this always
    > segfaults and I am having trouble to find out where my error
    > is. Consider the following code:

    > ```c++ // H is a 9x9 matrix void norm_matrix(GiNaC::matrix& H) {
    > thread_pool tp = thread_pool(); auto n = 9;
    > std::vector<std::future<GiNaC::ex>> futures(n*n); for(int r = 0; r
    > < n; ++r) { for(int c = 0; c < n; ++c) { futures[r*n+c] =
    > tp.submit( [&h = H(r,c)] () -> GiNaC::ex { return h.normal(); });
    > } }

    >     for(int r = 0; r < n; ++r) { for(int c = 0; c < n; ++c) {
    > H(r,c) = futures[r*n+c].get(); } } } ``` At the second iterations
    > on the call of h.normal(), this crashes with a segfault, both with
    > a reference as well as with a copy. Has GiNaC been used in a
    > multithreaded environment previously and has this error occured?

    > Kind regards Spooky Ghost


More information about the GiNaC-list mailing list