changes
authorPeizhao Ou <peizhaoo@uci.edu>
Fri, 20 Mar 2015 02:17:26 +0000 (19:17 -0700)
committerPeizhao Ou <peizhaoo@uci.edu>
Fri, 20 Mar 2015 02:17:26 +0000 (19:17 -0700)
chase-lev-deque-bugfix/Makefile
chase-lev-deque-bugfix/deque.c
chase-lev-deque-bugfix/interesting.txt
chase-lev-deque-bugfix/result5.txt [new file with mode: 0644]
chase-lev-deque-bugfix/result6.txt [new file with mode: 0644]
chase-lev-deque-bugfix/testcase1.c
chase-lev-deque-bugfix/testcase10.c [new file with mode: 0644]
chase-lev-deque-bugfix/testcase2.c
chase-lev-deque-bugfix/testcase7.c
chase-lev-deque-bugfix/testcase8.c
chase-lev-deque-bugfix/testcase9.c [new file with mode: 0644]

index 89f8c21c60786649bf343ee9b9138f5cd65d794d..91faa815d07412505a1ee669a75a605c5d4eface 100644 (file)
@@ -2,7 +2,7 @@ include ../benchmarks.mk
 
 BENCH := deque
 
-NORMAL_TESTS := testcase1 testcase2 testcase3 testcase4 testcase5 testcase6 testcase7 testcase8
+NORMAL_TESTS := testcase1 testcase2 testcase3 testcase4 testcase5 testcase6 testcase7 testcase8 testcase9 testcase10
 
 WILDCARD_TESTS := $(patsubst %, %_wildcard, $(NORMAL_TESTS))
 
index 86940459a8b1e1e5d0d2bf4d0a6c706c2f5b97f5..8126fc97070cb50c26eccd9c195f2d1d00759514 100644 (file)
@@ -28,8 +28,8 @@ 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_relaxed); // sc
-       size_t t = atomic_load_explicit(&q->top, memory_order_relaxed);
+       atomic_thread_fence(memory_order_seq_cst); // sc
+       size_t t = atomic_load_explicit(&q->top, memory_order_release);
        int x;
        if (t <= b) {
                /* Non-empty queue. */
@@ -61,13 +61,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_relaxed); // release
+       atomic_store_explicit(&q->array, new_a, memory_order_release); // 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_relaxed); // acquire
+       size_t t = atomic_load_explicit(&q->top, memory_order_acquire); // 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 +75,21 @@ 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_relaxed); // release
+       atomic_thread_fence(memory_order_release); // 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_relaxed); // sc
-       size_t b = atomic_load_explicit(&q->bottom, memory_order_relaxed); // acquire
+       atomic_thread_fence(memory_order_seq_cst); // sc
+       size_t b = atomic_load_explicit(&q->bottom, memory_order_acquire); // acquire
        int x = EMPTY;
        if (t < b) {
                /* Non-empty queue. */
-               Array *a = (Array *) atomic_load_explicit(&q->array, memory_order_relaxed); // acquire
+               Array *a = (Array *) atomic_load_explicit(&q->array, memory_order_acquire); // 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_release, memory_order_relaxed)) // sc
+                       memory_order_seq_cst, memory_order_relaxed)) // sc
                        /* Failed race. */
                        return ABORT;
        }
index 1e221a9c5b2c5e89e624afcbb17145d8f5fbfa89..ae423ba7439d1d6b6a69e1fb2840c192a6b268d3 100644 (file)
@@ -10,7 +10,7 @@ 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_acquire
+wildcard 12 -> memory_order_seq_cst
 wildcard 14 -> memory_order_relaxed
 wildcard 15 -> memory_order_relaxed
 wildcard 16 -> memory_order_relaxed
diff --git a/chase-lev-deque-bugfix/result5.txt b/chase-lev-deque-bugfix/result5.txt
new file mode 100644 (file)
index 0000000..1068f1e
--- /dev/null
@@ -0,0 +1,319 @@
+Result 0:
+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_release
+wildcard 8 -> memory_order_seq_cst
+wildcard 9 -> memory_order_relaxed
+wildcard 10 -> memory_order_relaxed
+wildcard 11 -> memory_order_relaxed
+wildcard 12 -> memory_order_acquire
+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_release
+
+Result 1:
+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_acquire
+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_release
+
+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_release
+wildcard 8 -> memory_order_seq_cst
+wildcard 9 -> memory_order_relaxed
+wildcard 10 -> memory_order_relaxed
+wildcard 11 -> memory_order_relaxed
+wildcard 12 -> memory_order_acquire
+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_release
+
+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_acquire
+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_release
+
+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_release
+wildcard 8 -> memory_order_seq_cst
+wildcard 9 -> memory_order_relaxed
+wildcard 10 -> memory_order_relaxed
+wildcard 11 -> memory_order_relaxed
+wildcard 12 -> memory_order_relaxed
+wildcard 14 -> memory_order_release
+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_release
+
+Result 5:
+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_release
+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_release
+
+Result 6:
+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_release
+wildcard 8 -> memory_order_seq_cst
+wildcard 9 -> memory_order_relaxed
+wildcard 10 -> memory_order_relaxed
+wildcard 11 -> memory_order_relaxed
+wildcard 12 -> memory_order_relaxed
+wildcard 14 -> memory_order_release
+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_relaxed
+
+Result 7:
+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_release
+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_release
diff --git a/chase-lev-deque-bugfix/result6.txt b/chase-lev-deque-bugfix/result6.txt
new file mode 100644 (file)
index 0000000..142aa9e
--- /dev/null
@@ -0,0 +1,319 @@
+Result 0:
+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_release
+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 1:
+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_release
+wildcard 8 -> memory_order_seq_cst
+wildcard 9 -> memory_order_relaxed
+wildcard 10 -> memory_order_relaxed
+wildcard 11 -> memory_order_relaxed
+wildcard 12 -> memory_order_relaxed
+wildcard 14 -> memory_order_release
+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 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_acquire
+wildcard 10 -> memory_order_relaxed
+wildcard 11 -> memory_order_relaxed
+wildcard 12 -> memory_order_relaxed
+wildcard 14 -> memory_order_release
+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 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_release
+wildcard 8 -> memory_order_seq_cst
+wildcard 9 -> memory_order_relaxed
+wildcard 10 -> memory_order_relaxed
+wildcard 11 -> memory_order_relaxed
+wildcard 12 -> memory_order_relaxed
+wildcard 14 -> memory_order_release
+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_acquire
+wildcard 10 -> memory_order_relaxed
+wildcard 11 -> memory_order_relaxed
+wildcard 12 -> memory_order_acquire
+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 5:
+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_release
+wildcard 8 -> memory_order_seq_cst
+wildcard 9 -> memory_order_relaxed
+wildcard 10 -> memory_order_relaxed
+wildcard 11 -> memory_order_relaxed
+wildcard 12 -> memory_order_acquire
+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 6:
+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_acquire
+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 7:
+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_release
+wildcard 8 -> memory_order_seq_cst
+wildcard 9 -> memory_order_relaxed
+wildcard 10 -> memory_order_relaxed
+wildcard 11 -> memory_order_relaxed
+wildcard 12 -> memory_order_acquire
+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
index 026d20f69d2c7bf79ee7412968afabc65cc89318..7d60fd5dafc21c130a957fd777260fa34c072c45 100644 (file)
@@ -15,6 +15,10 @@ int c;
 
 atomic_int x[2];
 
+/**
+       Synchronization between plain push and steal
+*/
+
 static void task(void * param) {
        a=steal(q);
        printf("a=%d\n", a);
diff --git a/chase-lev-deque-bugfix/testcase10.c b/chase-lev-deque-bugfix/testcase10.c
new file mode 100644 (file)
index 0000000..24fe169
--- /dev/null
@@ -0,0 +1,58 @@
+#include <stdlib.h>
+#include <assert.h>
+#include <stdio.h>
+#include <threads.h>
+#include <stdatomic.h>
+
+#include "model-assert.h"
+
+#include "deque.h"
+
+Deque *q;
+int a;
+int b;
+int c;
+
+static void task1(void * param) {
+       b=steal(q);
+       //c=steal(q);
+}
+
+static void task2(void * param) {
+       b=steal(q);
+       //c=steal(q);
+}
+
+int user_main(int argc, char **argv)
+{
+       thrd_t t1, t2;
+       q=create();
+
+       push(q, 1);
+       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);
+
+/*
+       bool correct=true;
+       if (a!=1 && a!=2 && a!=4 && a!= EMPTY)
+               correct=false;
+       if (b!=1 && b!=2 && b!=4 && b!= EMPTY)
+               correct=false;
+       if (c!=1 && c!=2 && c!=4 && a!= EMPTY)
+               correct=false;
+       if (a!=EMPTY && b!=EMPTY && c!=EMPTY && (a+b+c)!=7)
+               correct=false;
+       //if (!correct)
+               printf("a=%d b=%d c=%d\n",a,b,c);
+       MODEL_ASSERT(correct);
+       */
+
+       return 0;
+}
index 964d25e9fb76e756470f168744e61497201b62ad..fe77b178342953450f089ad6536b9d7595d21231 100644 (file)
@@ -13,6 +13,14 @@ int a;
 int b;
 int c;
 
+/**
+       Making w39 seq_cst; the two steals and the take have the following:
+       t.CAS() (in steal1)          b.store (in take)
+       fence() (in steal2)              fence() (in take)
+       b.load() (in steal2)         t.load() (in take)
+       neither loads reads the updated value.
+*/
+
 static void task(void * param) {
        b=steal(q);
        c=steal(q);
index 04986deabd79630a46665a991ece42434fadf81d..df419c113297956537e6cd14c5bb9590c974a402 100644 (file)
@@ -13,9 +13,13 @@ int a;
 int b;
 int c;
 
-static void task(void * param) {
+static void task1(void * param) {
        b=steal(q);
-       //c=steal(q);
+}
+
+static void task2(void * param) {
+       b=steal(q);
+       c=steal(q);
 }
 
 int user_main(int argc, char **argv)
@@ -25,11 +29,11 @@ int user_main(int argc, char **argv)
 
        push(q, 1);
        push(q, 2);
-       push(q, 3);
-       thrd_create(&t1, task, 0);
-       thrd_create(&t2, task, 0);
+       thrd_create(&t1, task1, 0);
+       thrd_create(&t2, task2, 0);
+       //push(q, 3);
        a=take(q);
-       c=take(q);
+       //c=take(q);
        thrd_join(t1);
        thrd_join(t2);
 
index d954138db7fb3d70755ebcfe4b81b535a11da7fe..a2387d47496579c08ac4f0a04a61978c68db7641 100644 (file)
@@ -15,23 +15,24 @@ int c;
 
 static void task(void * param) {
        b=steal(q);
-       //c=steal(q);
 }
 
 int user_main(int argc, char **argv)
 {
-       thrd_t t1, t2;
+       thrd_t t1, t2, t3;
        q=create();
 
        push(q, 1);
+       push(q, 2);
+       //push(q, 3);
        thrd_create(&t1, task, 0);
        thrd_create(&t2, task, 0);
+       thrd_create(&t3, task, 0);
        a=take(q);
-       push(q, 2);
-       c=take(q);
-       push(q, 3);
+       //c=take(q);
        thrd_join(t1);
        thrd_join(t2);
+       thrd_join(t3);
 
 /*
        bool correct=true;
diff --git a/chase-lev-deque-bugfix/testcase9.c b/chase-lev-deque-bugfix/testcase9.c
new file mode 100644 (file)
index 0000000..273bae3
--- /dev/null
@@ -0,0 +1,58 @@
+#include <stdlib.h>
+#include <assert.h>
+#include <stdio.h>
+#include <threads.h>
+#include <stdatomic.h>
+
+#include "model-assert.h"
+
+#include "deque.h"
+
+Deque *q;
+int a;
+int b;
+int c;
+
+static void task1(void * param) {
+       b=steal(q);
+       //c=steal(q);
+}
+
+static void task2(void * param) {
+       b=steal(q);
+       //c=steal(q);
+}
+
+int user_main(int argc, char **argv)
+{
+       thrd_t t1, t2;
+       q=create();
+
+       push(q, 1);
+       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);
+
+/*
+       bool correct=true;
+       if (a!=1 && a!=2 && a!=4 && a!= EMPTY)
+               correct=false;
+       if (b!=1 && b!=2 && b!=4 && b!= EMPTY)
+               correct=false;
+       if (c!=1 && c!=2 && c!=4 && a!= EMPTY)
+               correct=false;
+       if (a!=EMPTY && b!=EMPTY && c!=EMPTY && (a+b+c)!=7)
+               correct=false;
+       //if (!correct)
+               printf("a=%d b=%d c=%d\n",a,b,c);
+       MODEL_ASSERT(correct);
+       */
+
+       return 0;
+}