20int main(
int argc,
char **argv) {
29 int l1_size,l2_size,l1_linesize,l2_linesize,l2_entries;
40 printf(
"Testing the PAPI_L2_DCR event\n");
66 printf(
"\tDetected %dk L1 DCache, %dB linesize\n",
67 l1_size/1024,l1_linesize);
68 printf(
"\tDetected %dk L2 DCache, %dB linesize, %d entries\n",
69 l2_size/1024,l2_linesize,l2_entries);
72 arraysize=l2_size/
sizeof(double);
75 printf(
"\tAllocating %zu bytes of memory (%d doubles)\n",
76 arraysize*
sizeof(
double),arraysize);
79 array=calloc(arraysize,
sizeof(
double));
81 test_fail(__FILE__,__LINE__,
"Can't allocate memory",0);
89 printf(
"\nWrite Test: Initializing an array of %d doubles:\n",
93 high=0; low=0;
total=0;
95 for(
i=0;
i<num_runs;
i++) {
106 "reading PAPI_L2_DCR",
retval );
114 average=(
total/num_runs);
116 expected=(arraysize/(l1_linesize/
sizeof(double)))/10;
119 printf(
"\tShould be low, as we only measure reads:\n\n");
123 printf(
"\tMeasured average of: %lld\n",average);
127 if (!
quiet) printf(
"Instruction count bigger than expected\n");
131 if (!
quiet) printf(
"\n");
138 printf(
"\nRead Test: Summing an array of %d doubles:\n",
142 high=0; low=0;
total=0;
144 for(
i=0;
i<num_runs;
i++) {
155 "reading PAPI_L2_DCR",
retval );
163 average=(
total/num_runs);
165 expected=arraysize/(l1_linesize/
sizeof(double));
168 printf(
"\tShould be roughly "
169 "arraysize/L1_linesize/double_size (%d/%d/%zu): "
171 arraysize,l1_linesize,
sizeof(
double),
177 if ((error > 1.0) || (error<-1.0)) {
178 if (!
quiet) printf(
"Instruction count off by more than 1%%\n");
188 test_warn( __FILE__, __LINE__,
"Error too high", 1 );
long long get_cachesize(int type)
long long get_linesize(int type)
long long get_entries(int type)
int cache_write_test(double *array, int size)
double cache_read_test(double *array, int size)
add PAPI preset or native hardware event by name to an EventSet
Create a new empty PAPI EventSet.
initialize the PAPI library.
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.
static int expected[NUM_THREADS]
double display_error(long long average, long long high, long long low, long long expected, int quiet)
Return codes and api definitions.
static double array[ARRAYSIZE]
int tests_quiet(int argc, char **argv)
void PAPI_NORETURN test_fail(const char *file, int line, const char *call, int retval)
void PAPI_NORETURN test_pass(const char *filename)
void test_warn(const char *file, int line, const char *call, int retval)
void PAPI_NORETURN test_skip(const char *file, int line, const char *call, int retval)