This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug middle-end/35549] New: Invalid use of copy-in/out for shared vars in nested parallels
- From: "jakub at gcc dot gnu dot org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 12 Mar 2008 09:21:28 -0000
- Subject: [Bug middle-end/35549] New: Invalid use of copy-in/out for shared vars in nested parallels
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
extern void abort (void);
int
main (void)
{
int i = 6, n = 0;
omp_set_dynamic (0);
omp_set_nested (1);
#pragma omp parallel shared (i) num_threads (3)
{
if (omp_get_num_threads () != 3)
#pragma omp atomic
n += 1;
#pragma omp parallel shared (i) num_threads (4)
{
if (omp_get_num_threads () != 4)
#pragma omp atomic
n += 1;
#pragma omp critical
i += 1;
}
}
if (n == 0 && i != 6 + 3 * 4)
abort ();
return 0;
}
is miscompiled. While we can use copy-in/out for the outer parallel's
shared(i),
it can't be used for the inner parallel's shared(i), as multiple threads would
have their own copied copies of the shared var, rendering the variable
effectively not shared.
--
Summary: Invalid use of copy-in/out for shared vars in nested
parallels
Product: gcc
Version: 4.3.0
Status: UNCONFIRMED
Keywords: openmp
Severity: normal
Priority: P3
Component: middle-end
AssignedTo: jakub at gcc dot gnu dot org
ReportedBy: jakub at gcc dot gnu dot org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=35549