[Omp] A question about OpenMP 2.5

Greg Bronevetsky greg at bronevetsky.com
Tue Mar 20 11:06:20 PDT 2007


Actually, I'm not so sure about that. The tricky business comes from the
fact that OpenMP never specifies a granularity of atomicity (i.e. "memory
locations" have no defined size). Its normally something like 32 or 64
bits but theoretically, it could be anything. For example, suppose that
the variable in question is an array of 8-bit characters but the shared
memory system's internal communication messages send updates in 64-bit
chunks. In this case Brad's example wouldn't work.

OpenMP does force the compiler to generate appropriate code to ensure that
at least named variables don't collide in this way. However, it is unclear
what guarantees are provided for the components of these variables. As
such, while I agree with Dieter that the spec needs to make this clearer,
unless the text below specifies a size for these memory locations, it is
not sufficient. In light of the difficulties of getting OpenMP implentors
agreeing to a particular size, a proper fix may even be too complex to
make it into 3.0.

                             Greg Bronevetsky

On Tue, 20 Mar 2007, Dieter an Mey wrote:

> 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
> --------------------------------------------------------------------
> 
> _______________________________________________
> Omp mailing list
> Omp at openmp.org
> http://openmp.org/mailman/listinfo/omp
> 




More information about the Omp mailing list