/[MITgcm]/MITgcm/eesupp/src/timers.F
ViewVC logotype

Diff of /MITgcm/eesupp/src/timers.F

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph | View Patch Patch

revision 1.20 by ce107, Thu Dec 22 01:03:29 2005 UTC revision 1.21 by ce107, Fri May 5 19:00:28 2006 UTC
# Line 165  C     nTimers      :: Number of active t Line 165  C     nTimers      :: Number of active t
165        PARAMETER ( PRINT = 'PRINT' )        PARAMETER ( PRINT = 'PRINT' )
166        CHARACTER*(*) PRINTALL        CHARACTER*(*) PRINTALL
167        PARAMETER ( PRINTALL = 'PRINTALL' )        PARAMETER ( PRINTALL = 'PRINTALL' )
168  #ifdef USE_PAPI  #if defined(USE_PAPI) || defined(USE_PCL_FLOPS_SFP) || defined(USE_PCL_FLOPS) || defined (USE_PCL)
 #include <fpapi.h>  
       INTEGER PAPIF_num_counters  
       EXTERNAL PAPIF_num_counters  
169        CHARACTER*(*) INIT        CHARACTER*(*) INIT
       CHARACTER(13) EventName  
170        PARAMETER ( INIT = 'INIT' )        PARAMETER ( INIT = 'INIT' )
171    #ifdef USE_PAPI
172        INTEGER nmaxevents        INTEGER nmaxevents
173        PARAMETER (nmaxevents = 18)        PARAMETER (nmaxevents = 18)
174        INTEGER EventCode(nmaxevents)        INTEGER neventsmax, nevents
175          SAVE neventsmax, nevents
176        INTEGER*8 values(nmaxevents, maxTimers , MAX_NO_THREADS),        INTEGER*8 values(nmaxevents, maxTimers , MAX_NO_THREADS),
177       $     values1(nmaxevents, maxTimers, MAX_NO_THREADS),       $     values1(nmaxevents, maxTimers, MAX_NO_THREADS),
178       $     values2(nmaxevents, maxTimers, MAX_NO_THREADS)       $     values2(nmaxevents, maxTimers, MAX_NO_THREADS)
179        COMMON /papivalues/ values, values1, values2        COMMON /papivalues/ values, values1, values2
180        INTEGER neventsmax, nevents, Check, EventSet  #include <fpapi.h>
181          CHARACTER(13) EventName
182          INTEGER EventCode(nmaxevents)
183          INTEGER Check, EventSet
184        INTEGER papiunit        INTEGER papiunit
185        SAVE EventCode, neventsmax, nevents, EventSet        SAVE EventCode, EventSet
186    #else
187    #if defined(USE_PCL_FLOPS_SFP) || defined(USE_PCL_FLOPS) || defined(USE_PCL)
188    #include <pclh.f>
189          INTEGER nmaxevents
190          PARAMETER (nmaxevents = 61)
191          INTEGER flags, res, nevents
192          INTEGER*8 descr
193          CHARACTER*22 pcl_counter_name(0:nmaxevents-1)
194    #ifdef USE_PCL
195          INTEGER pcl_counter_list(nmaxevents)
196          INTEGER*8 i_result(nmaxevents, maxTimers, MAX_NO_THREADS)
197          INTEGER*8 i_result1(nmaxevents, maxTimers, MAX_NO_THREADS)
198          INTEGER*8 i_result2(nmaxevents, maxTimers, MAX_NO_THREADS)
199          REAL*8 fp_result(nmaxevents, maxTimers, MAX_NO_THREADS)
200    #else
201          INTEGER pcl_counter_list(5), alt_counter_list(5)
202          INTEGER*8 i_result(5)
203          REAL*8 fp_result(5)
204          SAVE alt_counter_list
205          DATA alt_counter_list /PCL_MFLOPS, PCL_IPC, PCL_L1DCACHE_MISSRATE,
206         $     PCL_L2DCACHE_MISSRATE, PCL_MEM_FP_RATIO/
207    #endif
208          COMMON /pclvars/ i_result, descr, fp_result, pcl_counter_list,
209         $     flags, nevents
210          COMMON /pclnames/ pcl_counter_name
211          INTEGER pclunit
212    #endif
213    #endif
214  #endif  #endif
215        INTEGER I, J        INTEGER I, J
216        Real*8 userTime        Real*8 userTime
# Line 235  C Line 264  C
264            timerStarts(iTimer,myThreadId) =            timerStarts(iTimer,myThreadId) =
265       &       timerStarts(iTimer,myThreadId)+1       &       timerStarts(iTimer,myThreadId)+1
266  #ifdef USE_PAPI  #ifdef USE_PAPI
267  CCE107 - Read event counts  CCE107 PAPI - Read event counts
268            call PAPIF_read(EventSet, values1(1,iTimer,myThreadId), Check)            call PAPIF_read(EventSet, values1(1,iTimer,myThreadId), Check)
269    #else
270    #ifdef USE_PCL
271    CCE107 PCL - Read event counts
272              res = PCLread(descr, i_result1(1,iTimer,myThreadId),
273         $         fp_result(1,iTimer,myThreadId), nevents)
274    #endif
275  #endif  #endif
276          ENDIF          ENDIF
277  #ifdef USE_LIBHPM  #ifdef USE_LIBHPM
# Line 251  CCE107 - Read event counts Line 286  CCE107 - Read event counts
286  #ifdef USE_PAPI  #ifdef USE_PAPI
287  CCE107 PAPI - Read event counts  CCE107 PAPI - Read event counts
288            call PAPIF_read(EventSet, values2(1,iTimer,myThreadId), Check)            call PAPIF_read(EventSet, values2(1,iTimer,myThreadId), Check)
289    #else
290    #ifdef USE_PCL
291    CCE107 PCL - Read event counts
292              res = PCLread(descr, i_result2(1,iTimer,myThreadId),
293         $         fp_result(1,iTimer,myThreadId), nevents)
294    #endif
295  #endif  #endif
296            CALL TIMER_GET_TIME( userTime, systemTime, wallClockTime )            CALL TIMER_GET_TIME( userTime, systemTime, wallClockTime )
297            timerUser(iTimer,myThreadId)    =            timerUser(iTimer,myThreadId)    =
# Line 270  CCE107 PAPI - Read event counts Line 311  CCE107 PAPI - Read event counts
311               values(i,iTimer,myThreadId) = values(i,iTimer,myThreadId) +               values(i,iTimer,myThreadId) = values(i,iTimer,myThreadId) +
312       $       values2(i,iTimer,myThreadId) - values1(i,iTimer,myThreadId)       $       values2(i,iTimer,myThreadId) - values1(i,iTimer,myThreadId)
313            enddo            enddo
314    #else
315    #ifdef USE_PCL
316              do i=1,nevents
317                 i_result(i,iTimer,myThreadId) = i_result(i,iTimer
318         $            ,myThreadId) + i_result2(i,iTimer,myThreadId) -
319         $            i_result1(i,iTimer,myThreadId)
320              enddo
321    #endif
322  #endif  #endif
323            timerStatus(iTimer,myThreadId)  = STOPPED            timerStatus(iTimer,myThreadId)  = STOPPED
324            timerStops (iTimer,myThreadId)  =            timerStops (iTimer,myThreadId)  =
325       &    timerStops (iTimer,myThreadId)+1       &    timerStops (iTimer,myThreadId)+1
326          ENDIF          ENDIF
327  #ifdef USE_PAPI  #if defined (USE_PAPI) || defined (USE_PCL_FLOPS_SFP) || defined(USE_PCL_FLOPS) || defined(USE_PCL)
328        ELSEIF ( tmpAction .EQ. INIT ) THEN        ELSEIF ( tmpAction .EQ. INIT ) THEN
329    #ifdef USE_PAPI
330  CCE107 PAPI - Check PAPI version, find the maximum number of events and  CCE107 PAPI - Check PAPI version, find the maximum number of events and
331  C      initialize the library, read the suggested events and create  C      initialize the library, read the suggested events and create
332  C      EventSet, prepare counter for use  C      EventSet, prepare counter for use
# Line 288  C      EventSet, prepare counter for use Line 338  C      EventSet, prepare counter for use
338       &           SQUEEZE_RIGHT,myThreadId)       &           SQUEEZE_RIGHT,myThreadId)
339              CALL ABORT              CALL ABORT
340           endif           endif
341           neventsmax = PAPIF_num_counters(check)           call PAPIF_num_counters(neventsmax)
342           if (neventsmax .GT. nmaxevents) then           if (neventsmax .GT. nmaxevents) then
343              WRITE(msgBuffer,*) "Fix the nmaxevents in the code to ",              WRITE(msgBuffer,*) "Fix the nmaxevents in the code to ",
344       $           neventsmax       $           neventsmax
# Line 306  C       reset to reasonable values Line 356  C       reset to reasonable values
356             WRITE(msgBuffer,*)             WRITE(msgBuffer,*)
357       $          "resetting the number of PAPI events to the maximum"       $          "resetting the number of PAPI events to the maximum"
358             CALL PRINT_MESSAGE(msgBuffer,errorMessageUnit,             CALL PRINT_MESSAGE(msgBuffer,errorMessageUnit,
359       &           SQUEEZE_RIGHT,myThreadId)       &          SQUEEZE_RIGHT,myThreadId)
360          endif          endif
361          do i = 1,nevents          do i = 1,nevents
362            read(papiunit,*) EventName             read(papiunit,*) EventName
363            call PAPIF_event_name_to_code(EventName, EventCode(i), Check)             if ((EventName .eq. 'PAPI_FLOPS') .or.
364         $          (EventName .eq. 'PAPI_IPS')) then
365                  WRITE(msgBuffer,*) "Abort! Rate events are not supported:"
366         $             ,EventName
367                  CALL PRINT_MESSAGE(msgBuffer,errorMessageUnit,
368         &             SQUEEZE_RIGHT,myThreadId)
369                  CALL ABORT
370               endif
371    
372               call PAPIF_event_name_to_code(EventName, EventCode(i), Check)
373          end do          end do
374          close(papiunit)          close(papiunit)
375          _END_MASTER(myThid)          _END_MASTER(myThid)
# Line 330  C       reset to reasonable values Line 389  C       reset to reasonable values
389          enddo          enddo
390  CCE107 - Start counting events  CCE107 - Start counting events
391          call PAPIF_start(EventSet, Check)          call PAPIF_start(EventSet, Check)
392    #else
393    #if defined(USE_PCL_FLOPS_SFP) || defined(USE_PCL_FLOPS) || defined(USE_PCL)
394    CCE107 PCL - initialize the library, read the suggested events
395    C      and check them
396            res = PCLinit(descr)
397    
398    #ifdef USE_PCL
399            _BEGIN_MASTER(myThreadId)
400            CALL mdsFindUnit (pclunit, myThreadId)
401            OPEN(UNIT=pclunit,FILE='data.pcl',STATUS='OLD')
402            read(pclunit,*) nevents
403    C     reset to reasonable values
404            if (nevents .gt. nmaxevents) then
405               nevents = nmaxevents
406               WRITE(msgBuffer,*)
407         $          "resetting the number of PCL events to the maximum"
408               CALL PRINT_MESSAGE(msgBuffer,errorMessageUnit,
409         &          SQUEEZE_RIGHT,myThreadId)
410            endif
411            do i = 1,nevents
412               read(pclunit,*) pcl_counter_list(i)
413               if ((pcl_counter_list(i) .ge. PCL_MFLOPS) .or.
414         $          (pcl_counter_list(i) .lt. 1)) then
415                  if ((pcl_counter_list(i) .ge. PCL_MFLOPS) .and.
416         $             (pcl_counter_list(i) .le. nmaxevents)) then
417                     WRITE(msgBuffer,*)
418         $                "Abort! Rate events are not relevant:",
419         $                pcl_counter_name(pcl_counter_list(i))
420                  else
421                     WRITE(msgBuffer,*)
422         $                "Abort! Events are not defined:",
423         $                pcl_counter_list(i)
424                  endif
425                  CALL PRINT_MESSAGE(msgBuffer,errorMessageUnit,
426         &             SQUEEZE_RIGHT,myThreadId)
427                  CALL ABORT
428               endif
429            enddo
430            close(pclunit)
431            _END_MASTER(myThid)
432    
433            do i = 1,nevents
434    CCE107 check to see that event are supported in the order asked
435               res = PCLquery(descr, pcl_counter_list, i, flags)
436               IF(res .NE. PCL_SUCCESS) THEN
437                  WRITE(msgBuffer,*) "Abort! No support when adding event: "
438         $             , pcl_counter_name(pcl_counter_list(i))
439                  CALL PRINT_MESSAGE(msgBuffer,errorMessageUnit,
440         &             SQUEEZE_RIGHT,myThreadId)
441                  CALL ABORT
442               endif
443            enddo
444    #else
445            do i = 1,5
446    CCE107 check to see which rate events are supported.
447               res = PCLquery(descr, pcl_counter_list, nevents+1, flags)
448               if ((res .ne. PCL_SUCCESS) .and. (i .lt. 5)) then
449                  pcl_counter_list(nevents+1) = alt_counter_list(i+1)
450               else
451                  if (i .lt. 5) then
452                     nevents = nevents + 1
453                  endif
454               endif
455            enddo
456            if (nevents .eq. 0) then
457               WRITE(msgBuffer,*)
458         $          "No PCL rate events supported: Please recompile!"
459               CALL PRINT_MESSAGE(msgBuffer,errorMessageUnit,
460         &          SQUEEZE_RIGHT,myThreadId)
461               CALL ABORT
462            endif
463    #endif
464    
465    CCE107 - Start counting events
466            res = PCLstart(descr, pcl_counter_list, nevents, flags)
467            IF(res .NE. PCL_SUCCESS) THEN
468               WRITE(msgBuffer,*) "PCL counting failed - please recompile!"
469               CALL PRINT_MESSAGE(msgBuffer,errorMessageUnit,
470         &          SQUEEZE_RIGHT,myThreadId)
471               CALL ABORT
472            ENDIF
473    #endif
474    #endif
475  #endif  #endif
476        ELSEIF ( tmpAction .EQ. PRINT ) THEN        ELSEIF ( tmpAction .EQ. PRINT ) THEN
477          IF ( iTimer .EQ. 0 ) GOTO 905          IF ( iTimer .EQ. 0 ) GOTO 905
# Line 362  CCE107 - Start counting events Line 504  CCE107 - Start counting events
504  #ifdef USE_PAPI  #ifdef USE_PAPI
505          do i = 1,nevents          do i = 1,nevents
506             call PAPIF_event_code_to_name(EventCode(i), EventName, Check)             call PAPIF_event_code_to_name(EventCode(i), EventName, Check)
507             if ((EventName .ne. 'PAPI_FLOPS   ') .and.             WRITE(msgBuffer,71) Eventname,
508       $         (EventName .ne. 'PAPI_IPS     ')) then       $          values(i,iTimer,myThreadId)/timerUser(iTimer,myThreadId)
509                 WRITE(msgBuffer,71) Eventname,       $          ,values(i,iTimer,myThreadId)/timerWall(iTimer,myThreadId
510       $         values(i,iTimer,myThreadId)/timerUser(iTimer,myThreadId),       $          ),1.D0*values(i,iTimer,myThreadId)
511       $         values(i,iTimer,myThreadId)/timerWall(iTimer,myThreadId),             CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,
512       $         1.D0*values(i,iTimer,myThreadId)       &          SQUEEZE_RIGHT,myThreadId)
513             else          enddo
514                 WRITE(msgBuffer,72) Eventname,1.D0*values(j,I,myThreadId)  #else
515             endif  #ifdef USE_PCL
516            do i = 1,nevents
517               WRITE(msgBuffer,71) pcl_counter_name(pcl_counter_list(i)),
518         $          i_result(i,iTimer,myThreadId)/timerUser(iTimer
519         $          ,myThreadId),i_result(i,iTimer,myThreadId)
520         $          /timerWall(iTimer,myThreadId),1.D0*i_result(i,iTimer
521         $          ,myThreadId)
522             CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,             CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,
523       &          SQUEEZE_RIGHT,myThreadId)       &          SQUEEZE_RIGHT,myThreadId)
524          enddo          enddo
525  #endif  #endif
526    #endif
527        ELSEIF ( tmpAction .EQ. PRINTALL ) THEN        ELSEIF ( tmpAction .EQ. PRINTALL ) THEN
528          DO 10 I = 1, nTimers(myThreadId)          DO 10 I = 1, nTimers(myThreadId)
529           WRITE(msgBuffer,*) ' Seconds in section "',           WRITE(msgBuffer,*) ' Seconds in section "',
# Line 405  CCE107 - Start counting events Line 554  CCE107 - Start counting events
554  #ifdef USE_PAPI  #ifdef USE_PAPI
555          do j = 1,nevents          do j = 1,nevents
556             call PAPIF_event_code_to_name(EventCode(j), EventName, Check)             call PAPIF_event_code_to_name(EventCode(j), EventName, Check)
557             if ((EventName .ne. 'PAPI_FLOPS   ') .and.             WRITE(msgBuffer,71) Eventname,
558       $         (EventName .ne. 'PAPI_IPS     ')) then       $          values(j,I,myThreadId)/timerUser(I,myThreadId),
559                 WRITE(msgBuffer,71) Eventname,       $          values(j,I,myThreadId)/timerWall(I,myThreadId),
560       $             values(j,I,myThreadId)/timerUser(I,myThreadId),       $          1.D0*values(j,I,myThreadId)
561       $             values(j,I,myThreadId)/timerWall(I,myThreadId),             CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,
562       $             1.D0*values(j,I,myThreadId)       &          SQUEEZE_RIGHT,myThreadId)
563             else          enddo
564                 WRITE(msgBuffer,72) Eventname,1.D0*values(j,I,myThreadId)  #else
565             endif  #ifdef USE_PCL
566            do j = 1,nevents
567               WRITE(msgBuffer,71) pcl_counter_name(pcl_counter_list(j)),
568         $          i_result(j,I,myThreadId)/timerUser(I,myThreadId)
569         $          ,i_result(j,I,myThreadId)/timerWall(I,myThreadId),1.D0
570         $          *i_result(j,I,myThreadId)
571             CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,             CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,
572       &          SQUEEZE_RIGHT,myThreadId)       &          SQUEEZE_RIGHT,myThreadId)
573          enddo          enddo
574  #endif  #endif
575    #endif
576     10   CONTINUE     10   CONTINUE
577        ELSE        ELSE
578          GOTO 903          GOTO 903
# Line 603  CEH3 This needs to be further cleaned up Line 758  CEH3 This needs to be further cleaned up
758  CEH3 that is diagnosed by genmake  CEH3 that is diagnosed by genmake
759  CEH3 #ifndef HAVE_FDATE  CEH3 #ifndef HAVE_FDATE
760        Real*8 system_time, user_time, timenow        Real*8 system_time, user_time, timenow
761          external system_time, user_time, timenow
762  CEH3 #else  CEH3 #else
763  #ifdef TARGET_AIX  #ifdef TARGET_AIX
764        Real*4 ETIME_        Real*4 ETIME_
# Line 744  CCE107 Initialization of common block fo Line 900  CCE107 Initialization of common block fo
900        PARAMETER (maxTimers = 40)        PARAMETER (maxTimers = 40)
901        INTEGER nmaxevents        INTEGER nmaxevents
902        PARAMETER (nmaxevents = 18)        PARAMETER (nmaxevents = 18)
       INTEGER EventCode(nmaxevents)  
903        INTEGER size        INTEGER size
904        PARAMETER (size = 3*nmaxevents*maxTimers*MAX_NO_THREADS)        PARAMETER (size = 3*nmaxevents*maxTimers*MAX_NO_THREADS)
905        INTEGER*8 values(nmaxevents, maxTimers , MAX_NO_THREADS),        INTEGER*8 values(nmaxevents, maxTimers , MAX_NO_THREADS),
# Line 754  CCE107 Initialization of common block fo Line 909  CCE107 Initialization of common block fo
909        DATA values, values1, values2 /size*0/        DATA values, values1, values2 /size*0/
910        END        END
911  #endif  #endif
912    #if defined(USE_PCL_FLOPS_SFP) || defined(USE_PCL_FLOPS) || defined(USE_PCL)
913    CCE107 Initialization of common block for PCL event names
914          BLOCK DATA setpclnames
915          INTEGER nmaxevents
916          PARAMETER (nmaxevents = 61)
917          CHARACTER*22 pcl_counter_name(0:nmaxevents-1)
918          COMMON /pclnames/ pcl_counter_name
919          DATA pcl_counter_name(0) /'PCL_L1CACHE_READ'/
920          DATA pcl_counter_name(1) /'PCL_L1CACHE_WRITE'/
921          DATA pcl_counter_name(2) /'PCL_L1CACHE_READWRITE'/
922          DATA pcl_counter_name(3) /'PCL_L1CACHE_HIT'/
923          DATA pcl_counter_name(4) /'PCL_L1CACHE_MISS'/
924          DATA pcl_counter_name(5) /'PCL_L1DCACHE_READ'/
925          DATA pcl_counter_name(6) /'PCL_L1DCACHE_WRITE'/
926          DATA pcl_counter_name(7) /'PCL_L1DCACHE_READWRITE'/
927          DATA pcl_counter_name(8) /'PCL_L1DCACHE_HIT'/
928          DATA pcl_counter_name(9) /'PCL_L1DCACHE_MISS'/
929          DATA pcl_counter_name(10) /'PCL_L1ICACHE_READ'/
930          DATA pcl_counter_name(11) /'PCL_L1ICACHE_WRITE'/
931          DATA pcl_counter_name(12) /'PCL_L1ICACHE_READWRITE'/
932          DATA pcl_counter_name(13) /'PCL_L1ICACHE_HIT'/
933          DATA pcl_counter_name(14) /'PCL_L1ICACHE_MISS'/
934          DATA pcl_counter_name(15) /'PCL_L2CACHE_READ'/
935          DATA pcl_counter_name(16) /'PCL_L2CACHE_WRITE'/
936          DATA pcl_counter_name(17) /'PCL_L2CACHE_READWRITE'/
937          DATA pcl_counter_name(18) /'PCL_L2CACHE_HIT'/
938          DATA pcl_counter_name(19) /'PCL_L2CACHE_MISS'/
939          DATA pcl_counter_name(20) /'PCL_L2DCACHE_READ'/
940          DATA pcl_counter_name(21) /'PCL_L2DCACHE_WRITE'/
941          DATA pcl_counter_name(22) /'PCL_L2DCACHE_READWRITE'/
942          DATA pcl_counter_name(23) /'PCL_L2DCACHE_HIT'/
943          DATA pcl_counter_name(24) /'PCL_L2DCACHE_MISS'/
944          DATA pcl_counter_name(25) /'PCL_L2ICACHE_READ'/
945          DATA pcl_counter_name(26) /'PCL_L2ICACHE_WRITE'/
946          DATA pcl_counter_name(27) /'PCL_L2ICACHE_READWRITE'/
947          DATA pcl_counter_name(28) /'PCL_L2ICACHE_HIT'/
948          DATA pcl_counter_name(29) /'PCL_L2ICACHE_MISS'/
949          DATA pcl_counter_name(30) /'PCL_TLB_HIT'/
950          DATA pcl_counter_name(31) /'PCL_TLB_MISS'/
951          DATA pcl_counter_name(32) /'PCL_ITLB_HIT'/
952          DATA pcl_counter_name(33) /'PCL_ITLB_MISS'/
953          DATA pcl_counter_name(34) /'PCL_DTLB_HIT'/
954          DATA pcl_counter_name(35) /'PCL_DTLB_MISS'/
955          DATA pcl_counter_name(36) /'PCL_CYCLES'/
956          DATA pcl_counter_name(37) /'PCL_ELAPSED_CYCLES'/
957          DATA pcl_counter_name(38) /'PCL_INTEGER_INSTR'/
958          DATA pcl_counter_name(39) /'PCL_FP_INSTR'/
959          DATA pcl_counter_name(40) /'PCL_LOAD_INSTR'/
960          DATA pcl_counter_name(41) /'PCL_STORE_INSTR'/
961          DATA pcl_counter_name(42) /'PCL_LOADSTORE_INSTR'/
962          DATA pcl_counter_name(43) /'PCL_INSTR'/
963          DATA pcl_counter_name(44) /'PCL_JUMP_SUCCESS'/
964          DATA pcl_counter_name(45) /'PCL_JUMP_UNSUCCESS'/
965          DATA pcl_counter_name(46) /'PCL_JUMP'/
966          DATA pcl_counter_name(47) /'PCL_ATOMIC_SUCCESS'/
967          DATA pcl_counter_name(48) /'PCL_ATOMIC_UNSUCCESS'/
968          DATA pcl_counter_name(49) /'PCL_ATOMIC'/
969          DATA pcl_counter_name(50) /'PCL_STALL_INTEGER'/
970          DATA pcl_counter_name(51) /'PCL_STALL_FP'/
971          DATA pcl_counter_name(52) /'PCL_STALL_JUMP'/
972          DATA pcl_counter_name(53) /'PCL_STALL_LOAD'/
973          DATA pcl_counter_name(54) /'PCL_STALL_STORE'/
974          DATA pcl_counter_name(55) /'PCL_STALL'/
975          DATA pcl_counter_name(56) /'PCL_MFLOPS'/
976          DATA pcl_counter_name(57) /'PCL_IPC'/
977          DATA pcl_counter_name(58) /'PCL_L1DCACHE_MISSRATE'/
978          DATA pcl_counter_name(59) /'PCL_L2DCACHE_MISSRATE'/
979          DATA pcl_counter_name(60) /'PCL_MEM_FP_RATIO'/
980          END
981    
982    
983    #ifdef USE_PCL
984    CCE107 Initialization of common block for PCL summary performance
985          BLOCK DATA setpcls
986    #include "EEPARAMS.h"
987          INTEGER maxTimers
988          PARAMETER (maxTimers = 40)
989          INTEGER nmaxevents
990          PARAMETER (nmaxevents = 61)
991          INTEGER size
992          PARAMETER (size = nmaxevents*maxTimers*MAX_NO_THREADS)
993          INTEGER PCL_CYCLES, PCL_MODE_USER_SYSTEM
994          PARAMETER (PCL_CYCLES=36, PCL_MODE_USER_SYSTEM=3)
995          INTEGER pcl_counter_list(nmaxevents)
996          INTEGER flags, nevents
997          INTEGER*8 i_result(nmaxevents, maxTimers, MAX_NO_THREADS)
998          INTEGER*8 i_result1(nmaxevents, maxTimers, MAX_NO_THREADS)
999          INTEGER*8 i_result2(nmaxevents, maxTimers, MAX_NO_THREADS)
1000          INTEGER*8 descr
1001          REAL*8 fp_result(nmaxevents, maxTimers, MAX_NO_THREADS)
1002          COMMON /pclvars/ i_result, descr, fp_result, pcl_counter_list,
1003         $     flags, nevents
1004          DATA fp_result /size*0.0D0/
1005          DATA i_result /size*0/
1006          DATA i_result1 /size*0/
1007          DATA i_result2 /size*0/
1008          DATA descr /0/
1009          DATA nevents /nmaxevents/
1010          DATA pcl_counter_list /nmaxevents*PCL_CYCLES/
1011          DATA flags /PCL_MODE_USER_SYSTEM/
1012          END
1013    #else
1014    CCE107 Initialization of common block for PCL summary performance
1015          BLOCK DATA setpcls
1016          INTEGER PCL_MFLOPS, PCL_IPC, PCL_L1DCACHE_MISSRATE,
1017         $     PCL_L2DCACHE_MISSRATE, PCL_MEM_FP_RATIO
1018          PARAMETER (PCL_MFLOPS=56, PCL_IPC=57, PCL_L1DCACHE_MISSRATE=58,
1019         $     PCL_L2DCACHE_MISSRATE=59, PCL_MEM_FP_RATIO=60)
1020          INTEGER PCL_MODE_USER_SYSTEM
1021          PARAMETER (PCL_MODE_USER_SYSTEM=3)
1022          INTEGER pcl_counter_list(5), flags, nevents
1023          INTEGER*8 i_result(5), descr
1024          REAL*8 fp_result(5)
1025          COMMON /pclvars/ i_result, descr, fp_result, pcl_counter_list,
1026         $     flags, nevents
1027          DATA fp_result /5*0.0D0/
1028          DATA i_result /5*0/
1029          DATA descr /0/
1030          DATA nevents /0/
1031          DATA pcl_counter_list /PCL_MFLOPS, PCL_IPC, PCL_L1DCACHE_MISSRATE,
1032         $     PCL_L2DCACHE_MISSRATE, PCL_MEM_FP_RATIO/
1033          DATA flags /PCL_MODE_USER_SYSTEM/
1034          END
1035    #endif
1036    #endif

Legend:
Removed from v.1.20  
changed lines
  Added in v.1.21

  ViewVC Help
Powered by ViewVC 1.1.22