/[MITgcm]/MITgcm_contrib/PAPI/papi_events.F
ViewVC logotype

Annotation of /MITgcm_contrib/PAPI/papi_events.F

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


Revision 1.1 - (hide annotations) (download)
Thu Dec 22 19:28:03 2005 UTC (18 years, 5 months ago) by ce107
Branch: MAIN
Added example code to generate and test data.papi.

1 ce107 1.1 PROGRAM TESTPAPIEVENTS
2     #include <fpapi.h>
3     INTEGER PAPIF_num_counters
4     EXTERNAL PAPIF_num_counters
5     CHARACTER(13) EventName
6     INTEGER nmaxevents
7     PARAMETER (nmaxevents = 18)
8     INTEGER EventCode(nmaxevents)
9     LOGICAL use_counter(nmaxevents)
10     INTEGER*8 values(nmaxevents), values1(nmaxevents),
11     $ values2(nmaxevents)
12     COMMON /papivalues/ values, values1, values2
13     INTEGER neventsmax, nevents, Check, EventSet
14     INTEGER papiunit
15     SAVE EventCode, neventsmax, nevents, EventSet
16     REAL*4 f, df, arg, PI
17     INTEGER i, j, valid_counters
18    
19     PI=4.0E0*ATAN(1.0)
20     f=0.0
21    
22     Check = PAPI_VER_CURRENT
23     call PAPIF_library_init(Check)
24     if (Check .NE. PAPI_VER_CURRENT) then
25     WRITE(*,*) "PAPI Library Version is out of Date"
26     CALL ABORT
27     endif
28     neventsmax = PAPIF_num_counters(check)
29     if (neventsmax .GT. nmaxevents) then
30     WRITE(*,*) "Fix the nmaxevents in the code to ", neventsmax
31     CALL ABORT
32     endif
33     papiunit=99
34     OPEN(UNIT=papiunit,FILE='data.papi',STATUS='OLD')
35     read(papiunit,*) nevents
36     C reset to reasonable values
37     if (nevents .gt. neventsmax) then
38     nevents = neventsmax
39     WRITE(*,*) "resetting the number of PAPI events to the maximum"
40     endif
41     do i = 1,nevents
42     read(papiunit,*) EventName
43     call PAPIF_event_name_to_code(EventName, EventCode(i), Check)
44     end do
45     close(papiunit)
46     EventSet = PAPI_NULL
47     call PAPIF_create_eventset(EventSet, Check)
48     valid_counters = 0
49     do i = 1,nevents
50     call PAPIF_add_event(EventSet, EventCode(i), Check)
51     if (Check .NE. PAPI_OK) then
52     call PAPIF_event_code_to_name(EventCode(i),EventName,Check)
53     WRITE(*,*) "Error after PAPIF_add_event: ", EventName
54     use_counter(i) = .false.
55     else
56     valid_counters = valid_counters + 1
57     use_counter(i) = .true.
58     endif
59     enddo
60     CCE107 - Start counting events
61     call PAPIF_start(EventSet, Check)
62     CCE107 - Read event counts
63     call PAPIF_read(EventSet, values1, Check)
64    
65     do i=1,100000
66     arg = PI/1000.0*i*nevents
67     df = tan(arg)
68     f = f + df
69     WRITE (10,*) f, df, arg
70     enddo
71    
72     CCE107 - Read event counts
73     call PAPIF_read(EventSet, values2, Check)
74    
75     do i=1,valid_counters
76     values(i) = values2(i) - values1(i)
77     enddo
78    
79     WRITE (*,*) "f = ", f
80     j = 1
81     do i = 1,nevents
82     if (use_counter(i)) then
83     call PAPIF_event_code_to_name(EventCode(i),EventName,Check)
84     WRITE(*,*) Eventname, values(j), values1(j), values2(j)
85     j = j + 1
86     endif
87     enddo
88    
89     end
90    
91    
92     BLOCK DATA setpapivalues
93     INTEGER nmaxevents
94     PARAMETER (nmaxevents = 18)
95     INTEGER size
96     PARAMETER (size = 3*nmaxevents)
97     INTEGER*8 values(nmaxevents), values1(nmaxevents),
98     $ values2(nmaxevents)
99     COMMON /papivalues/ values, values1, values2
100     DATA values, values1, values2 /size*0/
101     END

  ViewVC Help
Powered by ViewVC 1.1.22