From: Peizhao Ou Date: Fri, 20 Mar 2015 19:42:36 +0000 (-0700) Subject: changes X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=0c0b00b61459795a2c3efff49189844f88057599;p=model-checker-benchmarks.git changes --- diff --git a/chase-lev-deque-bugfix/Makefile1 b/chase-lev-deque-bugfix/Makefile1 deleted file mode 100644 index 55a4edb..0000000 --- a/chase-lev-deque-bugfix/Makefile1 +++ /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) diff --git a/chase-lev-deque-bugfix/deque.c b/chase-lev-deque-bugfix/deque.c index 8126fc9..6328446 100644 --- a/chase-lev-deque-bugfix/deque.c +++ b/chase-lev-deque-bugfix/deque.c @@ -4,16 +4,6 @@ #include #include -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; } diff --git a/chase-lev-deque-bugfix/interesting.txt b/chase-lev-deque-bugfix/interesting.txt index ae423ba..f708c17 100644 --- a/chase-lev-deque-bugfix/interesting.txt +++ b/chase-lev-deque-bugfix/interesting.txt @@ -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 diff --git a/chase-lev-deque-bugfix/result3.txt b/chase-lev-deque-bugfix/result3.txt index 61623bc..84d5a2c 100644 --- a/chase-lev-deque-bugfix/result3.txt +++ b/chase-lev-deque-bugfix/result3.txt @@ -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 diff --git a/chase-lev-deque-bugfix/result4.txt b/chase-lev-deque-bugfix/result4.txt index f34eab1..f29720b 100644 --- a/chase-lev-deque-bugfix/result4.txt +++ b/chase-lev-deque-bugfix/result4.txt @@ -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 diff --git a/chase-lev-deque-bugfix/testcase1.c b/chase-lev-deque-bugfix/testcase1.c index 7d60fd5..6d344c2 100644 --- a/chase-lev-deque-bugfix/testcase1.c +++ b/chase-lev-deque-bugfix/testcase1.c @@ -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) { diff --git a/chase-lev-deque-bugfix/testcase3.c b/chase-lev-deque-bugfix/testcase3.c index 92f33ec..ed02014 100644 --- a/chase-lev-deque-bugfix/testcase3.c +++ b/chase-lev-deque-bugfix/testcase3.c @@ -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; diff --git a/chase-lev-deque-bugfix/testcase4.c b/chase-lev-deque-bugfix/testcase4.c index af332bf..93eaa52 100644 --- a/chase-lev-deque-bugfix/testcase4.c +++ b/chase-lev-deque-bugfix/testcase4.c @@ -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); diff --git a/chase-lev-deque-bugfix/testcase5.c b/chase-lev-deque-bugfix/testcase5.c index 0d6d3e4..0bbc6db 100644 --- a/chase-lev-deque-bugfix/testcase5.c +++ b/chase-lev-deque-bugfix/testcase5.c @@ -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; diff --git a/chase-lev-deque-bugfix/testcase6.c b/chase-lev-deque-bugfix/testcase6.c index 2a37636..92f33ec 100644 --- a/chase-lev-deque-bugfix/testcase6.c +++ b/chase-lev-deque-bugfix/testcase6.c @@ -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; diff --git a/chase-lev-deque-bugfix/testcase8.c b/chase-lev-deque-bugfix/testcase8.c index a2387d4..bb8539e 100644 --- a/chase-lev-deque-bugfix/testcase8.c +++ b/chase-lev-deque-bugfix/testcase8.c @@ -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; diff --git a/chase-lev-deque-bugfix/testcase9.c b/chase-lev-deque-bugfix/testcase9.c index 273bae3..b8560ee 100644 --- a/chase-lev-deque-bugfix/testcase9.c +++ b/chase-lev-deque-bugfix/testcase9.c @@ -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;