[Openmp-commits] TLS for POWER

Bliss, Brian E brian.e.bliss at intel.com
Thu Jun 18 11:31:40 PDT 2015

The intel compiler has the option -openmp-threadprivate=compat which enables TLS, so the __kmpc_threadprivate* interface is not used.
However, the intel compiler does not support C++ constructors / destructors - only POD (plain old data) types when setting up the threadprivate storage.
Therefore, it is not the default (the default being -openmp-threadprivate=legacy).


I would suggest putting this code under a different #define name, and not KMP_ARCH_PPC64 (and enable the macro for PPC64), since it is liable to be more general than for PPC64...


-----Original Message-----
From: openmp-commits-bounces at cs.uiuc.edu [mailto:openmp-commits-bounces at cs.uiuc.edu] On Behalf Of Hal Finkel
Sent: Thursday, June 18, 2015 11:49 AM
To: Alexandre Eichenberger
Cc: openmp-commits at dcs-maillist2.engr.illinois.edu
Subject: Re: [Openmp-commits] TLS for POWER

Hi Alexandre,

First, thanks for working on this! I think that we should definitely enable this mode of supporting thread locals if possible.

As an organizational note, I think it would be better to add a new feature macro for using TLS in this way (currently enabled only for PPC64). As you point out, other architectures will likely also want to do this, and we should make this straightforward.

+void kmpc_threadprivate_call_unprocessed_constructors();

This function could be static, right?

+       list. This is because each thread maintain a private variable

maintain -> maintains


I don't like that the comment explaining what this does is embedded in some other function (above). Please at least comment on where the comment is explaining what this does.

+        // one or more register occured since the last parallel loop

register -> registrations


----- Original Message -----
> From: "Alexandre Eichenberger" <alexe at us.ibm.com>
> To: openmp-commits at dcs-maillist2.engr.illinois.edu
> Sent: Friday, June 12, 2015 5:51:27 PM
> Subject: [Openmp-commits] TLS for POWER
> I would like to request switching the threadprivate scheme to TLS 
> (Thread Level Storage) for POWER before we get legacy code out there.
> Individual
> measurements has shown TLS to have about 10x lower overhead (number 
> may change depending to the TLS scheme). TLS is also used by other 
> compilers (e.g. XL) and thus provide better interoperability.
> Approach is relatively simple: compiler still generate a call to 
> register the constructors and the destructors, but the functions 
> calling the constructor/destructors have been changed a bit so that 
> the compiler call the constructor on the TLS version of the object 
> (not the global one, as it currently is in KMP). Then, prior to 
> starting a parallel function, the workers check if there are no new 
> constructors/destructors that have been registered; if there are, they 
> will call the constructors prior to starting the parallel region. 
> Destructors are called when killing a worker thread.
> KMP code change have been done (exclusively under #def for power 
> architecture), LLVM changes have been done, code has been tested.
> Commit
> will need to be coordinated with the LLVM changes, which must go at 
> the same time.
> If there is interest, and no code legacy issue, this patch could also 
> be applied for other architectures that have TLS support.
> Alexandre
> (See attached file: tls_patch)
> _______________________________________________
> Openmp-commits mailing list
> Openmp-commits at dcs-maillist2.engr.illinois.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/openmp-commits

Hal Finkel
Assistant Computational Scientist
Leadership Computing Facility
Argonne National Laboratory
Openmp-commits mailing list
Openmp-commits at dcs-maillist2.engr.illinois.edu

More information about the Openmp-commits mailing list