forked from mindspore-Ecosystem/mindspore
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. |
||
|---|---|---|
| .. | ||
| addn_fission_test.cc | ||
| batch_norm_bert_fission_test.cc | ||
| batch_norm_grad_infer_fission_test.cc | ||
| bn_grad_split_test.cc | ||
| bn_split_test.cc | ||
| concat_fission_test.cc | ||
| lars_v2_fission_test.cc | ||
| layer_norm_grad_split_test.cc | ||
| pack_fission_test.cc | ||
| reduce_min_fission_test.cc | ||
| single_batch_norm_fission_test.cc | ||
| split_fission_test.cc | ||
| tensor_scatter_update_fission_test.cc | ||
| topk_split_test.cc | ||
| transdata_split_test.cc | ||
| unsorted_segment_sum_fission_test.cc | ||