[Users] OpenMP is making it slower?
Scott Hawley
scott.hawley at belmont.edu
Wed May 18 17:33:49 CDT 2011
Ok. Still having problems.
I defaulted everything to private and explicitly declared my shared's. Now what happens is that the outer "k" loop never gets incremented.
Even if I run with only one thread, "k" always equals 1.
So the snippet of code follows. Where m_ex and m_ib are parameters in Fortran and are hard-coded as numbers by the compiler.
If I compile with -fopenmp it works fine, but at the -fopenmp and "setenv OMP_NUM_THREADS 1" and it won't increment.
Any new ideas? Thanks in advance.
-Scott
!$OMP PARALLEL DO DEFAULT(PRIVATE) SHARED(mask,ibonly,ax,ay,az,
!$OMP& agxx,agxy,agxz,agyy,agyz,agzz,
!$OMP& aKxx,aKxy,aKxz,aKyy,aKyz,aKzz,nx,ny,nz)
!$OMP& SCHEDULE(STATIC,chunk)
do k = 1, nz
write(msg,*)' setbkgrnd: ' //
& 'nz = ',nz,', % done = ',int(k*1.0d2/nz),' '
call writemessage(msg)
do j = 1, ny
do i = 1, nx
if (mask(i,j,k) .ne. m_ex .and.
& (ibonly .eq. 0 .or.
& mask(i,j,k) .eq. m_ib)) then
x = ax(i)
y = ay(j)
z = az(k)
include 'gd.inc'
include 'kd.inc'
agxx(i,j,k) = gxx
agxy(i,j,k) = gxy
agxz(i,j,k) = gxz
agyy(i,j,k) = gyy
agyz(i,j,k) = gyz
agzz(i,j,k) = gzz
aKxx(i,j,k) = Kxx
aKxy(i,j,k) = Kxy
aKxz(i,j,k) = Kxz
aKyy(i,j,k) = Kyy
aKyz(i,j,k) = Kyz
aKzz(i,j,k) = Kzz
else if (mask(i,j,k) .eq. m_ex) then
c Excised points
agxx(i,j,k) = exval
agxy(i,j,k) = exval
agxz(i,j,k) = exval
agyy(i,j,k) = exval
agyz(i,j,k) = exval
agzz(i,j,k) = exval
aKxx(i,j,k) = exval
aKxy(i,j,k) = exval
aKxz(i,j,k) = exval
aKyy(i,j,k) = exval
aKyz(i,j,k) = exval
aKzz(i,j,k) = exval
endif
enddo
enddo
enddo
There is no explicit OMP END DO statement because it's optional.
--
Scott H. Hawley, Ph.D. Asst. Prof. of Physics
Chemistry & Physics Dept Office: Hitch 100D
Belmont University Tel: +1-615-460-6206
Nashville, TN 37212 USA Fax: +1-615-460-5458
PGP Key at http://sks-keyservers.net
On May 18, 2011, at 4:37 PM, Scott Hawley wrote:
> Erik, Frank, Peter: Thanks guys. I will pursue your suggestions.
>
>
> --
> Scott H. Hawley, Ph.D. Asst. Prof. of Physics
> Chemistry & Physics Dept Office: Hitch 100D
> Belmont University Tel: +1-615-460-6206
> Nashville, TN 37212 USA Fax: +1-615-460-5458
> PGP Key at http://sks-keyservers.net
>
>
>
> On May 18, 2011, at 12:14 AM, Peter Diener wrote:
>
>> Hi Scott,
>>
>>
>> On Tue, 17 May 2011, Frank Loeffler wrote:
>>
>>> Hi,
>>>
>>> On Tue, May 17, 2011 at 03:02:00PM -0700, Scott Hawley wrote:
>>>> Do these all be need to be declared as private?
>>>
>>> If the temporary variables are declared only inside the loop they are
>>> automatically thread-local. Oh wait, that is Fortran. Well - in that
>>> case you should either declare all private, or (maybe easier) put the
>>> include files into separate functions, declare the temporary variables
>>> only there and call the functions from within the loop, in which case
>>> they also don't have to be specified for openmp (as long as they are not
>>> static).
>>>
>>>> i certainly don't want the various processors overwriting each others'
>>>> work, which might be what they're doing. -- maybe they're even
>>>> generating NaNs which would slow things down a bit!
>>
>> Alternatively you may use the DEFAULT(PRIVATE) clause, so that you only
>> have to specify the shared variables. However, in that case you have to
>> make sure to really declare all the shared variables as shared, since
>> otherwise all processors will have to allocate storage and if they are 3d
>> variables this will slow down the code and increase memory consumption.
>> Also private variables have undefined values on entry to the parallel
>> region so not declaring all shared variables properly can also adversely
>> affect the result. So be careful.
>>
>>> You should see that in the results though. It might make sense to first
>>> make sure that the results with different numbers of threads are the
>>> same (depending on the problem you might actually get bit-by-bit
>>> identical results), and work on optimization later. I agree that your
>>> slow-down actually points towards some bug.
>>>
>>> Frank
>>
>> Cheers,
>>
>> Peter
>>
>
> <PGP.sig><ATT00001..txt>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.einsteintoolkit.org/pipermail/users/attachments/20110518/58505fdf/attachment-0001.html
-------------- next part --------------
A non-text attachment was scrubbed...
Name: PGP.sig
Type: application/pgp-signature
Size: 535 bytes
Desc: This is a digitally signed message part
Url : http://lists.einsteintoolkit.org/pipermail/users/attachments/20110518/58505fdf/attachment-0001.bin
More information about the Users
mailing list