-rw-r--r-- 610 djbsort-20180729/cpucycles/perfevent/cpucycles.c
#include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <sys/types.h> #include <sys/syscall.h> #include <linux/perf_event.h> #include "osfreq.c" #include "cpucycles.h" static int fddev = -1; long long cpucycles(void) { long long result; if (fddev == -1) { static struct perf_event_attr attr; attr.type = PERF_TYPE_HARDWARE; attr.config = PERF_COUNT_HW_CPU_CYCLES; fddev = syscall(__NR_perf_event_open, &attr, 0, -1, -1, 0); } if (read(fddev,&result,sizeof result) < sizeof result) return 0; return result; } long long cpucycles_persecond(void) { return osfreq(); }