PAPI 7.1.0.0
Loading...
Searching...
No Matches
papi_tot_ins.c File Reference
Include dependency graph for papi_tot_ins.c:

Go to the source code of this file.

Macros

#define NUM_RUNS   100
 

Functions

static void test_million (int quiet)
 
static void test_fldcw (int quiet)
 
static void test_rep (int quiet)
 
int main (int argc, char **argv)
 

Macro Definition Documentation

◆ NUM_RUNS

#define NUM_RUNS   100

Definition at line 23 of file papi_tot_ins.c.

Function Documentation

◆ main()

int main ( int  argc,
char **  argv 
)

Definition at line 226 of file papi_tot_ins.c.

226 {
227
228 int retval;
229 int quiet=0;
230
231 (void)argc;
232 (void)argv;
233
234 quiet=tests_quiet(argc,argv);
235
236 if (!quiet) {
237 printf("\nThis test checks that the \"PAPI_TOT_INS\" generalized "
238 "event is working.\n");
239 }
240
241 /* Init the PAPI library */
243 if ( retval != PAPI_VER_CURRENT ) {
244 test_fail( __FILE__, __LINE__, "PAPI_library_init", retval );
245 }
246
250
251 if (!quiet) printf("\n");
252
253 test_pass( __FILE__ );
254
256
257 return 0;
258}
initialize the PAPI library.
Finish using PAPI and free all related resources.
#define PAPI_VER_CURRENT
Definition: f90papi.h:54
int tests_quiet(int argc, char **argv)
Definition: test_utils.c:376
void PAPI_NORETURN test_fail(const char *file, int line, const char *call, int retval)
Definition: test_utils.c:491
void PAPI_NORETURN test_pass(const char *filename)
Definition: test_utils.c:432
static void test_fldcw(int quiet)
Definition: papi_tot_ins.c:99
static void test_rep(int quiet)
Definition: papi_tot_ins.c:165
static void test_million(int quiet)
Definition: papi_tot_ins.c:31
int quiet
Definition: rapl_overflow.c:19
int retval
Definition: zero_fork.c:53
Here is the call graph for this function:

◆ test_fldcw()

static void test_fldcw ( int  quiet)
static

Definition at line 99 of file papi_tot_ins.c.

99 {
100
101 (void)quiet;
102
103#if defined(__i386__) || (defined __x86_64__)
104 int i,result,ins_result;
105 int eventset=PAPI_NULL;
106
107 long long count,high=0,low=0,total=0,average=0;
108 double error;
109
110 if (!quiet) {
111 printf("\nTesting a fldcw loop of 900,000 instructions (%d times):\n",
112 NUM_RUNS);
113 }
114
115 result=PAPI_create_eventset(&eventset);
116 if (result!=PAPI_OK) {
117 test_fail( __FILE__, __LINE__, "PAPI_create_eventset", result );
118 }
119
120 result=PAPI_add_named_event(eventset,"PAPI_TOT_INS");
121 if (result!=PAPI_OK) {
122 test_fail( __FILE__, __LINE__, "adding PAPI_TOT_INS", result );
123 }
124
125 for(i=0;i<NUM_RUNS;i++) {
126
127 PAPI_reset(eventset);
128 PAPI_start(eventset);
129
130 ins_result=instructions_fldcw();
131
132 result=PAPI_stop(eventset,&count);
133
134 if (ins_result==CODE_UNIMPLEMENTED) {
135 test_fail( __FILE__, __LINE__, "Code unimplemented", 1 );
136 }
137
138 if (result!=PAPI_OK) {
139 test_fail( __FILE__, __LINE__, "Unexpected error on read", 1 );
140 }
141
142 if (count>high) high=count;
143 if ((low==0) || (count<low)) low=count;
144 total+=count;
145 }
146
147 average=total/NUM_RUNS;
148
149 error=display_error(average,high,low,900000ULL,quiet);
150
151 if ((error > 1.0) || (error<-1.0)) {
152
153 if (!quiet) {
154 printf("On Pentium 4 machines, the fldcw instruction counts as 2.\n");
155 printf("This will lead to an overcount of 22%%\n");
156 }
157 test_fail( __FILE__, __LINE__, "Error too high", 1 );
158 }
159#endif
160}
volatile int result
int i
static long count
add PAPI preset or native hardware event by name to an EventSet
Create a new empty PAPI EventSet.
Reset the hardware event counts in an event set.
Start counting hardware events in an event set.
Stop counting hardware events in an event set.
double display_error(long long average, long long high, long long low, long long expected, int quiet)
Definition: display_error.c:7
#define PAPI_OK
Definition: f90papi.h:73
#define PAPI_NULL
Definition: f90papi.h:78
int instructions_fldcw(void)
#define NUM_RUNS
Definition: papi_tot_ins.c:23
static int total
Definition: rapl_overflow.c:9
#define CODE_UNIMPLEMENTED
Definition: testcode.h:2
Here is the call graph for this function:
Here is the caller graph for this function:

◆ test_million()

static void test_million ( int  quiet)
static

Definition at line 31 of file papi_tot_ins.c.

31 {
32
33 int i,result,ins_result;
34
35 long long count,high=0,low=0,total=0,average=0;
36 double error;
37 int eventset=PAPI_NULL;
38
39 if (!quiet) {
40 printf("\nTesting a loop of 1 million instructions (%d times):\n",
41 NUM_RUNS);
42 }
43
45 if (result!=PAPI_OK) {
46 test_fail( __FILE__, __LINE__, "PAPI_create_eventset", result );
47 }
48
49 result=PAPI_add_named_event(eventset,"PAPI_TOT_INS");
50 if (result!=PAPI_OK) {
51 if (!quiet) printf("Could not add PAPI_TOT_INS\n");
52 test_skip( __FILE__, __LINE__, "adding PAPI_TOT_INS", result );
53 }
54
55 for(i=0;i<NUM_RUNS;i++) {
56
57 PAPI_reset(eventset);
58 PAPI_start(eventset);
59
60 ins_result=instructions_million();
61
62 result=PAPI_stop(eventset,&count);
63
64 if (ins_result==CODE_UNIMPLEMENTED) {
65 fprintf(stderr,"\tCode unimplemented\n");
66 test_skip( __FILE__, __LINE__, "unimplemented", 0);
67 }
68
69 if (result!=PAPI_OK) {
70 test_fail( __FILE__, __LINE__,
71 "reading PAPI_TOT_INS", result );
72 }
73
74 if (count>high) high=count;
75 if ((low==0) || (count<low)) low=count;
76 total+=count;
77 }
78
79 average=total/NUM_RUNS;
80
81 error=display_error(average,high,low,1000000ULL,quiet);
82
83 if ((error > 1.0) || (error<-1.0)) {
84
85#if defined(__PPC__)
86
87 if(!quiet) {
88 printf("If PPC is off by 50%%, this might be due to\n"
89 "\"folded\" branch instructions on PPC32\n");
90 }
91#endif
92 test_fail( __FILE__, __LINE__, "validation", result );
93
94 }
95}
int instructions_million(void)
FILE * stderr
void PAPI_NORETURN test_skip(const char *file, int line, const char *call, int retval)
Definition: test_utils.c:584
Here is the call graph for this function:
Here is the caller graph for this function:

◆ test_rep()

static void test_rep ( int  quiet)
static

Definition at line 165 of file papi_tot_ins.c.

165 {
166
167 (void)quiet;
168
169#if defined(__i386__) || (defined __x86_64__)
170 int i,result,ins_result;
171 int eventset=PAPI_NULL;
172
173 long long count,high=0,low=0,total=0,average=0;
174 double error;
175
176 if(!quiet) {
177 printf("\nTesting a 16k rep loop (%d times):\n", NUM_RUNS);
178 }
179
180 result=PAPI_create_eventset(&eventset);
181 if (result!=PAPI_OK) {
182 test_fail( __FILE__, __LINE__, "PAPI_create_eventset", result );
183 }
184
185 result=PAPI_add_named_event(eventset,"PAPI_TOT_INS");
186 if (result!=PAPI_OK) {
187 test_fail( __FILE__, __LINE__, "adding PAPI_TOT_INS", result );
188 }
189
190 for(i=0;i<NUM_RUNS;i++) {
191
192 PAPI_reset(eventset);
193 PAPI_start(eventset);
194
195 ins_result=instructions_rep();
196
197 result=PAPI_stop(eventset,&count);
198
199 if (ins_result==CODE_UNIMPLEMENTED) {
200 fprintf(stderr,"\tCode unimplemented\n");
201 test_fail( __FILE__, __LINE__, "Code unimplemented", 1 );
202 }
203
204 if (result!=PAPI_OK) {
205 test_fail( __FILE__, __LINE__, "Unexpected error on read", 1 );
206 }
207
208 if (count>high) high=count;
209 if ((low==0) || (count<low)) low=count;
210 total+=count;
211 }
212
213 average=total/NUM_RUNS;
214
215 error=display_error(average,high,low,6002,quiet);
216
217 if ((error > 10.0) || (error<-10.0)) {
218 if (!quiet) {
219 printf("Instruction count off by more than 10%%\n");
220 }
221 test_fail( __FILE__, __LINE__, "Error too high", 1 );
222 }
223#endif
224}
int instructions_rep(void)
Here is the call graph for this function:
Here is the caller graph for this function: