forked from llvm-mirror/openmp
-
Notifications
You must be signed in to change notification settings - Fork 14
Open
Description
This could be my user error. I have a simple code where I am trying to get T2 to execute after T1 because T1 writes x which is input to T2. The code is not setting x to 2 before T2 runs. Here is the code. This fails the same way in both libgomp and libbolt. It fails in clang and gcc 7.5.
#include <stdio.h>
#include <omp.h>
int foo() {
int x = 1;
int x_is_not_equal_two=0;
#pragma omp task depend(in:x) shared(x_is_not_equal_two,x)
{
if (x != 2) {
x_is_not_equal_two = 1;
printf(" T2: INPUT dependend clause x should now be 2 x:%d\n",x);
}
}
#pragma omp task depend(out:x) shared(x)
{
printf(" T1: OUTPUT setting x to 2\n");
x=2;
}
printf("before taskwait x:%d\n",x);
#pragma omp taskwait
printf("after taskwait x:%d x was not equal 2 in T2:%d \n",
x, x_is_not_equal_two);
return x_is_not_equal_two;
}
int main() {
int rc=0;
omp_set_num_threads(2);
#pragma omp parallel
#pragma omp single nowait
rc = foo();
printf("rc:%d\n",rc);
return rc;
}
Metadata
Metadata
Assignees
Labels
No labels