#include #include #include #include "../../common.h" #ifndef IR #define IR 3000000 #endif /* IR */ static int a CK_CC_CACHELINE; static int b CK_CC_CACHELINE; int main(void) { uint64_t s, e; unsigned int i; s = rdtsc(); for (i = 0; i < IR; i++) { ck_pr_load_int(&a); ck_pr_fence_strict_load(); ck_pr_load_int(&b); } e = rdtsc(); printf("[A] fence_load: %" PRIu64 "\n", (e - s) / IR); s = rdtsc(); for (i = 0; i < IR; i++) { if (ck_pr_load_int(&a) == 0) ck_pr_barrier(); ck_pr_fence_strict_lock(); ck_pr_load_int(&b); } e = rdtsc(); printf("[A] fence_lock: %" PRIu64 "\n", (e - s) / IR); s = rdtsc(); for (i = 0; i < IR; i++) { ck_pr_store_int(&a, 0); ck_pr_fence_strict_store(); ck_pr_store_int(&b, 0); } e = rdtsc(); printf("[B] fence_store: %" PRIu64 "\n", (e - s) / IR); s = rdtsc(); for (i = 0; i < IR; i++) { ck_pr_store_int(&a, 0); ck_pr_fence_strict_memory(); ck_pr_load_int(&b); } e = rdtsc(); printf("[C] fence_memory: %" PRIu64 "\n", (e - s) / IR); s = rdtsc(); for (i = 0; i < IR; i++) { ck_pr_store_int(&a, 0); ck_pr_faa_int(&a, 0); ck_pr_load_int(&b); } e = rdtsc(); printf("[C] atomic: %" PRIu64 "\n", (e - s) / IR); return 0; }