changes
authorPeizhao Ou <peizhaoo@uci.edu>
Fri, 20 Mar 2015 19:42:36 +0000 (12:42 -0700)
committerPeizhao Ou <peizhaoo@uci.edu>
Fri, 20 Mar 2015 19:42:36 +0000 (12:42 -0700)
12 files changed:
chase-lev-deque-bugfix/Makefile1 [deleted file]
chase-lev-deque-bugfix/deque.c
chase-lev-deque-bugfix/interesting.txt
chase-lev-deque-bugfix/result3.txt
chase-lev-deque-bugfix/result4.txt
chase-lev-deque-bugfix/testcase1.c
chase-lev-deque-bugfix/testcase3.c
chase-lev-deque-bugfix/testcase4.c
chase-lev-deque-bugfix/testcase5.c
chase-lev-deque-bugfix/testcase6.c
chase-lev-deque-bugfix/testcase8.c
chase-lev-deque-bugfix/testcase9.c

diff --git a/chase-lev-deque-bugfix/Makefile1 b/chase-lev-deque-bugfix/Makefile1
deleted file mode 100644 (file)
index 55a4edb..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-include ../benchmarks.mk
-
-BENCH := queue
-
-NORMAL_TESTS := testcase1 testcase2 testcase3
-
-WILDCARD_TESTS := $(patsubst %, %_wildcard, $(NORMAL_TESTS))
-
-TESTS := $(NORMAL_TESTS) $(WILDCARD_TESTS)
-
-all: $(TESTS)
-
-$(BENCH).o : $(BENCH).c $(BENCH).h
-       $(CC) -o $@ $< $(CFLAGS) -c $(LDFLAGS)
-
-$(BENCH)_wildcard.o : $(BENCH)_wildcard.c $(BENCH).h
-       $(CC) -o $@ $< $(CFLAGS) -c $(LDFLAGS)
-
-$(WILDCARD_TESTS): %_wildcard : %.c $(BENCH)_wildcard.o 
-       $(CC) -o $@ $^ $(CFLAGS) $(LDFLAGS)
-
-$(NORMAL_TESTS): % : %.c $(BENCH).o
-       $(CC) -o $@ $^ $(CFLAGS) $(LDFLAGS)
-
-clean:
-       rm -f *.o *.d $(TESTS)
index 8126fc97070cb50c26eccd9c195f2d1d00759514..63284465b1217c0eb19585e2944ec64257da584d 100644 (file)
@@ -4,16 +4,6 @@
 #include <stdlib.h>
 #include <stdio.h>
 
-Deque * create_size(int size) {
-       Deque * q = (Deque *) calloc(1, sizeof(Deque));
-       Array * a = (Array *) calloc(1, sizeof(Array)+2*sizeof(atomic_int));
-       atomic_store_explicit(&q->array, a, memory_order_relaxed);
-       atomic_store_explicit(&q->top, 0, memory_order_relaxed);
-       atomic_store_explicit(&q->bottom, 0, memory_order_relaxed);
-       atomic_store_explicit(&a->size, size, memory_order_relaxed);
-       return q;
-}
-
 Deque * create() {
        Deque * q = (Deque *) calloc(1, sizeof(Deque));
        Array * a = (Array *) calloc(1, sizeof(Array)+2*sizeof(atomic_int));
@@ -28,16 +18,15 @@ int take(Deque *q) {
        size_t b = atomic_load_explicit(&q->bottom, memory_order_relaxed) - 1;
        Array *a = (Array *) atomic_load_explicit(&q->array, memory_order_relaxed);
        atomic_store_explicit(&q->bottom, b, memory_order_relaxed);
-       atomic_thread_fence(memory_order_seq_cst); // sc
-       size_t t = atomic_load_explicit(&q->top, memory_order_release);
+       atomic_thread_fence(memory_order_seq_cst);
+       size_t t = atomic_load_explicit(&q->top, memory_order_relaxed);
        int x;
        if (t <= b) {
                /* Non-empty queue. */
                x = atomic_load_explicit(&a->buffer[b % atomic_load_explicit(&a->size,memory_order_relaxed)], memory_order_relaxed);
                if (t == b) {
                        /* Single last element in queue. */
-                       if (!atomic_compare_exchange_strong_explicit(&q->top, &t, t + 1,
-                               memory_order_acquire, memory_order_relaxed)) // sc
+                       if (!atomic_compare_exchange_strong_explicit(&q->top, &t, t + 1, memory_order_seq_cst, memory_order_relaxed))
                                /* Failed race. */
                                x = EMPTY;
                        atomic_store_explicit(&q->bottom, b + 1, memory_order_relaxed);
@@ -61,13 +50,13 @@ void resize(Deque *q) {
        for(i=top; i < bottom; i++) {
                atomic_store_explicit(&new_a->buffer[i % new_size], atomic_load_explicit(&a->buffer[i % size], memory_order_relaxed), memory_order_relaxed);
        }
-       atomic_store_explicit(&q->array, new_a, memory_order_release); // release
+       atomic_store_explicit(&q->array, new_a, memory_order_release);
        printf("resize\n");
 }
 
 void push(Deque *q, int x) {
        size_t b = atomic_load_explicit(&q->bottom, memory_order_relaxed);
-       size_t t = atomic_load_explicit(&q->top, memory_order_acquire); // acquire
+       size_t t = atomic_load_explicit(&q->top, memory_order_acquire);
        Array *a = (Array *) atomic_load_explicit(&q->array, memory_order_relaxed);
        if (b - t > atomic_load_explicit(&a->size, memory_order_relaxed) - 1) /* Full queue. */ {
                resize(q);
@@ -75,21 +64,20 @@ void push(Deque *q, int x) {
                a = (Array *) atomic_load_explicit(&q->array, memory_order_relaxed);
        }
        atomic_store_explicit(&a->buffer[b % atomic_load_explicit(&a->size, memory_order_relaxed)], x, memory_order_relaxed);
-       atomic_thread_fence(memory_order_release); // release
+       atomic_thread_fence(memory_order_release);
        atomic_store_explicit(&q->bottom, b + 1, memory_order_relaxed);
 }
 
 int steal(Deque *q) {
-       size_t t = atomic_load_explicit(&q->top, memory_order_relaxed); // acquire
-       atomic_thread_fence(memory_order_seq_cst); // sc
-       size_t b = atomic_load_explicit(&q->bottom, memory_order_acquire); // acquire
+       size_t t = atomic_load_explicit(&q->top, memory_order_acquire);
+       atomic_thread_fence(memory_order_seq_cst);
+       size_t b = atomic_load_explicit(&q->bottom, memory_order_acquire);
        int x = EMPTY;
        if (t < b) {
                /* Non-empty queue. */
-               Array *a = (Array *) atomic_load_explicit(&q->array, memory_order_acquire); // acquire
+               Array *a = (Array *) atomic_load_explicit(&q->array, memory_order_acquire);
                x = atomic_load_explicit(&a->buffer[t % atomic_load_explicit(&a->size, memory_order_relaxed)], memory_order_relaxed);
-               if (!atomic_compare_exchange_strong_explicit(&q->top, &t, t + 1,
-                       memory_order_seq_cst, memory_order_relaxed)) // sc
+               if (!atomic_compare_exchange_strong_explicit(&q->top, &t, t + 1, memory_order_seq_cst, memory_order_relaxed))
                        /* Failed race. */
                        return ABORT;
        }
index ae423ba7439d1d6b6a69e1fb2840c192a6b268d3..f708c1701c92651653bf215425a30cbef8703fea 100644 (file)
@@ -10,9 +10,9 @@ wildcard 8 -> memory_order_seq_cst
 wildcard 9 -> memory_order_acquire
 wildcard 10 -> memory_order_relaxed
 wildcard 11 -> memory_order_relaxed
-wildcard 12 -> memory_order_seq_cst
-wildcard 14 -> memory_order_relaxed
-wildcard 15 -> memory_order_relaxed
+wildcard 12 -> memory_order_acquire
+wildcard 14 -> memory_order_release
+wildcard 15 -> memory_order_release
 wildcard 16 -> memory_order_relaxed
 wildcard 17 -> memory_order_relaxed
 wildcard 18 -> memory_order_relaxed
index 61623bcff725888e22688a7bd959ba5ebf5baecd..84d5a2c25efcee2988a23a5482b5b6bf2709a24d 100644 (file)
@@ -18,6 +18,8 @@ wildcard 17 -> memory_order_relaxed
 wildcard 18 -> memory_order_relaxed
 wildcard 19 -> memory_order_relaxed
 wildcard 20 -> memory_order_relaxed
+wildcard 21 -> memory_order_relaxed
+wildcard 22 -> memory_order_relaxed
 wildcard 23 -> memory_order_relaxed
 wildcard 24 -> memory_order_relaxed
 wildcard 25 -> memory_order_relaxed
@@ -34,7 +36,7 @@ wildcard 35 -> memory_order_acquire
 wildcard 36 -> memory_order_relaxed
 wildcard 37 -> memory_order_relaxed
 wildcard 38 -> memory_order_relaxed
-wildcard 39 -> memory_order_release
+wildcard 39 -> memory_order_seq_cst
 
 Result 1:
 wildcard 1 -> memory_order_relaxed
@@ -45,6 +47,46 @@ wildcard 5 -> memory_order_relaxed
 wildcard 6 -> memory_order_relaxed
 wildcard 7 -> memory_order_relaxed
 wildcard 8 -> memory_order_seq_cst
+wildcard 9 -> memory_order_acquire
+wildcard 10 -> memory_order_relaxed
+wildcard 11 -> memory_order_relaxed
+wildcard 12 -> memory_order_relaxed
+wildcard 14 -> memory_order_relaxed
+wildcard 15 -> memory_order_relaxed
+wildcard 16 -> memory_order_relaxed
+wildcard 17 -> memory_order_relaxed
+wildcard 18 -> memory_order_relaxed
+wildcard 19 -> memory_order_relaxed
+wildcard 20 -> memory_order_relaxed
+wildcard 21 -> memory_order_relaxed
+wildcard 22 -> memory_order_relaxed
+wildcard 23 -> memory_order_relaxed
+wildcard 24 -> memory_order_relaxed
+wildcard 25 -> memory_order_relaxed
+wildcard 26 -> memory_order_relaxed
+wildcard 27 -> memory_order_relaxed
+wildcard 28 -> memory_order_relaxed
+wildcard 29 -> memory_order_relaxed
+wildcard 30 -> memory_order_relaxed
+wildcard 31 -> memory_order_release
+wildcard 32 -> memory_order_relaxed
+wildcard 33 -> memory_order_relaxed
+wildcard 34 -> memory_order_seq_cst
+wildcard 35 -> memory_order_acquire
+wildcard 36 -> memory_order_relaxed
+wildcard 37 -> memory_order_relaxed
+wildcard 38 -> memory_order_relaxed
+wildcard 39 -> memory_order_seq_cst
+
+Result 2:
+wildcard 1 -> memory_order_relaxed
+wildcard 2 -> memory_order_relaxed
+wildcard 3 -> memory_order_relaxed
+wildcard 4 -> memory_order_relaxed
+wildcard 5 -> memory_order_relaxed
+wildcard 6 -> memory_order_relaxed
+wildcard 7 -> memory_order_relaxed
+wildcard 8 -> memory_order_seq_cst
 wildcard 9 -> memory_order_relaxed
 wildcard 10 -> memory_order_relaxed
 wildcard 11 -> memory_order_relaxed
@@ -56,6 +98,8 @@ wildcard 17 -> memory_order_relaxed
 wildcard 18 -> memory_order_relaxed
 wildcard 19 -> memory_order_relaxed
 wildcard 20 -> memory_order_relaxed
+wildcard 21 -> memory_order_relaxed
+wildcard 22 -> memory_order_relaxed
 wildcard 23 -> memory_order_relaxed
 wildcard 24 -> memory_order_relaxed
 wildcard 25 -> memory_order_relaxed
@@ -72,4 +116,4 @@ wildcard 35 -> memory_order_acquire
 wildcard 36 -> memory_order_relaxed
 wildcard 37 -> memory_order_relaxed
 wildcard 38 -> memory_order_relaxed
-wildcard 39 -> memory_order_relaxed
+wildcard 39 -> memory_order_seq_cst
index f34eab1c07a4689e3f9a5be81a9dd9becd24a6f4..f29720b0d434561b1e017d7b357cc3193d0406bd 100644 (file)
@@ -36,7 +36,7 @@ wildcard 35 -> memory_order_acquire
 wildcard 36 -> memory_order_acquire
 wildcard 37 -> memory_order_relaxed
 wildcard 38 -> memory_order_acquire
-wildcard 39 -> memory_order_relaxed
+wildcard 39 -> memory_order_seq_cst
 
 Result 1:
 wildcard 1 -> memory_order_relaxed
@@ -76,7 +76,7 @@ wildcard 35 -> memory_order_acquire
 wildcard 36 -> memory_order_acquire
 wildcard 37 -> memory_order_relaxed
 wildcard 38 -> memory_order_relaxed
-wildcard 39 -> memory_order_release
+wildcard 39 -> memory_order_seq_cst
 
 Result 2:
 wildcard 1 -> memory_order_relaxed
@@ -87,6 +87,86 @@ wildcard 5 -> memory_order_relaxed
 wildcard 6 -> memory_order_relaxed
 wildcard 7 -> memory_order_relaxed
 wildcard 8 -> memory_order_seq_cst
+wildcard 9 -> memory_order_acquire
+wildcard 10 -> memory_order_relaxed
+wildcard 11 -> memory_order_relaxed
+wildcard 12 -> memory_order_relaxed
+wildcard 14 -> memory_order_relaxed
+wildcard 15 -> memory_order_relaxed
+wildcard 16 -> memory_order_relaxed
+wildcard 17 -> memory_order_relaxed
+wildcard 18 -> memory_order_relaxed
+wildcard 19 -> memory_order_relaxed
+wildcard 20 -> memory_order_relaxed
+wildcard 21 -> memory_order_relaxed
+wildcard 22 -> memory_order_relaxed
+wildcard 23 -> memory_order_release
+wildcard 24 -> memory_order_relaxed
+wildcard 25 -> memory_order_relaxed
+wildcard 26 -> memory_order_relaxed
+wildcard 27 -> memory_order_relaxed
+wildcard 28 -> memory_order_relaxed
+wildcard 29 -> memory_order_relaxed
+wildcard 30 -> memory_order_release
+wildcard 31 -> memory_order_release
+wildcard 32 -> memory_order_relaxed
+wildcard 33 -> memory_order_relaxed
+wildcard 34 -> memory_order_seq_cst
+wildcard 35 -> memory_order_acquire
+wildcard 36 -> memory_order_acquire
+wildcard 37 -> memory_order_relaxed
+wildcard 38 -> memory_order_acquire
+wildcard 39 -> memory_order_seq_cst
+
+Result 3:
+wildcard 1 -> memory_order_relaxed
+wildcard 2 -> memory_order_relaxed
+wildcard 3 -> memory_order_relaxed
+wildcard 4 -> memory_order_relaxed
+wildcard 5 -> memory_order_relaxed
+wildcard 6 -> memory_order_relaxed
+wildcard 7 -> memory_order_relaxed
+wildcard 8 -> memory_order_seq_cst
+wildcard 9 -> memory_order_acquire
+wildcard 10 -> memory_order_relaxed
+wildcard 11 -> memory_order_relaxed
+wildcard 12 -> memory_order_relaxed
+wildcard 14 -> memory_order_relaxed
+wildcard 15 -> memory_order_relaxed
+wildcard 16 -> memory_order_relaxed
+wildcard 17 -> memory_order_relaxed
+wildcard 18 -> memory_order_relaxed
+wildcard 19 -> memory_order_relaxed
+wildcard 20 -> memory_order_relaxed
+wildcard 21 -> memory_order_relaxed
+wildcard 22 -> memory_order_relaxed
+wildcard 23 -> memory_order_release
+wildcard 24 -> memory_order_relaxed
+wildcard 25 -> memory_order_acquire
+wildcard 26 -> memory_order_relaxed
+wildcard 27 -> memory_order_relaxed
+wildcard 28 -> memory_order_relaxed
+wildcard 29 -> memory_order_relaxed
+wildcard 30 -> memory_order_relaxed
+wildcard 31 -> memory_order_release
+wildcard 32 -> memory_order_relaxed
+wildcard 33 -> memory_order_relaxed
+wildcard 34 -> memory_order_seq_cst
+wildcard 35 -> memory_order_acquire
+wildcard 36 -> memory_order_acquire
+wildcard 37 -> memory_order_relaxed
+wildcard 38 -> memory_order_relaxed
+wildcard 39 -> memory_order_seq_cst
+
+Result 4:
+wildcard 1 -> memory_order_relaxed
+wildcard 2 -> memory_order_relaxed
+wildcard 3 -> memory_order_relaxed
+wildcard 4 -> memory_order_relaxed
+wildcard 5 -> memory_order_relaxed
+wildcard 6 -> memory_order_relaxed
+wildcard 7 -> memory_order_relaxed
+wildcard 8 -> memory_order_seq_cst
 wildcard 9 -> memory_order_relaxed
 wildcard 10 -> memory_order_relaxed
 wildcard 11 -> memory_order_relaxed
@@ -116,9 +196,9 @@ wildcard 35 -> memory_order_acquire
 wildcard 36 -> memory_order_acquire
 wildcard 37 -> memory_order_relaxed
 wildcard 38 -> memory_order_acquire
-wildcard 39 -> memory_order_release
+wildcard 39 -> memory_order_seq_cst
 
-Result 3:
+Result 5:
 wildcard 1 -> memory_order_relaxed
 wildcard 2 -> memory_order_relaxed
 wildcard 3 -> memory_order_relaxed
@@ -156,4 +236,4 @@ wildcard 35 -> memory_order_acquire
 wildcard 36 -> memory_order_acquire
 wildcard 37 -> memory_order_relaxed
 wildcard 38 -> memory_order_relaxed
-wildcard 39 -> memory_order_release
+wildcard 39 -> memory_order_seq_cst
index 7d60fd5dafc21c130a957fd777260fa34c072c45..6d344c26e38a1016dc606dfbdfa8c86dded595fa 100644 (file)
@@ -16,7 +16,8 @@ int c;
 atomic_int x[2];
 
 /**
-       Synchronization between plain push and steal
+       Synchronization between plain push and steal (making w31 release and w35
+       acquire)
 */
 
 static void task(void * param) {
index 92f33ec409a27f4d2553057dcd0972d9857f3b2a..ed020144f59cfcec6f505a25be82fa59e9c28c0c 100644 (file)
@@ -13,25 +13,27 @@ int a;
 int b;
 int c;
 
+/** Making CAS in steal() (w39) SC */
+
 static void task(void * param) {
-       a=steal(q);
-       printf("steal a=%d\n", a);
+       b=steal(q);
+       //c=steal(q);
 }
 
 int user_main(int argc, char **argv)
 {
        thrd_t t1, t2;
        q=create();
+
        push(q, 1);
+       push(q, 2);
+       push(q, 3);
        thrd_create(&t1, task, 0);
-       //thrd_create(&t2, task, 0);
-       //push(q, 2);
-       //push(q, 4);
-       b=take(q);
-       printf("take b=%d\n", b);
+       thrd_create(&t2, task, 0);
+       a=take(q);
        //c=take(q);
        thrd_join(t1);
-       //thrd_join(t2);
+       thrd_join(t2);
 
 /*
        bool correct=true;
index af332bfb689c3196a69ed5b049c1b3deff332bc8..93eaa526dc72e34902994ccd9240a8d37ea02f5a 100644 (file)
@@ -13,6 +13,9 @@ int a;
 int b;
 int c;
 
+/** Making either w7 release or w9 acquire, the previously nos-SCness in the SC
+ *  analysis */
+
 static void task(void * param) {
        b=steal(q);
 }
@@ -22,9 +25,9 @@ int user_main(int argc, char **argv)
        thrd_t t1, t2;
        q=create();
 
+       thrd_create(&t1, task, 0);
        push(q, 1);
        push(q, 2);
-       thrd_create(&t1, task, 0);
        push(q, 3);
        //thrd_create(&t2, task, 0);
        //a=take(q);
index 0d6d3e41ec23476aca3f90c0e0de09d14bdc3b4f..0bbc6db02066a72426aa9d7294401b41bef36728 100644 (file)
@@ -13,7 +13,14 @@ int a;
 int b;
 int c;
 
-static void task(void * param) {
+/** Making w14 release */
+
+static void task1(void * param) {
+       b=steal(q);
+       //c=steal(q);
+}
+
+static void task2(void * param) {
        b=steal(q);
        //c=steal(q);
 }
@@ -24,14 +31,15 @@ int user_main(int argc, char **argv)
        q=create();
 
        push(q, 1);
-       thrd_create(&t1, task, 0);
-       //thrd_create(&t2, task, 0);
-       push(q, 2);
-       push(q, 3);
+       thrd_create(&t1, task1, 0);
+       thrd_create(&t2, task2, 0);
        a=take(q);
+       push(q, 2);
        c=take(q);
+       //push(q, 2);
+       //push(q, 3);
        thrd_join(t1);
-       //thrd_join(t2);
+       thrd_join(t2);
 
 /*
        bool correct=true;
index 2a3763663e7b040f70536eb7fb84478efd27502b..92f33ec409a27f4d2553057dcd0972d9857f3b2a 100644 (file)
@@ -14,24 +14,24 @@ int b;
 int c;
 
 static void task(void * param) {
-       b=steal(q);
-       //c=steal(q);
+       a=steal(q);
+       printf("steal a=%d\n", a);
 }
 
 int user_main(int argc, char **argv)
 {
        thrd_t t1, t2;
        q=create();
-
        push(q, 1);
-       push(q, 2);
-       push(q, 3);
        thrd_create(&t1, task, 0);
-       thrd_create(&t2, task, 0);
-       a=take(q);
+       //thrd_create(&t2, task, 0);
+       //push(q, 2);
+       //push(q, 4);
+       b=take(q);
+       printf("take b=%d\n", b);
        //c=take(q);
        thrd_join(t1);
-       thrd_join(t2);
+       //thrd_join(t2);
 
 /*
        bool correct=true;
index a2387d47496579c08ac4f0a04a61978c68db7641..bb8539eef8f31c28c29e8f6a4ccc5e81a1277fdf 100644 (file)
@@ -23,16 +23,16 @@ int user_main(int argc, char **argv)
        q=create();
 
        push(q, 1);
-       push(q, 2);
+       //push(q, 2);
        //push(q, 3);
        thrd_create(&t1, task, 0);
        thrd_create(&t2, task, 0);
-       thrd_create(&t3, task, 0);
+       //thrd_create(&t3, task, 0);
        a=take(q);
        //c=take(q);
        thrd_join(t1);
        thrd_join(t2);
-       thrd_join(t3);
+       //thrd_join(t3);
 
 /*
        bool correct=true;
index 273bae35b7fad29f1c0c194dee930f6d7dc0335d..b8560eeac50f3c921f6e1598083e61dae4261f83 100644 (file)
@@ -13,12 +13,7 @@ int a;
 int b;
 int c;
 
-static void task1(void * param) {
-       b=steal(q);
-       //c=steal(q);
-}
-
-static void task2(void * param) {
+static void task(void * param) {
        b=steal(q);
        //c=steal(q);
 }
@@ -29,15 +24,14 @@ int user_main(int argc, char **argv)
        q=create();
 
        push(q, 1);
-       thrd_create(&t1, task1, 0);
-       thrd_create(&t2, task2, 0);
-       a=take(q);
        push(q, 2);
+       push(q, 3);
+       thrd_create(&t1, task, 0);
+       //thrd_create(&t2, task, 0);
+       a=take(q);
        c=take(q);
-       //push(q, 2);
-       //push(q, 3);
        thrd_join(t1);
-       thrd_join(t2);
+       //thrd_join(t2);
 
 /*
        bool correct=true;