<?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 &amp;gt;&amp;gt; Without using LMASK?? in Intel® Moderncode for Parallel Architectures</title>
    <link>https://community.intel.com/t5/Intel-Moderncode-for-Parallel/OpenMP-performance-lower-than-expected/m-p/1021762#M6629</link>
    <description>&lt;P&gt;&amp;gt;&amp;gt; Without using LMASK??&lt;/P&gt;

&lt;PRE class="brush:fortran;"&gt;do k=1,km-1
&amp;nbsp; do kk=1,2

starttime = omp_get_wtime()

!$OMP PARALLEL PRIVATE(I,LdoWork)DEFAULT(SHARED)
&amp;nbsp;
!$omp do&amp;nbsp; 
do j=1,ny_block
&amp;nbsp; do i=1,nx_block
&amp;nbsp;&amp;nbsp;&amp;nbsp; LdoWork = TLT%K_LEVEL(i,j,bid) == k&amp;nbsp; .and.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;amp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; TLT%K_LEVEL(i,j,bid) &amp;lt; KMT(i,j,bid)&amp;nbsp; .and.&amp;nbsp; &amp;amp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; TLT%ZTW(i,j,bid) == 1
&amp;nbsp;&amp;nbsp;&amp;nbsp; if(LdoWork) then
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WORK1(i,j,kk) =&amp;nbsp; KAPPA_THIC(i,j,kbt,k,bid)&amp;nbsp; &amp;amp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * SLX(i,j,kk,kbt,k,bid) * dz(k)

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WORK2(i,j,kk) = c2 * dzwr(k) * ( WORK1(i,j,kk)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;amp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; - KAPPA_THIC(i,j,ktp,k+1,bid) * SLX(i,j,kk,ktp,k+1,bid) &amp;amp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * dz(k+1) )

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WORK2_NEXT(i,j) = c2 * ( &amp;amp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; KAPPA_THIC(i,j,ktp,k+1,bid) * SLX(i,j,kk,ktp,k+1,bid) - &amp;amp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; KAPPA_THIC(i,j,kbt,k+1,bid) * SLX(i,j,kk,kbt,k+1,bid) )

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WORK3(i,j,kk) =&amp;nbsp; KAPPA_THIC(i,j,kbt,k,bid)&amp;nbsp; &amp;amp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * SLY(i,j,kk,kbt,k,bid) * dz(k)

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WORK4(i,j,kk) = c2 * dzwr(k) * ( WORK3(i,j,kk)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;amp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; - KAPPA_THIC(i,j,ktp,k+1,bid) * SLY(i,j,kk,ktp,k+1,bid) &amp;amp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * dz(k+1) )

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WORK4_NEXT(i,j) = c2 * ( &amp;amp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; KAPPA_THIC(i,j,ktp,k+1,bid) * SLY(i,j,kk,ktp,k+1,bid) - &amp;amp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; KAPPA_THIC(i,j,kbt,k+1,bid) * SLY(i,j,kk,kbt,k+1,bid) )
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if( abs( WORK2_NEXT(i,j) ) &amp;lt; abs( WORK2(i,j,kk) ) ) then 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WORK2(i,j,kk) = WORK2_NEXT(i,j)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; endif
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if ( abs( WORK4_NEXT(i,j) ) &amp;lt; abs( WORK4(i,j,kk ) ) ) then 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WORK4(i,j,kk) = WORK4_NEXT(i,j)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; endif
&amp;nbsp;&amp;nbsp;&amp;nbsp; endif
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; LdoWork = TLT%K_LEVEL(i,j,bid) == k&amp;nbsp; .and.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;amp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; TLT%K_LEVEL(i,j,bid) &amp;lt; KMT(i,j,bid)&amp;nbsp; .and. &amp;amp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; TLT%ZTW(i,j,bid) == 2
&amp;nbsp;&amp;nbsp;&amp;nbsp; if(LdoWork) then
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WORK1(i,j,kk) =&amp;nbsp; KAPPA_THIC(i,j,ktp,k+1,bid)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;amp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * SLX(i,j,kk,ktp,k+1,bid)

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WORK2(i,j,kk) =&amp;nbsp; c2 * ( WORK1(i,j,kk)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;amp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; - ( KAPPA_THIC(i,j,kbt,k+1,bid)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;amp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * SLX(i,j,kk,kbt,k+1,bid) ) )

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WORK1(i,j,kk) = WORK1(i,j,kk) * dz(k+1)

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WORK3(i,j,kk) =&amp;nbsp; KAPPA_THIC(i,j,ktp,k+1,bid)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;amp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * SLY(i,j,kk,ktp,k+1,bid)

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WORK4(i,j,kk) =&amp;nbsp; c2 * ( WORK3(i,j,kk)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;amp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; - ( KAPPA_THIC(i,j,kbt,k+1,bid)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;amp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * SLY(i,j,kk,kbt,k+1,bid) ) )

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WORK3(i,j,kk) = WORK3(i,j,kk) * dz(k+1)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LdoWork = TLT%K_LEVEL(i,j,bid) + 1 &amp;lt; KMT(i,j,bid)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (k.lt.km-1) then ! added to avoid out of bounds access
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(LdoWOrk) then
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WORK2_NEXT(i,j) = c2 * dzwr(k+1) * ( &amp;amp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; KAPPA_THIC(i,j,kbt,k+1,bid) * SLX(i,j,kk,kbt,k+1,bid) * dz(k+1) - &amp;amp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; KAPPA_THIC(i,j,ktp,k+2,bid) * SLX(i,j,kk,ktp,k+2,bid) * dz(k+2))

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WORK4_NEXT(i,j) = c2 * dzwr(k+1) * ( &amp;amp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; KAPPA_THIC(i,j,kbt,k+1,bid) * SLY(i,j,kk,kbt,k+1,bid) * dz(k+1) - &amp;amp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; KAPPA_THIC(i,j,ktp,k+2,bid) * SLY(i,j,kk,ktp,k+2,bid) * dz(k+2))
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; endif
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; endif
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if( abs( WORK2_NEXT(i,j) ) &amp;lt; abs( WORK2(i,j,kk) ) ) &amp;amp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WORK2(i,j,kk) = WORK2_NEXT(i,j)

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if( abs(WORK4_NEXT(i,j)) &amp;lt; abs(WORK4(i,j,kk)) ) &amp;amp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WORK4(i,j,kk) = WORK4_NEXT(i,j)
&amp;nbsp;&amp;nbsp;&amp;nbsp; endif
&amp;nbsp; enddo
enddo
!$omp end do

!$OMP END PARALLEL

endtime = omp_get_wtime()

total = total + (endtime - starttime)

enddo
enddo
&lt;/PRE&gt;

&lt;P&gt;Jim Dempsey&lt;/P&gt;</description>
    <pubDate>Thu, 23 Jul 2015 15:25:00 GMT</pubDate>
    <dc:creator>jimdempseyatthecove</dc:creator>
    <dc:date>2015-07-23T15:25:00Z</dc:date>
    <item>
      <title>OpenMP performance lower than expected</title>
      <link>https://community.intel.com/t5/Intel-Moderncode-for-Parallel/OpenMP-performance-lower-than-expected/m-p/1021753#M6620</link>
      <description>&lt;P&gt;Hi all,&lt;/P&gt;

&lt;P&gt;below is the code I have been trying to parallelize with OpenMP&lt;/P&gt;

&lt;PRE class="brush:fortran;"&gt;do k=1,km-1

        do kk=1,2

          starttime = omp_get_wtime()

          !$OMP PARALLEL PRIVATE(I)DEFAULT(SHARED)
 
          !$omp do  
          do j=1,ny_block
           do i=1,nx_block
 
          LMASK(i,j) = TLT%K_LEVEL(i,j,bid) == k  .and.            &amp;amp;
                       TLT%K_LEVEL(i,j,bid) &amp;lt; KMT(i,j,bid)  .and.  &amp;amp;
                       TLT%ZTW(i,j,bid) == 1

           enddo
          enddo
          !$omp end do

          !$omp do 
          do j=1,ny_block
           do i=1,nx_block

            if ( LMASK(i,j) ) then 

            WORK1(i,j,kk) =  KAPPA_THIC(i,j,kbt,k,bid)  &amp;amp;
                           * SLX(i,j,kk,kbt,k,bid) * dz(k)

            WORK2(i,j,kk) = c2 * dzwr(k) * ( WORK1(i,j,kk)            &amp;amp;
              - KAPPA_THIC(i,j,ktp,k+1,bid) * SLX(i,j,kk,ktp,k+1,bid) &amp;amp;
                                            * dz(k+1) )

            WORK2_NEXT(i,j) = c2 * ( &amp;amp;
              KAPPA_THIC(i,j,ktp,k+1,bid) * SLX(i,j,kk,ktp,k+1,bid) - &amp;amp;
              KAPPA_THIC(i,j,kbt,k+1,bid) * SLX(i,j,kk,kbt,k+1,bid) )

            WORK3(i,j,kk) =  KAPPA_THIC(i,j,kbt,k,bid)  &amp;amp;
                           * SLY(i,j,kk,kbt,k,bid) * dz(k)

            WORK4(i,j,kk) = c2 * dzwr(k) * ( WORK3(i,j,kk)            &amp;amp;
              - KAPPA_THIC(i,j,ktp,k+1,bid) * SLY(i,j,kk,ktp,k+1,bid) &amp;amp;
                                            * dz(k+1) )

            WORK4_NEXT(i,j) = c2 * ( &amp;amp;
              KAPPA_THIC(i,j,ktp,k+1,bid) * SLY(i,j,kk,ktp,k+1,bid) - &amp;amp;
              KAPPA_THIC(i,j,kbt,k+1,bid) * SLY(i,j,kk,kbt,k+1,bid) )

            endif

            enddo
          enddo 
          !$omp end do 

           !$omp do 
           do j=1,ny_block
           do i=1,nx_block

              if( LMASK(i,j) .and. abs( WORK2_NEXT(i,j) ) &amp;lt; abs( WORK2(i,j,kk) ) ) then 

              WORK2(i,j,kk) = WORK2_NEXT(i,j)

              endif

           enddo
          enddo
          !$omp end do

          !$omp do 
          do j=1,ny_block
           do i=1,nx_block

           if ( LMASK(i,j) .and. abs( WORK4_NEXT(i,j) ) &amp;lt; abs( WORK4(i,j,kk ) ) ) then 
              WORK4(i,j,kk) = WORK4_NEXT(i,j)
           endif

           enddo
          enddo 
          !$omp end do 

          !$omp do 
          do j=1,ny_block
           do i=1,nx_block  

          LMASK(i,j) = TLT%K_LEVEL(i,j,bid) == k  .and.           &amp;amp;
                       TLT%K_LEVEL(i,j,bid) &amp;lt; KMT(i,j,bid)  .and. &amp;amp;
                       TLT%ZTW(i,j,bid) == 2

            enddo
          enddo
          !$omp end do

         !$omp do 
         do j=1,ny_block
           do i=1,nx_block


            if ( LMASK(i,j) ) then

            WORK1(i,j,kk) =  KAPPA_THIC(i,j,ktp,k+1,bid)     &amp;amp; 
                           * SLX(i,j,kk,ktp,k+1,bid)

            WORK2(i,j,kk) =  c2 * ( WORK1(i,j,kk)                 &amp;amp;
                           - ( KAPPA_THIC(i,j,kbt,k+1,bid)        &amp;amp;
                              * SLX(i,j,kk,kbt,k+1,bid) ) )

            WORK1(i,j,kk) = WORK1(i,j,kk) * dz(k+1)

            WORK3(i,j,kk) =  KAPPA_THIC(i,j,ktp,k+1,bid)     &amp;amp;
                           * SLY(i,j,kk,ktp,k+1,bid)

            WORK4(i,j,kk) =  c2 * ( WORK3(i,j,kk)                 &amp;amp;
                           - ( KAPPA_THIC(i,j,kbt,k+1,bid)        &amp;amp;
                              * SLY(i,j,kk,kbt,k+1,bid) ) )

            WORK3(i,j,kk) = WORK3(i,j,kk) * dz(k+1)

            endif
 
            enddo
          enddo
          !$omp end do   

          !$omp do 
          do j=1,ny_block
           do i=1,nx_block


          LMASK(i,j) = LMASK(i,j) .and. TLT%K_LEVEL(i,j,bid) + 1 &amp;lt; KMT(i,j,bid)

           enddo
          enddo
          !$omp end do

          if (k.lt.km-1) then ! added to avoid out of bounds access

           !$omp do 
           do j=1,ny_block
            do i=1,nx_block
 
            if( LMASK(i,j) ) then

              WORK2_NEXT(i,j) = c2 * dzwr(k+1) * ( &amp;amp;
                KAPPA_THIC(i,j,kbt,k+1,bid) * SLX(i,j,kk,kbt,k+1,bid) * dz(k+1) - &amp;amp;
                KAPPA_THIC(i,j,ktp,k+2,bid) * SLX(i,j,kk,ktp,k+2,bid) * dz(k+2))

              WORK4_NEXT(i,j) = c2 * dzwr(k+1) * ( &amp;amp;
                KAPPA_THIC(i,j,kbt,k+1,bid) * SLY(i,j,kk,kbt,k+1,bid) * dz(k+1) - &amp;amp;
                KAPPA_THIC(i,j,ktp,k+2,bid) * SLY(i,j,kk,ktp,k+2,bid) * dz(k+2))

              endif 

              enddo
            enddo
            !$omp end do
          end if
             
          !$omp do 
          do j=1,ny_block
            do i=1,nx_block


            if( LMASK(i,j) .and. abs( WORK2_NEXT(i,j) ) &amp;lt; abs( WORK2(i,j,kk) ) ) &amp;amp;
            WORK2(i,j,kk) = WORK2_NEXT(i,j)

            enddo
          enddo
          !$omp end do     

          !$omp do 
         do j=1,ny_block
            do i=1,nx_block


            if( LMASK(i,j) .and. abs(WORK4_NEXT(i,j)) &amp;lt; abs(WORK4(i,j,kk)) ) &amp;amp;
            WORK4(i,j,kk) = WORK4_NEXT(i,j)

             enddo
          enddo
          !$omp end do 

          !$OMP END PARALLEL

          endtime = omp_get_wtime()

          total = total + (endtime - starttime)

        enddo
      enddo&lt;/PRE&gt;

&lt;P&gt;The performance however is not as expected.&lt;/P&gt;

&lt;P&gt;With 4 threads there are only marginal improvements from 1.3 * 10-2 to 1 * 10-2&lt;/P&gt;

&lt;P&gt;I tried for more threads(16) and performance was only&amp;nbsp;6.06E-03 i.e 4X only(not scaling well either)&lt;/P&gt;

&lt;P&gt;Each of those i,j loops are 196*84.&lt;/P&gt;

&lt;P&gt;Also schedule Dynamic was not of much help either. and performance was same with chuncksize of 20.&lt;/P&gt;

&lt;P&gt;Collapse with dynamic and chunk size 20 made code slow with performance of 8*1-2&lt;/P&gt;

&lt;P&gt;Any help for Improvements??&lt;/P&gt;</description>
      <pubDate>Wed, 22 Jul 2015 09:56:51 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Moderncode-for-Parallel/OpenMP-performance-lower-than-expected/m-p/1021753#M6620</guid>
      <dc:creator>aketh_t_</dc:creator>
      <dc:date>2015-07-22T09:56:51Z</dc:date>
    </item>
    <item>
      <title>This has been posted and</title>
      <link>https://community.intel.com/t5/Intel-Moderncode-for-Parallel/OpenMP-performance-lower-than-expected/m-p/1021754#M6621</link>
      <description>&lt;P&gt;This has been posted and commented upon elsewhere.&lt;/P&gt;</description>
      <pubDate>Wed, 22 Jul 2015 10:37:19 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Moderncode-for-Parallel/OpenMP-performance-lower-than-expected/m-p/1021754#M6621</guid>
      <dc:creator>TimP</dc:creator>
      <dc:date>2015-07-22T10:37:19Z</dc:date>
    </item>
    <item>
      <title>Yes I agree.</title>
      <link>https://community.intel.com/t5/Intel-Moderncode-for-Parallel/OpenMP-performance-lower-than-expected/m-p/1021755#M6622</link>
      <description>&lt;P&gt;Yes I agree.&lt;/P&gt;

&lt;P&gt;1)I was told it was not the right place to post. So I reposted here.&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Wed, 22 Jul 2015 10:41:44 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Moderncode-for-Parallel/OpenMP-performance-lower-than-expected/m-p/1021755#M6622</guid>
      <dc:creator>aketh_t_</dc:creator>
      <dc:date>2015-07-22T10:41:44Z</dc:date>
    </item>
    <item>
      <title>The problem you have is you</title>
      <link>https://community.intel.com/t5/Intel-Moderncode-for-Parallel/OpenMP-performance-lower-than-expected/m-p/1021756#M6623</link>
      <description>&lt;P&gt;The problem you have is you have 10 !$omp do loops, together with the accompanying implicit barrier at end of each&amp;nbsp;loop.&lt;/P&gt;

&lt;P&gt;Rewrite your code to use 1 !$omp do loop without use of LMASK.&lt;/P&gt;

&lt;P&gt;Jim Dempsey&lt;/P&gt;</description>
      <pubDate>Wed, 22 Jul 2015 16:00:27 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Moderncode-for-Parallel/OpenMP-performance-lower-than-expected/m-p/1021756#M6623</guid>
      <dc:creator>jimdempseyatthecove</dc:creator>
      <dc:date>2015-07-22T16:00:27Z</dc:date>
    </item>
    <item>
      <title>Without using LMASK???</title>
      <link>https://community.intel.com/t5/Intel-Moderncode-for-Parallel/OpenMP-performance-lower-than-expected/m-p/1021757#M6624</link>
      <description>&lt;P&gt;Without using LMASK???&lt;/P&gt;</description>
      <pubDate>Thu, 23 Jul 2015 02:16:00 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Moderncode-for-Parallel/OpenMP-performance-lower-than-expected/m-p/1021757#M6624</guid>
      <dc:creator>aketh_t_</dc:creator>
      <dc:date>2015-07-23T02:16:00Z</dc:date>
    </item>
    <item>
      <title>If you like, start by fusing</title>
      <link>https://community.intel.com/t5/Intel-Moderncode-for-Parallel/OpenMP-performance-lower-than-expected/m-p/1021758#M6625</link>
      <description>&lt;P&gt;If you like, start by fusing those parallel regions so that at least your openmp version is consistent with the automatic fusion implemented by ifort in your single thread baseline. &amp;nbsp;I've forgotten how long ago this was suggested to you. &amp;nbsp;I suggested this be included in the parallelism training but I guess others are correct in advising that no one will be influenced by such suggestions.&lt;/P&gt;</description>
      <pubDate>Thu, 23 Jul 2015 04:58:36 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Moderncode-for-Parallel/OpenMP-performance-lower-than-expected/m-p/1021758#M6625</guid>
      <dc:creator>TimP</dc:creator>
      <dc:date>2015-07-23T04:58:36Z</dc:date>
    </item>
    <item>
      <title>Could you guys let me know</title>
      <link>https://community.intel.com/t5/Intel-Moderncode-for-Parallel/OpenMP-performance-lower-than-expected/m-p/1021759#M6626</link>
      <description>&lt;P&gt;Could you guys let me know the rationale for fusing loops in general make for better performance(even when we do not use openmp).&lt;/P&gt;

&lt;P&gt;Coz with OpenMP the issue is straight forward that threads do have to overcome a barrier. But even when there is no OpenMP I have found Loop fusuin helps.&lt;/P&gt;

&lt;P&gt;Any material/explanation why that work's??&amp;nbsp;&lt;/P&gt;

&lt;P&gt;Has it got anything to do with cache??&lt;/P&gt;</description>
      <pubDate>Thu, 23 Jul 2015 05:33:38 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Moderncode-for-Parallel/OpenMP-performance-lower-than-expected/m-p/1021759#M6626</guid>
      <dc:creator>aketh_t_</dc:creator>
      <dc:date>2015-07-23T05:33:38Z</dc:date>
    </item>
    <item>
      <title>thank you all.</title>
      <link>https://community.intel.com/t5/Intel-Moderncode-for-Parallel/OpenMP-performance-lower-than-expected/m-p/1021760#M6627</link>
      <description>&lt;P&gt;thank you all.&lt;/P&gt;

&lt;P&gt;My code seems to be doing well now with fusing of loops. the time taken is approx&amp;nbsp;2.63E-03.&lt;/P&gt;

&lt;P&gt;An improvement over original of&amp;nbsp;1.34E-02.&lt;/P&gt;

&lt;P&gt;The speedup is approximately 5x for 16 threads.&amp;nbsp;&lt;/P&gt;

&lt;P&gt;But it still isnt able to scale as well as expected.&lt;/P&gt;

&lt;P&gt;I tried omp collapse and schedule dynamic with chunk size 294. but performance has only been lower compared to the code without any schedule clause. approx 4.3E-03.&lt;/P&gt;

&lt;P&gt;Any suggestions??&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 23 Jul 2015 08:29:00 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Moderncode-for-Parallel/OpenMP-performance-lower-than-expected/m-p/1021760#M6627</guid>
      <dc:creator>aketh_t_</dc:creator>
      <dc:date>2015-07-23T08:29:00Z</dc:date>
    </item>
    <item>
      <title>With fusion, the repeated</title>
      <link>https://community.intel.com/t5/Intel-Moderncode-for-Parallel/OpenMP-performance-lower-than-expected/m-p/1021761#M6628</link>
      <description>&lt;P&gt;With fusion, the repeated references to lmask should be satisfied in register without even depending on cache.&lt;/P&gt;

&lt;P&gt;In the simpler cases, the non-fused loops are likely to need unroll by 4 to optimize performance, but this will lead to excessive code expansion, so the compiler will not do it unless requested.&amp;nbsp; Either way, fusion is a better solution.&amp;nbsp;&lt;/P&gt;

&lt;P&gt;For several years, Intel CPUs have tended to prefer to have 6 to 8 array sections stored per loop, in part so as to optimize use of fill buffers.&amp;nbsp; HyperThreading of course will impact this, as fill buffers are shared among logical siblings.&lt;/P&gt;

&lt;P&gt;The explanation about additional overhead for starting new openmp regions is not simple, as the thread pool will remain active if you don't zero out KMP_BLOCKTIME.&amp;nbsp; Still, the overhead for starting a new parallel region is clearly larger than for starting a new single thread nested loop, and it becomes at least proportionally larger with increased numbers of threads, as more than Amdahl's law is at play.&lt;/P&gt;

&lt;P&gt;At -O3, ifort will perform some automatic fusion or distribution so as to optimize the loops. but this optimization is not possible across OpenMP barriers.&amp;nbsp; So you were penalizing OpenMP by preventing optimizations for that case.&lt;/P&gt;

&lt;P&gt;You could analyze your code by profiling with VTune if you wished to verify to what extent memory bandwidth might account for non-linear scaling.&amp;nbsp; If you are trying to analyze penalties for not setting optimum affinity, I expect that to be difficult, in part due to non-repeatability.&lt;BR /&gt;
	&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 23 Jul 2015 12:07:23 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Moderncode-for-Parallel/OpenMP-performance-lower-than-expected/m-p/1021761#M6628</guid>
      <dc:creator>TimP</dc:creator>
      <dc:date>2015-07-23T12:07:23Z</dc:date>
    </item>
    <item>
      <title>&gt;&gt; Without using LMASK??</title>
      <link>https://community.intel.com/t5/Intel-Moderncode-for-Parallel/OpenMP-performance-lower-than-expected/m-p/1021762#M6629</link>
      <description>&lt;P&gt;&amp;gt;&amp;gt; Without using LMASK??&lt;/P&gt;

&lt;PRE class="brush:fortran;"&gt;do k=1,km-1
&amp;nbsp; do kk=1,2

starttime = omp_get_wtime()

!$OMP PARALLEL PRIVATE(I,LdoWork)DEFAULT(SHARED)
&amp;nbsp;
!$omp do&amp;nbsp; 
do j=1,ny_block
&amp;nbsp; do i=1,nx_block
&amp;nbsp;&amp;nbsp;&amp;nbsp; LdoWork = TLT%K_LEVEL(i,j,bid) == k&amp;nbsp; .and.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;amp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; TLT%K_LEVEL(i,j,bid) &amp;lt; KMT(i,j,bid)&amp;nbsp; .and.&amp;nbsp; &amp;amp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; TLT%ZTW(i,j,bid) == 1
&amp;nbsp;&amp;nbsp;&amp;nbsp; if(LdoWork) then
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WORK1(i,j,kk) =&amp;nbsp; KAPPA_THIC(i,j,kbt,k,bid)&amp;nbsp; &amp;amp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * SLX(i,j,kk,kbt,k,bid) * dz(k)

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WORK2(i,j,kk) = c2 * dzwr(k) * ( WORK1(i,j,kk)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;amp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; - KAPPA_THIC(i,j,ktp,k+1,bid) * SLX(i,j,kk,ktp,k+1,bid) &amp;amp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * dz(k+1) )

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WORK2_NEXT(i,j) = c2 * ( &amp;amp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; KAPPA_THIC(i,j,ktp,k+1,bid) * SLX(i,j,kk,ktp,k+1,bid) - &amp;amp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; KAPPA_THIC(i,j,kbt,k+1,bid) * SLX(i,j,kk,kbt,k+1,bid) )

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WORK3(i,j,kk) =&amp;nbsp; KAPPA_THIC(i,j,kbt,k,bid)&amp;nbsp; &amp;amp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * SLY(i,j,kk,kbt,k,bid) * dz(k)

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WORK4(i,j,kk) = c2 * dzwr(k) * ( WORK3(i,j,kk)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;amp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; - KAPPA_THIC(i,j,ktp,k+1,bid) * SLY(i,j,kk,ktp,k+1,bid) &amp;amp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * dz(k+1) )

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WORK4_NEXT(i,j) = c2 * ( &amp;amp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; KAPPA_THIC(i,j,ktp,k+1,bid) * SLY(i,j,kk,ktp,k+1,bid) - &amp;amp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; KAPPA_THIC(i,j,kbt,k+1,bid) * SLY(i,j,kk,kbt,k+1,bid) )
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if( abs( WORK2_NEXT(i,j) ) &amp;lt; abs( WORK2(i,j,kk) ) ) then 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WORK2(i,j,kk) = WORK2_NEXT(i,j)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; endif
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if ( abs( WORK4_NEXT(i,j) ) &amp;lt; abs( WORK4(i,j,kk ) ) ) then 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WORK4(i,j,kk) = WORK4_NEXT(i,j)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; endif
&amp;nbsp;&amp;nbsp;&amp;nbsp; endif
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; LdoWork = TLT%K_LEVEL(i,j,bid) == k&amp;nbsp; .and.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;amp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; TLT%K_LEVEL(i,j,bid) &amp;lt; KMT(i,j,bid)&amp;nbsp; .and. &amp;amp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; TLT%ZTW(i,j,bid) == 2
&amp;nbsp;&amp;nbsp;&amp;nbsp; if(LdoWork) then
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WORK1(i,j,kk) =&amp;nbsp; KAPPA_THIC(i,j,ktp,k+1,bid)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;amp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * SLX(i,j,kk,ktp,k+1,bid)

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WORK2(i,j,kk) =&amp;nbsp; c2 * ( WORK1(i,j,kk)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;amp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; - ( KAPPA_THIC(i,j,kbt,k+1,bid)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;amp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * SLX(i,j,kk,kbt,k+1,bid) ) )

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WORK1(i,j,kk) = WORK1(i,j,kk) * dz(k+1)

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WORK3(i,j,kk) =&amp;nbsp; KAPPA_THIC(i,j,ktp,k+1,bid)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;amp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * SLY(i,j,kk,ktp,k+1,bid)

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WORK4(i,j,kk) =&amp;nbsp; c2 * ( WORK3(i,j,kk)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;amp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; - ( KAPPA_THIC(i,j,kbt,k+1,bid)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;amp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * SLY(i,j,kk,kbt,k+1,bid) ) )

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WORK3(i,j,kk) = WORK3(i,j,kk) * dz(k+1)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LdoWork = TLT%K_LEVEL(i,j,bid) + 1 &amp;lt; KMT(i,j,bid)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (k.lt.km-1) then ! added to avoid out of bounds access
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(LdoWOrk) then
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WORK2_NEXT(i,j) = c2 * dzwr(k+1) * ( &amp;amp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; KAPPA_THIC(i,j,kbt,k+1,bid) * SLX(i,j,kk,kbt,k+1,bid) * dz(k+1) - &amp;amp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; KAPPA_THIC(i,j,ktp,k+2,bid) * SLX(i,j,kk,ktp,k+2,bid) * dz(k+2))

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WORK4_NEXT(i,j) = c2 * dzwr(k+1) * ( &amp;amp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; KAPPA_THIC(i,j,kbt,k+1,bid) * SLY(i,j,kk,kbt,k+1,bid) * dz(k+1) - &amp;amp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; KAPPA_THIC(i,j,ktp,k+2,bid) * SLY(i,j,kk,ktp,k+2,bid) * dz(k+2))
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; endif
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; endif
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if( abs( WORK2_NEXT(i,j) ) &amp;lt; abs( WORK2(i,j,kk) ) ) &amp;amp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WORK2(i,j,kk) = WORK2_NEXT(i,j)

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if( abs(WORK4_NEXT(i,j)) &amp;lt; abs(WORK4(i,j,kk)) ) &amp;amp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WORK4(i,j,kk) = WORK4_NEXT(i,j)
&amp;nbsp;&amp;nbsp;&amp;nbsp; endif
&amp;nbsp; enddo
enddo
!$omp end do

!$OMP END PARALLEL

endtime = omp_get_wtime()

total = total + (endtime - starttime)

enddo
enddo
&lt;/PRE&gt;

&lt;P&gt;Jim Dempsey&lt;/P&gt;</description>
      <pubDate>Thu, 23 Jul 2015 15:25:00 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Moderncode-for-Parallel/OpenMP-performance-lower-than-expected/m-p/1021762#M6629</guid>
      <dc:creator>jimdempseyatthecove</dc:creator>
      <dc:date>2015-07-23T15:25:00Z</dc:date>
    </item>
  </channel>
</rss>

