diff options
| author | Florian Fischer <florian.fl.fischer@fau.de> | 2020-05-06 16:56:32 +0200 |
|---|---|---|
| committer | Florian Fischer <florian.fl.fischer@fau.de> | 2020-06-02 11:18:47 +0200 |
| commit | 8174a918ea3b7cb216bf7ea98cfdc10661b5c37d (patch) | |
| tree | 0747ec3ccb9f8d7eeccfac35977fc17855ca3bbb /src/benchmarks/rdtsc | |
| parent | 8f52e8fc02dd235582f5961941bcd564e9a681cd (diff) | |
| download | allocbench-8174a918ea3b7cb216bf7ea98cfdc10661b5c37d.tar.gz allocbench-8174a918ea3b7cb216bf7ea98cfdc10661b5c37d.zip | |
make the whole project more python idiomatic
* rename src directory to allocbench
* make global variable names UPPERCASE
* format a lot of code using yapf
* use lowercase ld_preload and ld_library_path as Allocator members
* name expected Errors 'err' and don't raise a new Exception
* disable some pylint messages
Diffstat (limited to 'src/benchmarks/rdtsc')
| -rw-r--r-- | src/benchmarks/rdtsc/Makefile | 25 | ||||
| -rw-r--r-- | src/benchmarks/rdtsc/rdtsc.c | 105 |
2 files changed, 0 insertions, 130 deletions
diff --git a/src/benchmarks/rdtsc/Makefile b/src/benchmarks/rdtsc/Makefile deleted file mode 100644 index f81a84b..0000000 --- a/src/benchmarks/rdtsc/Makefile +++ /dev/null @@ -1,25 +0,0 @@ -OBJDIR ?= obj - -CC ?= gcc - -WARNFLAGS ?= -Wall -Wextra -COMMONFLAGS ?= -fno-builtin -pthread -OPTFLAGS ?= -O0 -g - -CFLAGS ?= $(OPTFLAGS) $(WARNFLAGS) $(COMMONFLAGS) - -LDFLAGS ?= -pthread -static-libgcc - -.PHONY = all clean - -all: $(OBJDIR)/rdtsc - -$(OBJDIR)/rdtsc: rdtsc.c Makefile | $(OBJDIR) - @echo compiling $@... - $(CC) $(LDFLAGS) $(CFLAGS) -o $@ $< - -$(OBJDIR): - mkdir -p $@ - -clean: - rm -rf $(OBJDIR) diff --git a/src/benchmarks/rdtsc/rdtsc.c b/src/benchmarks/rdtsc/rdtsc.c deleted file mode 100644 index fec84d6..0000000 --- a/src/benchmarks/rdtsc/rdtsc.c +++ /dev/null @@ -1,105 +0,0 @@ -#define _GNU_SOURCE /* See feature_test_macros(7) */ -#include <pthread.h> -#include <sched.h> -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <sys/sysinfo.h> - -int mode = 0; -int size = 64; -int iterations = 100000; -int num_cpus; - -static __inline__ int64_t rdtsc_s(void) -{ - unsigned a, d; - asm volatile("cpuid" ::: "%rax", "%rbx", "%rcx", "%rdx"); - asm volatile("rdtsc" : "=a" (a), "=d" (d)); - return ((unsigned long)a) | (((unsigned long)d) << 32); -} - -static __inline__ int64_t rdtsc_e(void) -{ - unsigned a, d; - asm volatile("rdtscp" : "=a" (a), "=d" (d)); - asm volatile("cpuid" ::: "%rax", "%rbx", "%rcx", "%rdx"); - return ((unsigned long)a) | (((unsigned long)d) << 32); -} - -static void* test_thread_func(void* arg) { - int64_t clock_before, clock_after; - void* p; - - int64_t* clocks = malloc(iterations * sizeof(int64_t)); - if (!clocks) - abort(); - - // set cpu affinity to prevent cpu switching - int64_t tid = (int64_t) arg; - cpu_set_t my_cpu; - /* Skip CPU0 - let the OS run on that one */ - int my_cpu_num = (tid % (num_cpus-1))+1; - - CPU_ZERO (&my_cpu); - CPU_SET (my_cpu_num, &my_cpu); - if (sched_setaffinity (0, sizeof(my_cpu), &my_cpu) == -1) - perror ("setaffinity failed"); - - for(int i = 0; i < iterations; i++) { - clock_before = rdtsc_s(); - p = malloc(size); - clock_after = rdtsc_e(); - - // measure potentially cached allocations - if (mode) - free(p); - - clocks[i] = clock_after - clock_before; - } - - for(int i = 0; i < iterations; i++) { - printf("malloc(%d): %d cycles\n", size, clocks[i]); - } - - return NULL; -} - -int main(int argc, char* argv[]) { - pthread_t* threads; - int num_threads = 1; - - num_cpus = get_nprocs(); - - if (argc > 5) { - fprintf(stderr, "Usage: %s <iterations> <size> <num threads>\n", argv[0]); - return 1; - } - - if (argc > 1) { - if (strncmp(argv[1], "cached", strlen("cached")) == 0) mode = 1; - } - if (argc > 2) iterations = atoi(argv[2]); - if (argc > 3) size = atoi(argv[3]); - if (argc > 4) num_threads = atoi(argv[4]); - - fprintf(stderr, "iterations = %d; size = %d; threads = %d\n", iterations, size, num_threads); - - threads = (pthread_t*) malloc(num_threads * sizeof(pthread_t)); - - for (int i = 0; i < num_threads; i++) { - if (0 != pthread_create(&threads[i], NULL, test_thread_func, NULL)) { - perror("pthread_create"); - return 1; - } - } - - for(int i = 0; i < num_threads; i++) { - if (0 != pthread_join(threads[i], NULL)) { - perror("pthread_join"); - return 1; - } - } - - return 0; -} |
