PGI User Forum
 SearchSearch   MemberlistMemberlist     RegisterRegister   ProfileProfile    Log inLog in 

CUDA-x86.

PVF 13.4 compiler?
Goto page 1, 2  Next
 
Post new topic   Reply to topic    PGI User Forum Forum Index -> Programming and Compiling
View previous topic :: View next topic  
Author Message
deeppow



Joined: 02 Feb 2012
Posts: 51

PostPosted: Mon May 06, 2013 5:38 pm    Post subject: PVF 13.4 compiler? Reply with quote

Started out with the routine (edited to be simpler) as shown:
Code:

!DK STATIONARY_RECHECK
      SUBROUTINE STATIONARY_RECHECK
      IMPLICIT NONE
!
      INCLUDE 'paramset.fi'
      INCLUDE 'dziinfo.fi'
      INCLUDE 'gopt.fi'
      INCLUDE 'gtime.fi'
      INCLUDE 'heating.fi'
      INCLUDE 'sites.fi'
      INCLUDE 'stationary.fi'
      INCLUDE 'stem_status.fi'
      INCLUDE 'vapor.fi'
      INCLUDE 'write.fi'
!
! Local variables
!
      INTEGER :: i, j, k, idiff, idiff_last
      INTEGER :: min_num_occurances
      INTEGER :: count_min_sites
      INTEGER, DIMENSION(ndrymax) :: tau_counter
      INTEGER, DIMENSION(ndrymax) :: mult_min_sites
      INTEGER, DIMENSION(100,ndrymax) :: stems_each_multiple
!
!
!     RECHECK HOVERING PERIODS BASED ON THE ONES THAT OCCUR INFREQUENTLY.
!     LONG STATIONARY PERIODS NOT FOUND MIGHT BE BASED ON THESE.
!
      min_num_occurances = COUNTCHANGINGSITES(1)
      mult_min_sites(1) = CHANGINGSITES(1)
      count_min_sites = 1
     
      DO i=2,countchanging
         IF ( COUNTCHANGINGSITES(i)<=min_num_occurances ) THEN
            IF ( COUNTCHANGINGSITES(i)==min_num_occurances ) THEN
               count_min_sites = count_min_sites + 1
               mult_min_sites(count_min_sites) = CHANGINGSITES(i)
            ELSE
               min_num_occurances = COUNTCHANGINGSITES(i)
            ENDIF
         ENDIF
      ENDDO
     
      DO j=1,total_num_taus
         tau_counter(j) = 0
      ENDDO
   
      WRITE (6,99030) count_min_sites
      WRITE (6,99040) (mult_min_sites(i),i=1,count_min_sites)
.
.
.
.
.
.     
      RETURN
!
!     FORMAT STATEMENTS
99030 FORMAT (//,i3,' multiple sites with least number of intermediate activations')
99040 FORMAT ('   Sites are', 10i4)
!
      END SUBROUTINE STATIONARY_RECHECK


The problem lies in this section of code
Code:

      DO j=1,total_num_taus
         tau_counter(j) = 0
      ENDDO
 


It overwrites
mult_min_sites(i),i=1,count_min_sites
with zeros.

To show this, I put write statements around that section of the code, i.e.
Code:

      WRITE (6,99040) (mult_min_sites(i),i=1,count_min_sites)
      DO j=1,total_num_taus
         tau_counter(j) = 0
      ENDDO
      WRITE (6,99040) (mult_min_sites(i),i=1,count_min_sites)

that produces the following two lines of printout
Sites are 15 143
Sites are 0 0

I can move the problem code to the first executable part of the routine so that
Code:

!DK STATIONARY_RECHECK
      SUBROUTINE STATIONARY_RECHECK
      IMPLICIT NONE
!
      INCLUDE 'paramset.fi'
      INCLUDE 'dziinfo.fi'
      INCLUDE 'gopt.fi'
      INCLUDE 'gtime.fi'
      INCLUDE 'heating.fi'
      INCLUDE 'sites.fi'
      INCLUDE 'stationary.fi'
      INCLUDE 'stem_status.fi'
      INCLUDE 'vapor.fi'
      INCLUDE 'write.fi'
!
! Local variables
!
      INTEGER :: i, j, k, idiff, idiff_last
      INTEGER :: min_num_occurances
      INTEGER :: count_min_sites
      INTEGER, DIMENSION(ndrymax) :: tau_counter
      INTEGER, DIMENSION(ndrymax) :: mult_min_sites
      INTEGER, DIMENSION(100,ndrymax) :: stems_each_multiple
!
!
!     RECHECK HOVERING PERIODS BASED ON THE ONES THAT OCCUR INFREQUENTLY.
!     LONG STATIONARY PERIODS NOT FOUND MIGHT BE BASED ON THESE.
!
      DO j=1,total_num_taus
         tau_counter(j) = 0
      ENDDO
     
      min_num_occurances = COUNTCHANGINGSITES(1)
      mult_min_sites(1) = CHANGINGSITES(1)
      count_min_sites = 1
     
      DO i=2,countchanging
         IF ( COUNTCHANGINGSITES(i)<=min_num_occurances ) THEN
            IF ( COUNTCHANGINGSITES(i)==min_num_occurances ) THEN
               count_min_sites = count_min_sites + 1
               mult_min_sites(count_min_sites) = CHANGINGSITES(i)
            ELSE
               min_num_occurances = COUNTCHANGINGSITES(i)
            ENDIF
         ENDIF
      ENDDO
   
      WRITE (6,99030) count_min_sites
      WRITE (6,99040) (mult_min_sites(i),i=1,count_min_sites)
.
.
.
.
.



and the correct output is yielded.

Using PVF 13.4, with the following compiler options:
-Bstatic -Mbackslash -I"F:\Macro3d\PGI\PGI_5-5-2013\Include Files" -I"d:\program files\pgi\win64\13.4\include" -I"D:\Program Files\PGI\Microsoft Open Tools 11\include" -I"D:\Program Files\PGI\Microsoft Open Tools 11\PlatformSDK\include" -fastsse -Mipa=fast,inline -O3 -Mvect=simd:256 -Minline -Munroll=n:4 -Mconcur -tp=sandybridge-64 -Minform=warn -Mkeepasm -Minfo=accel,ftn,inline,loop,opt,par,vect

Is there a problem or did I miss something?

Thanks for your assistance.
Back to top
View user's profile
mkcolg



Joined: 30 Jun 2004
Posts: 6134
Location: The Portland Group Inc.

PostPosted: Tue May 07, 2013 9:55 am    Post subject: Reply with quote

Hi Ralph,

What's the values for "ndrymax" and "total_num_taus"?

My best guess is that you're writing beyond the end of "tau_counter". When using "-Mconcur" or "-mp", automatics are allocated on the stack, meaning that if you are writing beyond the end of "tau_counter", you're writing in "mult_min_sites".

If that's not it, then I'll need a reproducing example to determine the cause.

- Mat
Back to top
View user's profile
deeppow



Joined: 02 Feb 2012
Posts: 51

PostPosted: Tue May 07, 2013 9:49 pm    Post subject: Reply with quote

Matt,

Yes, that's it. Loop should be out to ndrymax, not total_num_taus. Thanks.

If I turn on array bounds checking, how would it show me the problem? An output file somewhere or does the program stop. Assume it would slow the program execution down significantly?


-ralph
Back to top
View user's profile
mkcolg



Joined: 30 Jun 2004
Posts: 6134
Location: The Portland Group Inc.

PostPosted: Wed May 08, 2013 8:59 am    Post subject: Reply with quote

Hi Ralph,

Quote:
If I turn on array bounds checking, how would it show me the problem?
If the bounds of the array is known, which is the case here, then yes.

Quote:
An output file somewhere or does the program stop. Assume it would slow the program execution down significantly?
The program stops. It will slow it down a bit but not significantly. It's not a flag you'd use for your final production, just during debugging.

- Mat
Back to top
View user's profile
deeppow



Joined: 02 Feb 2012
Posts: 51

PostPosted: Wed May 08, 2013 10:22 am    Post subject: Reply with quote

Matt,

Only debugging?

Strange it shows up as an option within the PVF options (run-time options under VS2008) when you've selected highly optimized, etc. It must have reset things without telling me --- still seems to indicate it is a released version within the properties but runs very slowly (like a debug version).

Glitch in the interface? Of course, I could be the glitch.

-ralph
Back to top
View user's profile
Display posts from previous:   
Post new topic   Reply to topic    PGI User Forum Forum Index -> Programming and Compiling All times are GMT - 7 Hours
Goto page 1, 2  Next
Page 1 of 2

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © phpBB Group