[Openmp-dev] OpenMP problems with clang 3.7.0
Christof Söger via Openmp-dev
openmp-dev at lists.llvm.org
Thu Sep 17 06:49:24 PDT 2015
On 07.09.2015 15:10, Hahnfeld, Jonas wrote:
> Hi,
>
> I was able to reproduce the error with v2.12.2 but not with the current master.
Thanks for looking into it! Did you use llvm 3.7.0 or the svn version?
> I think this problem got fixed with https://github.com/Normaliz/Normaliz/commit/62c3237d7d312555dad7026f494c6caa6e438181
>
> The OpenMP standard mentions under restrictions of the critical construct (ironically in section 2.12.2):
>> A throw executed inside a critical region must cause execution to resume within
>> the same critical region, and the same thread that threw the exception must catch
>> it.
This is exactly the point that was fixed in the commit. But it is not
the problem I'm having. There should be no exception in this place.
I now also tested it on ubuntu 14.04 (with the current master of
normaliz), and I get the same problem. Just to clearify it a bit more.
If I put asserts right before entering the critical section and inside
the critical section like
assert (Pyramid_key.size()==dim); // works fine
#pragma omp critical(TRIANG)
{
assert (Pyramid_key.size()==dim); // fails
then the asserts behave as the comments say.
I used the compiled versions of 3.7.0. I will get the svn version and
try it with it.
Best,
Christof
> Cheers,
> Jonas
>
>> -----Original Message-----
>> From: Openmp-dev [mailto:openmp-dev-bounces at lists.llvm.org] On Behalf
>> Of Christof Söger via Openmp-dev
>> Sent: Sunday, September 06, 2015 11:26 PM
>> To: openmp-dev at lists.llvm.org
>> Subject: [Openmp-dev] OpenMP problems with clang 3.7.0
>>
>> Hi everybody,
>>
>> I just downloaded the new 3.7 release and also the OpenMP runtime for
>> Darwin (compiled versions) and tried to compile our software package
>> "Normaliz" with it.
>> Without -fopenmp=libomp it compiles and runs fine.
>> With the openmp flag it compiles but I ran in problems (even if I set the
>> number of threads to 1).
>>
>> I debugged it a bit and the problem is that at the entering of a critical section
>> one std::vector, which is firstprivate in the outer parallel loop gets,
>> invalidated.
>> As a workaround it works when I copy the vector right before the critical, and
>> use that copy inside the critical section.
>>
>> I don't know under which exact circumstances this happens and was not able
>> to create a small example in which it happens. If you are interested to check
>> it, you can find the source code on github
>> https://github.com/Normaliz/Normaliz. To reproduce the problem compile
>> normaliz via cmake and run it with "normaliz -cq -x=1 example/medium".
>> The critical critical is the critical(TRIANG) on line 1113 in process_pyramid and
>> the effected vector is Pyramid_key. Right before the critical section an
>> assert(Pyramid_key.size() == dim);
>> succeeds, but in the critical section it fails.
>>
>> I hope this helps to figure out what happens. If I can any other information
>> please let me know.
>>
>> Best regards,
>> Christof
>>
>> _______________________________________________
>> Openmp-dev mailing list
>> Openmp-dev at lists.llvm.org
>> http://lists.llvm.org/cgi-bin/mailman/listinfo/openmp-dev
More information about the Openmp-dev
mailing list