[GiNaC-list] is ginac thread safe for this case?

Cristobal Navarro axischire at gmail.com
Sun Jun 13 17:28:48 CEST 2010


Still,

i will complete the testing phase, and i will share my results. and if it
worked i will give you some statistics of the behaveiur of the program,
(seccesful launchs, rate of segfaults, wrong answers)


On Sun, Jun 13, 2010 at 11:26 AM, Jens Vollinga <jensv at nikhef.nl> wrote:

> Hi,
>
> Am 13.06.2010 16:30, schrieb Alexei Sheplyakov:
>
>  I'm afraid you've missed the point. I wanted to explain that one of
>> the essential mechanisms used by GiNaC (memory management) is not thread
>> safe, therefore all setups (except using GiNaC from one thread) are
>> unsafe.
>>
>
> this I don't believe yet. Maybe I am wrong, but the setup as he described
> it has no (and will not have any) sharing of subexpressions between threads.
>
>
>  I just think using GiNaC from several threads is more dangerous than
>> Russian roulette :)
>>
>
> oh, please wait, reconsider! Your opinion might backfire someday ... ;-)
>
>
>  1. Automatic evaluation is not thread safe.
>>
>
> yes, but ...
>
>
>
>> Have a look at ex::construct_from_basic (which is basically the core
>>  of automatic evaluation). That code does
>>
>> 318                 // If the original object is not referenced but
>> heap-allocated,
>> 319                 // it means that eval() hit case b) above. The
>> original object is
>> 320                 // no longer needed (it evaluated into something
>> different), so we
>> 321                 // delete it (because nobody else will).
>> 322                 if ((other.get_refcount() == 0)&&  (other.flags&
>>  status_flags::dynallocated))
>> 323                         delete&other; // yes, you can apply delete to
>> a const pointer
>> 324
>>
>> The reference counting is not thread safe, so the object can be deleted
>> while
>> it's used by another thread.
>>
>
> ... all objects in his setup are 100% private to each thread. So I don't
> see a problem.
>
>
>  2. GiNaC smart pointers are not thread safe. In theory it can be fixed
>>    by using atomic integers for reference counting, and locking in
>>    makewritable().
>>
>> 3. GiNaC uses STL containers to store sums and products. STL containers
>> are
>>    not thread safe at all.
>>
>> 4. Subs() uses writable access (let_op()), and has no locking at all.
>>
>
> Same box.
>
>
>  I didn't mention refcounting, because I think in his setup it doesn't
>>> cause a problem, or does it?.
>>>
>>
>> No matter what your setup is, you're going to use the automatic evaluation
>> (otherwise you don't need GiNaC at all). And it's not thread safe (due to
>> reference counting, data structures, etc). So the only safe setup is using
>> GiNaC from one thread.
>>
>
> I think the only problem (in his setup) is a possible call to the gcd code.
>
>
>  I'm afraid locks will ruin any performance gains. I mean, if you need to
>> take a lock every time you need to add two and integers or allocate
>> several
>> bytes of RAM, you can't achive any reasonable performance.
>>
>
> You were right if you made ginac thread-safe in a naive way, i.e. many
> locks protecting refcounting, functions, etc.
>
> While I don't know about cln, yet, in ginac it can be done in a smarter
> way. Instead of making ginac absolutely thread-safe in any use-case, one can
> enable the user to specify data/expression segments to which certain
> expressions, symbols or whatever should belong. Then, ginac ensures that it
> is thread-safe between these different segments. Some extra functions to let
> the user share or transport data between the segments need to be implemented
> and voila. That is just a rough idea, but the threading overhead would be
> minimized to keep it attractive.
>
> Regards,
> Jens
>
> _______________________________________________
> GiNaC-list mailing list
> GiNaC-list at ginac.de
> https://www.cebix.net/mailman/listinfo/ginac-list
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.cebix.net/pipermail/ginac-list/attachments/20100613/184fab02/attachment.htm>


More information about the GiNaC-list mailing list