[Omp] A question about OpenMP 2.5
Dieter an Mey
anmey at rz.rwth-aachen.de
Tue Mar 20 10:13:36 PDT 2007
I guess, you are right.
It seems 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.
best 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