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

Go to the source code of this file.

Macros

#define OUT_FMT   "%12d\t%12lld\t%12lld\t%.2f\n"
 

Functions

int main (int argc, char **argv)
 

Macro Definition Documentation

◆ OUT_FMT

#define OUT_FMT   "%12d\t%12lld\t%12lld\t%.2f\n"

Definition at line 21 of file memory.c.

Function Documentation

◆ main()

int main ( int  argc,
char **  argv 
)

Definition at line 25 of file memory.c.

26{
27 int retval, i, j;
28 int EventSet = PAPI_NULL;
29 long long values[2];
30 const PAPI_hw_info_t *hwinfo = NULL;
32 PAPI_event_info_t evinfo;
34
35
36 const int eventlist[] = {
43#if 0
84#endif
85 0
86 };
87
88 tests_quiet( argc, argv ); /* Set TESTS_QUIET variable */
89
90 if ( ( retval =
92 test_fail( __FILE__, __LINE__, "PAPI_library_init", retval );
93
94 if ( ( hwinfo = PAPI_get_hardware_info( ) ) == NULL ) {
95 test_fail( __FILE__, __LINE__, "PAPI_get_hardware_info", 2 );
96 }
97
99 test_fail( __FILE__, __LINE__, "PAPI_create_eventset", retval );
100
101 /* Extract and report the cache information */
102 L = ( PAPI_mh_level_t * ) ( hwinfo->mem_hierarchy.level );
103 for ( i = 0; i < hwinfo->mem_hierarchy.levels; i++ ) {
104 for ( j = 0; j < 2; j++ ) {
105 int tmp;
106
107 tmp = PAPI_MH_CACHE_TYPE( L[i].cache[j].type );
108 if ( tmp == PAPI_MH_TYPE_UNIFIED ) {
109 if (!TESTS_QUIET) printf( "L%d Unified ", i + 1 );
110 } else if ( tmp == PAPI_MH_TYPE_DATA ) {
111 if (!TESTS_QUIET) printf( "L%d Data ", i + 1 );
112 } else if ( tmp == PAPI_MH_TYPE_INST ) {
113 if (!TESTS_QUIET) printf( "L%d Instruction ", i + 1 );
114 } else if ( tmp == PAPI_MH_TYPE_VECTOR ) {
115 if (!TESTS_QUIET) printf( "L%d Vector ", i + 1 );
116 } else if ( tmp == PAPI_MH_TYPE_TRACE ) {
117 if (!TESTS_QUIET) printf( "L%d Trace ", i + 1 );
118 } else if ( tmp == PAPI_MH_TYPE_EMPTY ) {
119 break;
120 } else {
121 test_fail( __FILE__, __LINE__,
122 "PAPI_get_hardware_info",
123 PAPI_EBUG );
124 }
125
126 tmp = PAPI_MH_CACHE_WRITE_POLICY( L[i].cache[j].type );
127 if ( tmp == PAPI_MH_TYPE_WB ) {
128 if (!TESTS_QUIET) printf( "Write back " );
129 } else if ( tmp == PAPI_MH_TYPE_WT ) {
130 if (!TESTS_QUIET) printf( "Write through " );
131 } else if ( tmp == PAPI_MH_TYPE_UNKNOWN ) {
132 if (!TESTS_QUIET) printf( "Unknown Write policy " );
133 } else {
134 test_fail( __FILE__, __LINE__, "PAPI_get_hardware_info",
135 PAPI_EBUG );
136 }
137
139 if ( tmp == PAPI_MH_TYPE_PSEUDO_LRU ) {
140 if (!TESTS_QUIET) printf( "Pseudo LRU policy " );
141 } else if ( tmp == PAPI_MH_TYPE_LRU ) {
142 if (!TESTS_QUIET) printf( "LRU policy " );
143 } else if ( tmp == PAPI_MH_TYPE_UNKNOWN ) {
144 if (!TESTS_QUIET) printf( "Unknown Replacement policy " );
145 } else {
146 test_fail( __FILE__, __LINE__, "PAPI_get_hardware_info",
147 PAPI_EBUG );
148 }
149
150 tmp = PAPI_MH_CACHE_ALLOCATION_POLICY( L[i].cache[j].type );
151 if ( tmp == PAPI_MH_TYPE_RD_ALLOC ) {
152 if (!TESTS_QUIET) printf( "Read Allocate " );
153 } else if ( tmp == PAPI_MH_TYPE_WR_ALLOC ) {
154 if (!TESTS_QUIET) printf( "Write Allocate " );
155 } else if ( tmp == PAPI_MH_TYPE_RW_ALLOC ) {
156 if (!TESTS_QUIET) printf( "Read Write Allocate " );
157 } else if ( tmp == PAPI_MH_TYPE_UNKNOWN ) {
158 if (!TESTS_QUIET) printf( "Unknown Allocate policy " );
159 } else {
160 test_fail( __FILE__, __LINE__, "PAPI_get_hardware_info",
161 PAPI_EBUG );
162 }
163
164 if (!TESTS_QUIET) {
165 printf( "Cache:\n" );
166 if ( L[i].cache[j].type ) {
167 printf( " Total size: %dKB\n"
168 " Line size: %dB\n"
169 " Number of Lines: %d\n"
170 " Associativity: %d\n\n",
171 ( L[i].cache[j].size ) >> 10,
172 L[i].cache[j].line_size,
173 L[i].cache[j].num_lines,
174 L[i].cache[j].associativity );
175 }
176 }
177 }
178 }
179
180 for ( i = 0; eventlist[i] != 0; i++ ) {
181 if (PAPI_event_code_to_name( eventlist[i], descr ) != PAPI_OK)
182 continue;
183 if ( PAPI_add_event( EventSet, eventlist[i] ) != PAPI_OK )
184 continue;
185
186 if ( PAPI_get_event_info( eventlist[i], &evinfo ) != PAPI_OK )
187 test_fail( __FILE__, __LINE__, "PAPI_get_event_info", retval );
188
189 if (!TESTS_QUIET) {
190 printf( "\nEvent: %s\nShort: %s\nLong: %s\n\n",
191 evinfo.symbol, evinfo.short_descr,
192 evinfo.long_descr );
193 printf( " Bytes\t\tCold\t\tWarm\tPercent\n" );
194 }
195
196 if ( ( retval = PAPI_start( EventSet ) ) != PAPI_OK )
197 test_fail( __FILE__, __LINE__, "PAPI_start", retval );
198
199 for ( j = 512; j <= 16 * ( 1024 * 1024 ); j = j * 2 ) {
200 do_misses( 1, j );
201 do_flush( );
202
203 if ( ( retval = PAPI_reset( EventSet ) ) != PAPI_OK )
204 test_fail( __FILE__, __LINE__, "PAPI_reset", retval );
205
206 do_misses( 1, j );
207
208 if ( ( retval = PAPI_read( EventSet, &values[0] ) ) != PAPI_OK )
209 test_fail( __FILE__, __LINE__, "PAPI_read", retval );
210 if ( ( retval = PAPI_reset( EventSet ) ) != PAPI_OK )
211 test_fail( __FILE__, __LINE__, "PAPI_reset", retval );
212
213 do_misses( 1, j );
214
215 if ( ( retval = PAPI_read( EventSet, &values[1] ) ) != PAPI_OK )
216 test_fail( __FILE__, __LINE__, "PAPI_read", retval );
217
218 if (!TESTS_QUIET) {
219 printf( OUT_FMT, j,
220 values[0], values[1],
221 ( ( float ) values[1] /
222 ( float ) ( ( values[0] !=0 ) ?
223 values[0] : 1 ) * 100.0 ) );
224 }
225 }
226
227 if ( ( retval = PAPI_stop( EventSet, NULL ) ) != PAPI_OK )
228 test_fail( __FILE__, __LINE__, "PAPI_stop", retval );
229
230 if ( ( retval =
231 PAPI_remove_event( EventSet, eventlist[i] ) ) != PAPI_OK )
232 test_fail( __FILE__, __LINE__, "PAPI_remove_event", retval );
233 }
234
235 if ( ( retval = PAPI_destroy_eventset( &EventSet ) ) != PAPI_OK )
236 test_fail( __FILE__, __LINE__, "PAPI_destroy_eventset", retval );
237
238 test_pass( __FILE__ );
239
240 return 0;
241}
double tmp
int i
add PAPI preset or native hardware event to an event set
Create a new empty PAPI EventSet.
Empty and destroy an EventSet.
Convert a numeric hardware event code to a name.
Get the event's name and description info.
get information about the system hardware
initialize the PAPI library.
Read hardware counters from an event set.
removes a hardware event from a PAPI event set.
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.
void do_flush(void)
Definition: do_loops.c:172
void do_misses(int n, int bytes)
Definition: do_loops.c:120
#define PAPI_L1_DCA
Definition: f90papi.h:367
#define PAPI_L1_TCR
Definition: f90papi.h:285
#define PAPI_VER_CURRENT
Definition: f90papi.h:54
#define PAPI_EBUG
Definition: f90papi.h:176
#define PAPI_OK
Definition: f90papi.h:73
#define PAPI_L2_TCH
Definition: f90papi.h:291
#define PAPI_L2_STM
Definition: f90papi.h:323
#define PAPI_L2_ICR
Definition: f90papi.h:351
#define PAPI_NULL
Definition: f90papi.h:78
#define PAPI_L2_TCR
Definition: f90papi.h:375
#define PAPI_LST_INS
Definition: f90papi.h:365
#define PAPI_L1_DCM
Definition: f90papi.h:364
#define PAPI_L2_DCR
Definition: f90papi.h:386
#define PAPI_L2_DCA
Definition: f90papi.h:336
#define PAPI_L1_LDM
Definition: f90papi.h:358
#define PAPI_L2_TCM
Definition: f90papi.h:320
#define PAPI_L1_ICW
Definition: f90papi.h:343
#define PAPI_L1_DCW
Definition: f90papi.h:372
#define PAPI_L2_ICA
Definition: f90papi.h:301
#define PAPI_MAX_STR_LEN
Definition: f90papi.h:77
#define PAPI_SR_INS
Definition: f90papi.h:357
#define PAPI_L1_ICH
Definition: f90papi.h:361
#define PAPI_L1_TCW
Definition: f90papi.h:384
#define PAPI_L1_DCH
#define PAPI_MEM_SCY
Definition: f90papi.h:289
#define PAPI_MEM_WCY
Definition: f90papi.h:293
#define PAPI_L2_TCW
Definition: f90papi.h:299
#define PAPI_L1_DCR
Definition: f90papi.h:298
#define PAPI_MEM_RCY
Definition: f90papi.h:312
#define PAPI_L2_ICH
Definition: f90papi.h:334
#define PAPI_L1_ICR
Definition: f90papi.h:326
#define PAPI_L2_DCH
Definition: f90papi.h:307
#define PAPI_L2_ICW
Definition: f90papi.h:315
#define PAPI_L2_LDM
Definition: f90papi.h:330
#define PAPI_L2_DCW
Definition: f90papi.h:287
#define PAPI_L2_ICM
Definition: f90papi.h:311
#define PAPI_L1_ICM
Definition: f90papi.h:392
#define PAPI_L2_TCA
Definition: f90papi.h:318
#define PAPI_L2_DCM
Definition: f90papi.h:331
#define PAPI_L1_TCA
Definition: f90papi.h:344
#define PAPI_CSR_TOT
Definition: f90papi.h:286
#define PAPI_L1_TCM
Definition: f90papi.h:347
#define PAPI_L1_ICA
Definition: f90papi.h:388
#define PAPI_L1_TCH
Definition: f90papi.h:377
#define PAPI_LD_INS
Definition: f90papi.h:292
#define PAPI_L1_STM
Definition: f90papi.h:345
static int EventSet
Definition: init_fini.c:8
static long long values[NUM_EVENTS]
Definition: init_fini.c:10
uint16_t type
#define OUT_FMT
Definition: memory.c:21
int TESTS_QUIET
Definition: test_utils.c:18
#define PAPI_MH_TYPE_DATA
Definition: papi.h:720
#define PAPI_MH_CACHE_REPLACEMENT_POLICY(a)
Definition: papi.h:732
#define PAPI_MH_TYPE_RW_ALLOC
Definition: papi.h:737
#define PAPI_MH_TYPE_LRU
Definition: papi.h:729
#define PAPI_MH_TYPE_PSEUDO_LRU
Definition: papi.h:730
#define PAPI_MH_CACHE_TYPE(a)
Definition: papi.h:724
#define PAPI_MH_TYPE_WB
Definition: papi.h:726
#define PAPI_MH_TYPE_WR_ALLOC
Definition: papi.h:736
#define PAPI_MH_TYPE_WT
Definition: papi.h:725
#define PAPI_MH_TYPE_RD_ALLOC
Definition: papi.h:735
#define PAPI_MH_CACHE_ALLOCATION_POLICY(a)
Definition: papi.h:738
#define PAPI_MH_TYPE_INST
Definition: papi.h:719
#define PAPI_MH_TYPE_UNKNOWN
Definition: papi.h:728
#define PAPI_MH_TYPE_VECTOR
Definition: papi.h:721
#define PAPI_MH_TYPE_EMPTY
Definition: papi.h:718
#define PAPI_MH_TYPE_TRACE
Definition: papi.h:722
#define PAPI_MH_TYPE_UNIFIED
Definition: papi.h:723
#define PAPI_MH_CACHE_WRITE_POLICY(a)
Definition: papi.h:727
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
char short_descr[PAPI_MIN_STR_LEN]
Definition: papi.h:961
char symbol[PAPI_HUGE_STR_LEN]
Definition: papi.h:960
char long_descr[PAPI_HUGE_STR_LEN]
Definition: papi.h:963
Hardware info structure.
Definition: papi.h:774
PAPI_mh_info_t mem_hierarchy
Definition: papi.h:793
int levels
Definition: papi.h:768
PAPI_mh_level_t level[PAPI_MAX_MEM_HIERARCHY_LEVELS]
Definition: papi.h:769
char * descr
int retval
Definition: zero_fork.c:53
Here is the call graph for this function: