From 7c7e31a160e2327090e2a4ed74d48fbae4ae20e9 Mon Sep 17 00:00:00 2001 From: Peizhao Ou Date: Thu, 19 Mar 2015 19:17:26 -0700 Subject: [PATCH] changes --- chase-lev-deque-bugfix/Makefile | 2 +- chase-lev-deque-bugfix/deque.c | 18 +- chase-lev-deque-bugfix/interesting.txt | 2 +- chase-lev-deque-bugfix/result5.txt | 319 +++++++++++++++++++++++++ chase-lev-deque-bugfix/result6.txt | 319 +++++++++++++++++++++++++ chase-lev-deque-bugfix/testcase1.c | 4 + chase-lev-deque-bugfix/testcase10.c | 58 +++++ chase-lev-deque-bugfix/testcase2.c | 8 + chase-lev-deque-bugfix/testcase7.c | 16 +- chase-lev-deque-bugfix/testcase8.c | 11 +- chase-lev-deque-bugfix/testcase9.c | 58 +++++ 11 files changed, 793 insertions(+), 22 deletions(-) create mode 100644 chase-lev-deque-bugfix/result5.txt create mode 100644 chase-lev-deque-bugfix/result6.txt create mode 100644 chase-lev-deque-bugfix/testcase10.c create mode 100644 chase-lev-deque-bugfix/testcase9.c diff --git a/chase-lev-deque-bugfix/Makefile b/chase-lev-deque-bugfix/Makefile index 89f8c21..91faa81 100644 --- a/chase-lev-deque-bugfix/Makefile +++ b/chase-lev-deque-bugfix/Makefile @@ -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)) diff --git a/chase-lev-deque-bugfix/deque.c b/chase-lev-deque-bugfix/deque.c index 8694045..8126fc9 100644 --- a/chase-lev-deque-bugfix/deque.c +++ b/chase-lev-deque-bugfix/deque.c @@ -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; } diff --git a/chase-lev-deque-bugfix/interesting.txt b/chase-lev-deque-bugfix/interesting.txt index 1e221a9..ae423ba 100644 --- a/chase-lev-deque-bugfix/interesting.txt +++ b/chase-lev-deque-bugfix/interesting.txt @@ -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 index 0000000..1068f1e --- /dev/null +++ b/chase-lev-deque-bugfix/result5.txt @@ -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 index 0000000..142aa9e --- /dev/null +++ b/chase-lev-deque-bugfix/result6.txt @@ -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 diff --git a/chase-lev-deque-bugfix/testcase1.c b/chase-lev-deque-bugfix/testcase1.c index 026d20f..7d60fd5 100644 --- a/chase-lev-deque-bugfix/testcase1.c +++ b/chase-lev-deque-bugfix/testcase1.c @@ -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 index 0000000..24fe169 --- /dev/null +++ b/chase-lev-deque-bugfix/testcase10.c @@ -0,0 +1,58 @@ +#include +#include +#include +#include +#include + +#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; +} diff --git a/chase-lev-deque-bugfix/testcase2.c b/chase-lev-deque-bugfix/testcase2.c index 964d25e..fe77b17 100644 --- a/chase-lev-deque-bugfix/testcase2.c +++ b/chase-lev-deque-bugfix/testcase2.c @@ -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); diff --git a/chase-lev-deque-bugfix/testcase7.c b/chase-lev-deque-bugfix/testcase7.c index 04986de..df419c1 100644 --- a/chase-lev-deque-bugfix/testcase7.c +++ b/chase-lev-deque-bugfix/testcase7.c @@ -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); diff --git a/chase-lev-deque-bugfix/testcase8.c b/chase-lev-deque-bugfix/testcase8.c index d954138..a2387d4 100644 --- a/chase-lev-deque-bugfix/testcase8.c +++ b/chase-lev-deque-bugfix/testcase8.c @@ -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 index 0000000..273bae3 --- /dev/null +++ b/chase-lev-deque-bugfix/testcase9.c @@ -0,0 +1,58 @@ +#include +#include +#include +#include +#include + +#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; +} -- 2.34.1