<html>
  <head>
    <meta content="text/html; charset=ISO-8859-1"
      http-equiv="Content-Type">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    The order that the different threads execute the output statement is
    not predetermined; i.e. it can vary from one execution to the next.
    For example, the program below sometimes generates the output<br>
    &nbsp;&nbsp;&nbsp; 0231<br>
    and other times<br>
    &nbsp;&nbsp;&nbsp; 2301<br>
    on a four core machine that I have access to.<br>
    <br>
    # include &lt;iostream&gt;<br>
    <br>
    int main(void)<br>
    {<br>
    &nbsp;&nbsp;&nbsp;&nbsp; double&nbsp; t1, t2;<br>
    &nbsp;&nbsp;&nbsp;&nbsp; double t0 = 0.0, tf = 1.0;<br>
    &nbsp;&nbsp;&nbsp;&nbsp; double nn[] = {1.0,2.0,3.0,4.0,5.0};<br>
    &nbsp;&nbsp;&nbsp;&nbsp; int i;<br>
    <br>
    &nbsp;&nbsp;&nbsp;&nbsp; #pragma omp parallel shared(t0,tf,nn) private(i,t1,t2)<br>
    &nbsp;&nbsp;&nbsp;&nbsp; {<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #pragma omp for nowait<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (i=0;i&lt;4;i++) {<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; t1 = (t0+tf)*nn[i];<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; t2 = (t0+tf)*nn[i+1];<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; std::cout &lt;&lt; i;<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>
    &nbsp;&nbsp;&nbsp;&nbsp; }<br>
    &nbsp;&nbsp;&nbsp;&nbsp; std::cout &lt;&lt; std::endl;<br>
    &nbsp;&nbsp;&nbsp;&nbsp; return 0;<br>
    }<br>
    <br>
    <br>
    On 9/17/2011 1:15 PM, Ingrid Hallen wrote:
    <blockquote cite="mid:COL106-W190023014C72CC78341381D2090@phx.gbl"
      type="cite">
      <pre wrap="">
Hi everyone!

I've been experimenting a bit with adol-c and OpenMP (not differentiating
OpenMP code, just trying to paralellize some code that uses adoubles). Anyway,
I have a piece of code that looks something like this:

"adouble t1, t2;
adouble t0, tf;
t0.setValue(0.0); tf.setValue(1.0);
double nn[] = {1.0,2.0,3.0,4.0,5.0};
int i;
    
#pragma omp parallel shared(t0,tf,nn) private(i,t1,t2)
 {
        #pragma omp for nowait
        for (i=0;i&lt;4;i++) {
            t1 = (t0+tf)*nn[i];
            t2 = (t0+tf)*nn[i+1];
            std::cout &lt;&lt; i &lt;&lt; i+1 &lt;&lt; t1.value() &lt;&lt; t2.value();
        }
}"

Now if I run the loop using just one thread everything works fine, but for more
than one I get some weird results, like, say, the following output:

0 1 1.000 2.000
2 3 3.000 2.000
3 4 4.000 4.000
1 2 2.000 3.000

Here I think the second line should read "2 3 3.000 4.000" and the third "3 4 4.000 5.000".

Anyone have an idea why this strange behavior occurs?

cheers
ingrid

                                               
</pre>
      <br>
      <fieldset class="mimeAttachmentHeader"></fieldset>
      <br>
      <pre wrap="">_______________________________________________
ADOL-C mailing list
<a class="moz-txt-link-abbreviated" href="mailto:ADOL-C@list.coin-or.org">ADOL-C@list.coin-or.org</a>
<a class="moz-txt-link-freetext" href="http://list.coin-or.org/mailman/listinfo/adol-c">http://list.coin-or.org/mailman/listinfo/adol-c</a></pre>
    </blockquote>
    <br>
  </body>
</html>