PAPI 7.1.0.0
Loading...
Searching...
No Matches
rapl_plot.c
Go to the documentation of this file.
1
5#include <stdio.h>
6#include <stdlib.h>
7#include <string.h>
8#include <unistd.h>
9
10#include "papi.h"
11
12#define MAX_EVENTS 128
13
14char events[MAX_EVENTS][BUFSIZ];
15char units[MAX_EVENTS][BUFSIZ];
17char filenames[MAX_EVENTS][BUFSIZ];
18
20
21static int num_events=0;
22
23int main (int argc, char **argv)
24{
25
26 int retval,cid,rapl_cid=-1,numcmp;
27 int EventSet = PAPI_NULL;
28 long long values[MAX_EVENTS];
29 int i,code,enum_retval;
30 PAPI_event_info_t evinfo;
31 const PAPI_component_info_t *cmpinfo = NULL;
32 long long start_time,before_time,after_time;
33 double elapsed_time,total_time;
34 char event_name[BUFSIZ];
35
36 /* PAPI Initialization */
38 if ( retval != PAPI_VER_CURRENT ) {
39 fprintf(stderr,"PAPI_library_init failed\n");
40 exit(1);
41 }
42
43 numcmp = PAPI_num_components();
44
45 for(cid=0; cid<numcmp; cid++) {
46
47 if ( (cmpinfo = PAPI_get_component_info(cid)) == NULL) {
48 fprintf(stderr,"PAPI_get_component_info failed\n");
49 exit(1);
50 }
51
52 if (strstr(cmpinfo->name,"rapl")) {
53 rapl_cid=cid;
54 printf("Found rapl component at cid %d\n", rapl_cid);
55
56 if (cmpinfo->disabled) {
57 fprintf(stderr,"No rapl events found: %s\n",
58 cmpinfo->disabled_reason);
59 exit(1);
60 }
61 break;
62 }
63 }
64
65 /* Component not found */
66 if (cid==numcmp) {
67 fprintf(stderr,"No rapl component found\n");
68 exit(1);
69 }
70
71 /* Find Events */
72 code = PAPI_NATIVE_MASK;
73
74 enum_retval = PAPI_enum_cmp_event( &code, PAPI_ENUM_FIRST, cid );
75
76 while ( enum_retval == PAPI_OK ) {
77
79 if ( retval != PAPI_OK ) {
80 printf("Error translating %#x\n",code);
81 exit(1);
82 }
83
84 printf("Found: %s\n",event_name);
85 strncpy(events[num_events],event_name,BUFSIZ);
86 sprintf(filenames[num_events],"results.%s",event_name);
87
88
89 /* Find additional event information: unit, data type */
90 retval = PAPI_get_event_info(code, &evinfo);
91 if (retval != PAPI_OK) {
92 printf("Error getting event info for %#x\n",code);
93 exit(1);
94 }
95
96 strncpy(units[num_events],evinfo.units,sizeof(units[0])-1);
97 /* buffer must be null terminated to safely use strstr operation on it below */
98 units[num_events][sizeof(units[0])-1] = '\0';
99
101
102 num_events++;
103
104 if (num_events==MAX_EVENTS) {
105 printf("Too many events! %d\n",num_events);
106 exit(1);
107 }
108
109 enum_retval = PAPI_enum_cmp_event( &code, PAPI_ENUM_EVENTS, cid );
110
111 }
112
113
114
115 if (num_events==0) {
116 printf("Error! No RAPL events found!\n");
117 exit(1);
118 }
119
120 /* Open output files */
121 for(i=0;i<num_events;i++) {
122 fff[i]=fopen(filenames[i],"w");
123 if (fff[i]==NULL) {
124 fprintf(stderr,"Could not open %s\n",filenames[i]);
125 exit(1);
126 }
127 }
128
129
130 /* Create EventSet */
132 if (retval != PAPI_OK) {
133 fprintf(stderr,"Error creating eventset!\n");
134 }
135
136 for(i=0;i<num_events;i++) {
137
139 if (retval != PAPI_OK) {
140 fprintf(stderr,"Error adding event %s\n",events[i]);
141 }
142 }
143
144
145
146 start_time=PAPI_get_real_nsec();
147
148 while(1) {
149
150 /* Start Counting */
153 if (retval != PAPI_OK) {
154 fprintf(stderr,"PAPI_start() failed\n");
155 exit(1);
156 }
157
158
159 usleep(100000);
160
161 /* Stop Counting */
164 if (retval != PAPI_OK) {
165 fprintf(stderr, "PAPI_start() failed\n");
166 }
167
168 total_time=((double)(after_time-start_time))/1.0e9;
169 elapsed_time=((double)(after_time-before_time))/1.0e9;
170
171 for(i=0;i<num_events;i++) {
172
173
174 if (!strstr(events[i],"ENERGY")) {
175
176 /* Scaled fixed value */
178
179 union {
180 long long ll;
181 double fp;
182 } result;
183
184 result.ll=values[i];
185
186
187 fprintf(fff[i],"%.4f %.3f (* %s in (%s) *)\n",
188 total_time,
189 result.fp,
190 events[i], units[i] );
191
192 }
193 /* Fixed value counts */
194 else if (data_type[i] == PAPI_DATATYPE_UINT64) {
195
196 fprintf(fff[i],"%.4f %lld (* %s *)\n",
197 total_time,
198 values[i],
199 events[i] );
200
201 }
202 }
203
204 /* Energy measurement counts */
205 else if (strstr(events[i],"ENERGY_CNT")) {
206
207 fprintf(fff[i],"%.4f %lld (* %s *)\n",
208 total_time,
209 values[i],
210 events[i] );
211
212 }
213
214 /* Scaled energy measurements */
215 else {
216 fprintf(fff[i],"%.4f %.3f %s %.3f %s (* Average Power for %s *)\n",
217 total_time,
218 ((double)values[i]/1.0e9), "J",
219 ((double)values[i]/1.0e9)/elapsed_time, "W",
220 events[i] );
221 };
222
223 fflush(fff[i]);
224 }
225 }
226
227 return 0;
228}
229
volatile int result
int i
add PAPI preset or native hardware event by name to an EventSet
Create a new empty PAPI EventSet.
Enumerate PAPI preset or native events for a given component.
Convert a numeric hardware event code to a name.
get information about a specific software component
Get the event's name and description info.
Get real time counter value in nanoseconds.
initialize the PAPI library.
Get the number of components available on the system.
Start counting hardware events in an event set.
Stop counting hardware events in an event set.
char event_name[2][PAPI_MAX_STR_LEN]
Definition: data_range.c:29
#define PAPI_VER_CURRENT
Definition: f90papi.h:54
#define PAPI_ENUM_EVENTS
Definition: f90papi.h:224
#define PAPI_OK
Definition: f90papi.h:73
#define PAPI_ENUM_FIRST
Definition: f90papi.h:85
#define PAPI_NULL
Definition: f90papi.h:78
#define PAPI_DATATYPE_FP64
Definition: f90papi.h:171
#define PAPI_DATATYPE_UINT64
Definition: f90papi.h:278
static int EventSet
Definition: init_fini.c:8
static long long values[NUM_EVENTS]
Definition: init_fini.c:10
#define PAPI_NATIVE_MASK
Return codes and api definitions.
FILE * stderr
static FILE * fp
int main()
Definition: pernode.c:20
static long long after_time
Definition: rapl_overflow.c:15
static long long before_time
Definition: rapl_overflow.c:15
FILE * fff[MAX_EVENTS]
Definition: rapl_plot.c:19
static int num_events
Definition: rapl_plot.c:21
char events[MAX_EVENTS][BUFSIZ]
Definition: rapl_plot.c:14
int data_type[MAX_EVENTS]
Definition: rapl_plot.c:16
char filenames[MAX_EVENTS][BUFSIZ]
Definition: rapl_plot.c:17
#define MAX_EVENTS
Definition: rapl_plot.c:12
char units[MAX_EVENTS][BUFSIZ]
Definition: rapl_plot.c:15
char name[PAPI_MAX_STR_LEN]
Definition: papi.h:627
char disabled_reason[PAPI_HUGE_STR_LEN]
Definition: papi.h:634
char units[PAPI_MIN_STR_LEN]
Definition: papi.h:969
int retval
Definition: zero_fork.c:53