[PPL-devel] Thread Safety

Enea Zaffanella zaffanella at cs.unipr.it
Wed Sep 21 11:28:04 CEST 2016


Hello.

In the past weeks I worked on the inclusion of experimental 
thread-safety support (mostly based on the work by Maxim Gaina) in the 
"devel" branch of the Parma Polyhedra Library.

A few relevant information:

- as said above, thread-safety support is only available in the git 
branch named "devel"

- in order to enable support for thread-safety, the library has to be 
configured using option "--enable-thread-safe"

- it assumes a compiler supporting C++11 threads (tested only with gcc 
on linux)

- currently thread-safety is only available when using the C++, C and 
Java language interfaces

- the timeout mechanism does NOT support thread safety (yet)

- a few examples of computations using multiple PPL threads can be found in:
       * demos/ppl_lcdd (for the C++ interface)
       * demos/ppl_lpsol (for the C interface)
       * interfaces/Java/tests/Variable_Output_thread_safe1.java

- it is worth stressing (again) that the library is *conditionally* 
thread safe: if any two application threads share library objects, the 
application should manage to properly serialize all accesses to these 
objects (note: even when all these accesses are meant to be read-only, 
because many PPL operators are "logically const", but may actually 
modify the internal representation of objects, therefore leading to race 
conditions)

- beware of inefficiencies coming from memory allocation; we suggest to 
replace the standard allocation mechanism with something that behaves 
better in a multi-threaded setting (e.g., TCMalloc).

It would be nice if people interested in this extension could give it a 
try and provide us with some feedback.

Enea.


On 08/10/2016 09:59 AM, Enea Zaffanella wrote:
>
> Hello John.
>
> The library, as is, is not thread safe (the main reason is that it 
> uses a bunch of static caches to speed up single-threaded computations).
>
> Maxim Gaina, a student under my supervision, produced a version of the 
> library which is conditionally thread safe: safety is achieved as long 
> as each thread has exclusive access to the PPL objects it works on. 
> That is, either the objects are not shared between threads or the 
> application code makes sure that shared objects are accessed at 
> different times (e.g., using mutexes). The thread-safe version uses 
> C++11 constructs and it was considering the C++ and C language 
> interfaces only. For testing purposes, Maxim produced multi-threaded 
> variants of demo programs ppl_lcdd and ppl_lpsol.
>
> Afaict, Roberto was considering whether or not the work of Maxim was 
> to be added to the main PPL library.
>
> Cheers,
> Enea
>
>
> On 08/09/2016 11:23 PM, John Paulson wrote:
>> Hi Developers,
>>
>> I have been using PPL for a couple of years, and I have just become 
>> interested in parallelizing an application I wrote that calls it. I 
>> tried to do this (using a parallel_for loop from TBB), but I ran into 
>> varied errors at run time.
>>
>> I noticed that in the TODO file of the PPL distribution that it has 
>> "Make the library thread-safe" on the list. Has this been done yet? 
>> Would the lack of thread safety lead to strange run time errors?
>>
>>
>> Best,
>> John C. Paulson
>>
>>
>> _______________________________________________
>> PPL-devel mailing list
>> PPL-devel at cs.unipr.it
>> http://www.cs.unipr.it/mailman/listinfo/ppl-devel
>
>
>
> _______________________________________________
> PPL-devel mailing list
> PPL-devel at cs.unipr.it
> http://www.cs.unipr.it/mailman/listinfo/ppl-devel

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.cs.unipr.it/pipermail/ppl-devel/attachments/20160921/781657a6/attachment.htm>


More information about the PPL-devel mailing list