From ebdbbc647fee879064e4cad5f3f21332073f5db6 Mon Sep 17 00:00:00 2001 From: Peizhao Ou Date: Mon, 24 Mar 2014 14:52:28 -0700 Subject: [PATCH] hashtable still buggy --- benchmark/cliffc-hashtable/cliffc_hashtable.h | 14 +++++++------- benchmark/cliffc-hashtable/main.cc | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/benchmark/cliffc-hashtable/cliffc_hashtable.h b/benchmark/cliffc-hashtable/cliffc_hashtable.h index 8aecd66..1bbe156 100644 --- a/benchmark/cliffc-hashtable/cliffc_hashtable.h +++ b/benchmark/cliffc-hashtable/cliffc_hashtable.h @@ -309,7 +309,7 @@ friend class CHM; kvs_data* copy_slot_and_check(cliffc_hashtable *topmap, kvs_data *oldkvs, int idx, void *should_help) { - kvs_data *newkvs = _newkvs.load(memory_order_relaxed); + kvs_data *newkvs = _newkvs.load(memory_order_acquire); // We're only here cause the caller saw a Prime if (copy_slot(topmap, idx, oldkvs, newkvs)) copy_check_and_promote(topmap, oldkvs, 1); // Record the slot copied @@ -332,7 +332,7 @@ friend class CHM; // Promote the new table to the current table if (copyDone + workdone == oldlen && topmap->_kvs.load(memory_order_relaxed) == oldkvs) { - kvs_data *newkvs = _newkvs.load(memory_order_relaxed); + kvs_data *newkvs = _newkvs.load(memory_order_acquire); topmap->_kvs.compare_exchange_strong(oldkvs, newkvs, memory_order_release, memory_order_relaxed); } @@ -443,7 +443,7 @@ friend class CHM; TypeV* get(TypeK *key) { slot *key_slot = new slot(false, key); int fullhash = hash(key_slot); - kvs_data *kvs = _kvs.load(memory_order_relaxed); + kvs_data *kvs = _kvs.load(memory_order_acquire); slot *V = get_impl(this, kvs, key_slot, fullhash); if (V == NULL) return NULL; MODEL_ASSERT (!is_prime(V)); @@ -745,7 +745,7 @@ friend class CHM; key_slot == TOMBSTONE) { // Retry in new table // Atomic read can be here - kvs_data *newkvs = chm->_newkvs.load(memory_order_relaxed); + kvs_data *newkvs = chm->_newkvs.load(memory_order_acquire); /** @Begin @Commit_point_define_check: newkvs == NULL @@ -769,7 +769,7 @@ friend class CHM; slot *key_slot = new slot(false, key); slot *value_slot = new slot(false, value); - kvs_data *kvs = _kvs.load(memory_order_relaxed); + kvs_data *kvs = _kvs.load(memory_order_acquire); slot *res = putIfMatch(this, kvs, key_slot, value_slot, old_val); // Only when copy_slot() call putIfMatch() will it return NULL MODEL_ASSERT (res != NULL); @@ -840,7 +840,7 @@ friend class CHM; // Here it tries to resize cause it doesn't want other threads to stop // its progress (eagerly try to resize soon) - newkvs = chm->_newkvs.load(memory_order_relaxed); + newkvs = chm->_newkvs.load(memory_order_acquire); if (newkvs == NULL && ((V == NULL && chm->table_full(reprobe_cnt, len)) || is_prime(V))) { //model_print("resize2\n"); @@ -919,7 +919,7 @@ friend class CHM; // Help along an existing table-resize. This is a fast cut-out wrapper. kvs_data* help_copy(kvs_data *helper) { - kvs_data *topkvs = _kvs.load(memory_order_relaxed); + kvs_data *topkvs = _kvs.load(memory_order_acquire); CHM *topchm = get_chm(topkvs); // No cpy in progress if (topchm->_newkvs.load(memory_order_relaxed) == NULL) return helper; diff --git a/benchmark/cliffc-hashtable/main.cc b/benchmark/cliffc-hashtable/main.cc index aaa4f64..b6275ca 100644 --- a/benchmark/cliffc-hashtable/main.cc +++ b/benchmark/cliffc-hashtable/main.cc @@ -89,7 +89,7 @@ void threadMain(void *arg) { int user_main(int argc, char *argv[]) { thrd_t t1, t2; - table = new cliffc_hashtable(16); + table = new cliffc_hashtable(2); k1 = new IntWrapper(3); k2 = new IntWrapper(5); k3 = new IntWrapper(11); -- 2.34.1