[Omp] A question about OpenMP 2.5
Brad Bell
bradbell at seanet.com
Mon Mar 19 23:48:02 PDT 2007
I have a question about the OpenMP 2.5 standard
http://www.openmp.org/drupal/mp-documents/spec25.pdf
In Section 1.2.3 Data Terminology of spec25.pdf,
the following text appears:
variable
A named data object, whose value can be defined and
redefined during the execution of a program.
Only an object that is not part of another object is
considered a variable. For example, array elements,
structure components, array sections and substrings
are not considered variables.
In Section 1.4.1 Structure of the OpenMP Memory Model of spec25.pdf,
the following text appears:
If multiple threads write to the same shared variable
without synchronization, the resulting value of the variable
in memory is unspecified. If at least one thread reads from
a shared variable and at least one thread writes to it without
synchronization, the value seen by any reading thread is unspecified.
It appears to me that, given the text above, that Example A.1.1.c of
in the OpenMP 2.5 standard is not correct (or at least misleading).
Here is the code for that example:
void a1(int n, float *a, float *b)
{
int i;
#pragma omp parallel for
for (i=1; i<n; i++) /* i is private by default */
b[i] = (a[i] + a[i-1]) / 2.0;
}
1. As I understand the parallel command above, different threads may
execute
the loop for different values of i.
2. As I understand, the variable b is a shared variable because it is
defined before the loop.
3. The arguments b to the routine a1 may be an array, for example
it may be declared in the calling program by
float b[SIZE];
where SIZE is any positive integer constant greater than or equal n.
4. In the case of 3 above, b is a variable, and b[i] is not a variable,
hence multiple threads may be writing to the same variable; namely b.
5. Thus, in the case described above, the result of the loop is undefined.
More information about the Omp
mailing list