blob: f7aa157017ed1f6afd7ee03314a9b68f8607e15e [file] [log] [blame]
#include <stdio.h>
#include <inttypes.h>
#include <stdint.h>
#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;
}