<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: Cannot understand the error reported by Thread Checker in Intel® Moderncode for Parallel Architectures</title>
    <link>https://community.intel.com/t5/Intel-Moderncode-for-Parallel/Cannot-understand-the-error-reported-by-Thread-Checker/m-p/993412#M6307</link>
    <description>Here is the report generated by Thread Checker.&lt;BR /&gt;&lt;BR /&gt;Olga</description>
    <pubDate>Sat, 26 Mar 2005 04:25:39 GMT</pubDate>
    <dc:creator>misty12</dc:creator>
    <dc:date>2005-03-26T04:25:39Z</dc:date>
    <item>
      <title>Cannot understand the error reported by Thread Checker</title>
      <link>https://community.intel.com/t5/Intel-Moderncode-for-Parallel/Cannot-understand-the-error-reported-by-Thread-Checker/m-p/993408#M6303</link>
      <description>Hello,&lt;BR /&gt;I have the following loop parallelized with openmp directives:&lt;BR /&gt;&lt;BR /&gt;do jg = 1,ng&lt;BR /&gt;c$omp parallel shared (jg,nr,nt,in,out) private (c1,i)&lt;BR /&gt;c$omp do schedule(dynamic,1)&lt;BR /&gt;   do i = 1, nr&lt;BR /&gt;c copying the column of the three-dimensional array to&lt;BR /&gt;c one-dimensional array c1 of the size nt&lt;BR /&gt;   c1 = in(0:nt-1,i,jg)&lt;BR /&gt;&lt;BR /&gt;c calling some function affecting c1&lt;BR /&gt;   f1 (c1,nt)&lt;BR /&gt;&lt;BR /&gt;c copying the transformed array to output three-&lt;BR /&gt;c dimensional array&lt;BR /&gt;   out(0:nt-1,i,jg) = c1&lt;BR /&gt;   enddo&lt;BR /&gt;c$omp end do nowait&lt;BR /&gt;c$omp end parallel&lt;BR /&gt;enddo&lt;BR /&gt;&lt;BR /&gt;While analyzing this code region with Thread Checker the read/write error is reported in this parallel region. But as I suppose there is no conflict in read/write access becuase each parallel thread deals with its own column of in and out arrays and  c1 array is private to the threads.&lt;BR /&gt;&lt;BR /&gt;How can I change this code to work properly? I can not exactly understand the nature of the error: whether it is impossible to declare the whole array c1 as private to the threads or the out array is treated as the instance i have to syncronyze access to.&lt;BR /&gt;&lt;BR /&gt;If anyone dealed with parallelization in terms of openmp, would you please help me?&lt;BR /&gt;&lt;BR /&gt;Thank you,&lt;BR /&gt;Olga</description>
      <pubDate>Fri, 25 Mar 2005 02:12:49 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Moderncode-for-Parallel/Cannot-understand-the-error-reported-by-Thread-Checker/m-p/993408#M6303</guid>
      <dc:creator>misty12</dc:creator>
      <dc:date>2005-03-25T02:12:49Z</dc:date>
    </item>
    <item>
      <title>Re: Cannot understand the error reported by Thread Checker</title>
      <link>https://community.intel.com/t5/Intel-Moderncode-for-Parallel/Cannot-understand-the-error-reported-by-Thread-Checker/m-p/993409#M6304</link>
      <description>&lt;DIV&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;/DIV&gt;
&lt;DIV&gt;Hello Olga,&lt;/DIV&gt;
&lt;DIV&gt;I need more of the source code to knowif your program is correct. For example, how is c1 declared? The code is incorrect if array c1 has an allocatable or pointer attribute because the private clause will only create a copy of the descriptor, not the full array.&lt;/DIV&gt;
&lt;DIV&gt;&lt;/DIV&gt;
&lt;DIV&gt;The threads could be overflowing their stacks. How large is nt? According to the Intel compiler documentation, the stacksize for OpenMP threads is only 2 MB for IA-32 and 4 MB for Itanium. What does Thread Checker report for stack usage?&lt;/DIV&gt;
&lt;DIV&gt;&lt;/DIV&gt;
&lt;DIV&gt;Thefunction f1might not bethreadsafe? Is f1 included in the Thread Checker analysis?&lt;/DIV&gt;
&lt;DIV&gt;&lt;/DIV&gt;
&lt;DIV&gt;Please provide more information.&lt;/DIV&gt;
&lt;DIV&gt;&lt;/DIV&gt;
&lt;DIV&gt;Best regards,&lt;/DIV&gt;
&lt;DIV&gt;Henry&lt;/DIV&gt;&lt;P&gt;Message Edited by hagabb on &lt;SPAN class="date_text"&gt;03-25-2005&lt;/SPAN&gt; &lt;SPAN class="time_text"&gt;08:35 AM&lt;/SPAN&gt;&lt;/P&gt;</description>
      <pubDate>Sat, 26 Mar 2005 00:13:53 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Moderncode-for-Parallel/Cannot-understand-the-error-reported-by-Thread-Checker/m-p/993409#M6304</guid>
      <dc:creator>Henry_G_Intel</dc:creator>
      <dc:date>2005-03-26T00:13:53Z</dc:date>
    </item>
    <item>
      <title>Re: Cannot understand the error reported by Thread Checker</title>
      <link>https://community.intel.com/t5/Intel-Moderncode-for-Parallel/Cannot-understand-the-error-reported-by-Thread-Checker/m-p/993410#M6305</link>
      <description>&lt;DIV&gt;
&lt;DIV&gt;Hello again Olga,&lt;/DIV&gt;
&lt;DIV&gt;If we assume that your OpenMP code is correct, it's possible that Thread Checkeris notcorrectly analyzing theFortran 90 array notation. Try replacing the array statements with explicit loops:&lt;/DIV&gt;
&lt;DIV&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT face="Courier New"&gt; do j = 1, nt&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT face="Courier New"&gt; c1(j) = in(0:nt-1, i, jg)&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT face="Courier New"&gt; enddo&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT face="Courier New"&gt;&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT face="Courier New"&gt; f1 (c1, nt)&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT face="Courier New"&gt;&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT face="Courier New"&gt; do j = 1, nt&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT face="Courier New"&gt; out(0:nt-1, i, jg) = c1&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT face="Courier New"&gt; enddo&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;/DIV&gt;
&lt;DIV&gt;If the read/write conflict disappears, it's a Thread Checker bug.&lt;/DIV&gt;
&lt;DIV&gt;&lt;/DIV&gt;
&lt;DIV&gt;Best regards,&lt;/DIV&gt;
&lt;DIV&gt;Henry&lt;/DIV&gt;&lt;/DIV&gt;</description>
      <pubDate>Sat, 26 Mar 2005 00:37:05 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Moderncode-for-Parallel/Cannot-understand-the-error-reported-by-Thread-Checker/m-p/993410#M6305</guid>
      <dc:creator>Henry_G_Intel</dc:creator>
      <dc:date>2005-03-26T00:37:05Z</dc:date>
    </item>
    <item>
      <title>Re: Cannot understand the error reported by Thread Checker</title>
      <link>https://community.intel.com/t5/Intel-Moderncode-for-Parallel/Cannot-understand-the-error-reported-by-Thread-Checker/m-p/993411#M6306</link>
      <description>Hello, Henry&lt;BR /&gt;&lt;BR /&gt;Thank you for your answer. My c1 array is declared as local automatic array. Maybe the problem is the stack size. I've applied the attachment with the source code of the procedure. In my example ng = 2, nt = 1024 and nr = 450. Changing implicit loops on the explicit ones didn't help, the problem remains, so I also apply the report of the thread checker in the next message.&lt;BR /&gt;Thanks,&lt;BR /&gt;Olga</description>
      <pubDate>Sat, 26 Mar 2005 04:23:09 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Moderncode-for-Parallel/Cannot-understand-the-error-reported-by-Thread-Checker/m-p/993411#M6306</guid>
      <dc:creator>misty12</dc:creator>
      <dc:date>2005-03-26T04:23:09Z</dc:date>
    </item>
    <item>
      <title>Re: Cannot understand the error reported by Thread Checker</title>
      <link>https://community.intel.com/t5/Intel-Moderncode-for-Parallel/Cannot-understand-the-error-reported-by-Thread-Checker/m-p/993412#M6307</link>
      <description>Here is the report generated by Thread Checker.&lt;BR /&gt;&lt;BR /&gt;Olga</description>
      <pubDate>Sat, 26 Mar 2005 04:25:39 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Moderncode-for-Parallel/Cannot-understand-the-error-reported-by-Thread-Checker/m-p/993412#M6307</guid>
      <dc:creator>misty12</dc:creator>
      <dc:date>2005-03-26T04:25:39Z</dc:date>
    </item>
  </channel>
</rss>

