diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2017-12-19 20:16:55 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-12-19 20:16:55 +0100 |
commit | a5760e9537aee7fd123e1455424b1083d6881ee8 (patch) | |
tree | 9ffe0983308081de8cc38fa5a53d444c85ca053b | |
parent | d34215a65829e508b2acb4e9037c98872b98268b (diff) | |
parent | b0c4683b5643d39f76dde45187307e7f8fceaa5b (diff) |
Merge pull request #4495 from vespa-engine/balder/use-2inN-hash-instead-of-prime-number-to-avoid-modulo
Balder/use 2in n hash instead of prime number to avoid modulo
-rw-r--r-- | eval/src/vespa/eval/tensor/sparse/sparse_tensor.cpp | 5 | ||||
-rw-r--r-- | eval/src/vespa/eval/tensor/sparse/sparse_tensor.h | 3 | ||||
-rw-r--r-- | vespalib/src/vespa/vespalib/stllike/hash_map.hpp | 16 |
3 files changed, 17 insertions, 7 deletions
diff --git a/eval/src/vespa/eval/tensor/sparse/sparse_tensor.cpp b/eval/src/vespa/eval/tensor/sparse/sparse_tensor.cpp index 1aa05bf4f61..e4cd9037588 100644 --- a/eval/src/vespa/eval/tensor/sparse/sparse_tensor.cpp +++ b/eval/src/vespa/eval/tensor/sparse/sparse_tensor.cpp @@ -190,4 +190,7 @@ SparseTensor::reduce(join_fun_t op, } -VESPALIB_HASH_MAP_INSTANTIATE(vespalib::tensor::SparseTensorAddressRef, double); +// VESPALIB_HASH_MAP_INSTANTIATE(vespalib::tensor::SparseTensorAddressRef, double); + +VESPALIB_HASH_MAP_INSTANTIATE_H_E_M(vespalib::tensor::SparseTensorAddressRef, double, vespalib::hash<vespalib::tensor::SparseTensorAddressRef>, + std::equal_to<vespalib::tensor::SparseTensorAddressRef>, vespalib::hashtable_base::and_modulator); diff --git a/eval/src/vespa/eval/tensor/sparse/sparse_tensor.h b/eval/src/vespa/eval/tensor/sparse/sparse_tensor.h index 78c69bd5e43..3eeb122f48c 100644 --- a/eval/src/vespa/eval/tensor/sparse/sparse_tensor.h +++ b/eval/src/vespa/eval/tensor/sparse/sparse_tensor.h @@ -21,7 +21,8 @@ namespace vespalib::tensor { class SparseTensor : public Tensor { public: - using Cells = vespalib::hash_map<SparseTensorAddressRef, double>; + using Cells = hash_map<SparseTensorAddressRef, double, hash<SparseTensorAddressRef>, + std::equal_to<SparseTensorAddressRef>, hashtable_base::and_modulator>; static constexpr size_t STASH_CHUNK_SIZE = 16384u; diff --git a/vespalib/src/vespa/vespalib/stllike/hash_map.hpp b/vespalib/src/vespa/vespalib/stllike/hash_map.hpp index 359ba235a36..40ef90826b6 100644 --- a/vespalib/src/vespa/vespalib/stllike/hash_map.hpp +++ b/vespalib/src/vespa/vespalib/stllike/hash_map.hpp @@ -64,12 +64,18 @@ hash_map<K, V, H, EQ, M>::getMemoryUsed() const } -#define VESPALIB_HASH_MAP_INSTANTIATE_H(K, V, H) \ - template class vespalib::hash_map<K, V, H>; \ - template class vespalib::hashtable<K, std::pair<K,V>, H, std::equal_to<K>, std::_Select1st<std::pair<K,V>>>; \ - template vespalib::hashtable<K, std::pair<K,V>, H, std::equal_to<K>, std::_Select1st<std::pair<K,V>>>::insert_result \ - vespalib::hashtable<K, std::pair<K,V>, H, std::equal_to<K>, std::_Select1st<std::pair<K,V>>>::insert(std::pair<K,V> &&); \ + +#define VESPALIB_HASH_MAP_INSTANTIATE_H_E_M(K, V, H, E, M) \ + template class vespalib::hash_map<K, V, H, E, M>; \ + template class vespalib::hashtable<K, std::pair<K,V>, H, E, std::_Select1st<std::pair<K,V>>, M>; \ + template vespalib::hashtable<K, std::pair<K,V>, H, E, std::_Select1st<std::pair<K,V>>, M>::insert_result \ + vespalib::hashtable<K, std::pair<K,V>, H, E, std::_Select1st<std::pair<K,V>>, M>::insert(std::pair<K,V> &&); \ template class vespalib::Array<vespalib::hash_node<std::pair<K,V>>>; +#define VESPALIB_HASH_MAP_INSTANTIATE_H_E(K, V, H, E) \ + VESPALIB_HASH_MAP_INSTANTIATE_H_E_M(K, V, H, E, vespalib::hashtable_base::prime_modulator) + +#define VESPALIB_HASH_MAP_INSTANTIATE_H(K, V, H) VESPALIB_HASH_MAP_INSTANTIATE_H_E(K, V, H, std::equal_to<K>) + #define VESPALIB_HASH_MAP_INSTANTIATE(K, V) VESPALIB_HASH_MAP_INSTANTIATE_H(K, V, vespalib::hash<K>) |