forked from mindspore-Ecosystem/mindspore
He Wei
41dcac9c49
Robin-hood-hashing (https://github.com/martinus/robin-hood-hashing) is considered faster then std::unordered_map/set, so we use it to improve mindspore performance. 1. robin_hood head file in `third_party/robin_hood/include`; 2. In `utils/hash_map.h` and `utils/hash_set.h`, we define: - mindspore::HashMap as an alias of robin_hood::unordered_map; - mindspore::HashSet as an alias of robin_hood::unordered_set; 3. Replace: - `#include <unordered_map>` --> `#include "utils/hash_map.h"`; - `#include <unordered_set>` --> `#include "utils/hash_set.h"`; - `std::unordered_map` --> `mindspore::HashMap`; - `std::unordered_set` --> `mindspore::HashSet`; - `map.insert(std::pair(key, value))` --> `map.emplace(key, value)`; - `[] (const std::pair<K, V> &p) {..} ` --> `[] (const auto &p) {..} `; 4. Fix issues found by switch to robin_hood: - AnfNodeConfig hash and equal; - Fix a bug in `Slice::operator==()`; - Fix a bug in `CNode::HasPrimalAttr()`; - Fix map.erase() usage bugs: `map.erase(iter++)` --> `iter = map.erase(iter)`; - Fix some iterator invalidated problem; 5. Some std::unordered_map/set can not replace by robin_hood: - As parameter of functions that exposed to python by pybind11; - Use bad hash that cause robin_hood::map over_flow, such as AbstractBasePtrListHasher; 6. Update cpp unit tests; 7. Add build option '-F' to enable robin_hood, default on. |
||
---|---|---|
.. | ||
patch | ||
proto | ||
robin_hood | ||
securec | ||
OWNERS |