[Omp] A question about OpenMP 2.5
Dieter an Mey
anmey at rz.rwth-aachen.de
Wed Mar 21 02:14:57 PDT 2007
Dear all,
I don't think that the question was related to the OpenMP memory model,
but to the wording and understanding of the current OpenMP specification.
Brad looked at a perfectly legal piece of code
(I slightly modified it using default(none) etc.)
> void a1(int n, float *a, float *b)
> {
> int i;
> #pragma omp parallel for default(none) shared(a,b) private(i,n)
> for (i=1; i<n; i++) /* i is private by default */
> b[i] = (a[i] + a[i-1]) / 2.0;
> }
and thinks that when reading the specs, the result of this loop shall be
undefined.
As the pointers a and b can be put in scoping clauses those are
variables in the OpenMP terminology.
Now to the question:
> 1. As I understand the parallel command above, different threads may
> execute the loop for different values of i.
yes.
> 2. As I understand, the variable b is a shared variable because it is
> defined before the loop.
yes.
> 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.
yes.
> 4. In the case of 3 above, b is a variable, and b[i] is not a variable,
true.
> hence multiple threads may be writing to the same variable; namely b.
wrong:
if the memory regions to which a and b are pointing to do not overlap
(aliasing) multiple threads are writing to different memory locations
and not to the same variable as b[i] is not a variable.
This is not related to atomicity etc.
>
> 5. Thus, in the case described above, the result of the loop is
undefined.
wrong.
Anyway, it seems to me that the specification should be corrected to say
something like
> If multiple threads write to the same ** memory location **
> without synchronization, the resulting ** memory content **
> is unspecified. If at least one thread reads from
> a shared ** memory location ** and at least one thread writes to
> it without
> synchronization, the value seen by any reading thread is
> unspecified.
This text just describes the circumstances of a data race.
regards
Dieter
>
Brad Bell schrieb:
> 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.
>
>
>
> _______________________________________________
> Omp mailing list
> Omp at openmp.org
> http://openmp.org/mailman/listinfo/omp
>
--
--------------------------------------------------------------------
Dieter an Mey
High Performance Computing Hochleistungsrechnen
RWTH Aachen University Rechen- und Kommunikations-
Center for Computing and Communication zentrum der RWTH Aachen
phone: ++49-(0)241-80-24377 Seffenter Weg 23
fax: ++49-(0)241-80-22134 52074 Aachen, Germany
email: anmey at rz.rwth-aachen.de
--------------------------------------------------------------------
More information about the Omp
mailing list