[Omp] A problem with guard objects and exceptions on Intel
Michael Suess
mike_ml at suessnetz.de
Fri Aug 25 06:12:07 PDT 2006
Hi Grant,
thank you very much for taking care of this, looking forward to seeing this
fixed!
Best regards,
Michael
On Wednesday 23 August 2006 19:59, Haab, Grant wrote:
> Michael,
>
> I have reproduced the segmentation fault you mention below with your
> source code. I am in the process of submitting a bug for the Intel
> Compiler on your behalf. Thanks for bringing this issue to our
> attention.
>
> As you suggested in another e-mail, the bug seems to have nothing to do
> with shell stack size. It does not fail every time, so perhaps the
> intermittent nature misled some folks to associate it with shell stack
> size setting.
>
> Best regards,
>
> - Grant
>
> Grant Haab
> Compiler Developer
> Intel Corporation
>
> -----Original Message-----
> From: omp-bounces at openmp.org [mailto:omp-bounces at openmp.org] On Behalf
> Of Michael Suess
> Sent: Tuesday, August 22, 2006 10:55 AM
> To: omp at openmp.org
> Subject: [Omp] A problem with guard objects and exceptions on Intel
>
> Hi,
>
> I have just published a blog entry comparing the merits of guard objects
> vs.
> the critical construct (with C++ and OpenMP). The problem I have now is:
> My
> test programs with exceptions and guard objects do not work for the
> Intel
> Compiler. Since this would not be the first time I missed something, I
> figured I would double check here before filing a bug with Intel.
>
> So if you find the time, please take a look at the code for the guard
> object,
> enclosed in the following article:
> http://www.thinkingparallel.com/2006/08/21/scoped-locking-vs-critical-in
> -openmp-a-personal-shootout/
>
> Combining this with the following short test program,
> test_omp_guard_exceptions.cpp:
>
> #include <omp.h>
> #include <cassert>
>
> #include "omp_guard.hpp"
>
> int main (void)
> {
> omp_lock_t my_lock;
>
> // how many exceptions have been thrown (should be one for each
> thread)
> int ex_count = 0;
>
> // how many threads will be created (most likely)
> int numthreads = omp_get_max_threads ();
>
> omp_init_lock (&my_lock);
>
> #pragma omp parallel
> {
> try {
> omp_guard my_guard (my_lock);
> throw omp_get_thread_num ();
> }
> catch(int e) {
> #pragma omp atomic
> ++ex_count;
> }
> }
> assert (ex_count == numthreads);
> omp_destroy_lock (&my_lock);
>
> return 0;
> }
>
> Running this program on the Intel Compiler, I get a segmentation fault.
> The
> Sun and Portland compilers run it just fine, so I think it may be a bug
> in
> the compiler. But since I have had this thought one too many times in
> the
> past and usually it is me and not the compiler who is wrong, I thought I
>
> would double-check.
>
> Thanks for any insights,
> Michael Suess
--
My blog on parallel programming: http://www.thinkingparallel.com
Michael Suess
Public PGP key: http://www.suessnetz.de/michael/michaelsuess.gpg
PGP key fingerprint: A744 AFBA CA93 620B 8701 AB98 D4CF 4F3C 945A 61FE
More information about the Omp
mailing list