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.
changed the function to "TypeIdToString", and use the Type::ToString() function,
instead of TypeId-String map.
changed the DtypeToTypeId together, the original StringToType can be used.
added a new interface StringToTypeId.
it's unreasonable to change the node when generating kernel json.
instead, it should be set in a pass.
most of the operators in original akg_kernel_attrs_process are not longer used,
so we deleted them, leaving only the "Cast" and "MatMul/BatchMatMul".
* change the graphkernel's passes code(backend/optimizer/graph_kernel/*) to the
new namespace `mindspore::graphkernel`, to decouple from `mindspore::opt`.
* change the original `mindspore::opt::graphkernel` to `mindspore::graphkernel::inner` (graph_kernel/model)
* change the original `mindspore::opt::expanders` to `mindspore::graphkernel::expanders` (graph_kernel/expanders)
TODO: modify graph_kernel_flags, kernel_compiler/akg/
The "throw" statement is not allowed in mindspore project (codedex check),
so we remove the self-define exception and replace with MS_LOG(EXCEPTION).
In GraphKernelExpanders, we check the return value instead.
The rollback function in ArithmeticSimplify / TrnasformOpOptimizer
is not supported now.
what's more,
changed the c++ op expanders from .h files to .cc files,
the OpExpanderRegister is called in each .cc file, likes
the operator registers in mindspore.
modifications for pass transform_op_optimizer:
1. Changed the maxflow-mincut algorithm to the Dinic's Algorithm,
since bug exists in the original ISAP codes.
if the algorithm is slow, we can apply some optimization for it. (e.g. current-arc optimization)
2. Added the pass TransformOpOptimizer in OptLevel_3.
this pass collects nodes around the specific transform operator (only Transpose now),
and use the mincut algorithm to get a plan, then re-link the original graph and
re-inference the shape and format of graph.
modifications for litegraph:
1. the class Node inherits from std::enable_shared_from_this,so we can get a shared_ptr by a pure pointer.
2. modified the Infer interface. it don't change the node, only inference the infos and return them.
This reverts commit b077aa1cab.
Revert "[feat] [assistant] [I3T96X] add new Dataset operator LibriSpeechDataset"
This reverts commit 4e6f7dc97d.
delete pass_registry_test.cc
comment hiai_nlu_model_multi.pb related line
Add a subdirectory "model" in the "backend/optimizer/graph_kernel" for litegraph.
Implement two interfaces "AnfGraph2LiteGraph" and "LiteGraph2AnfGraph".
The litegraph will be the base data structure when we migrate the GraphKernel code
from python("mindspore/_extends/graph_kernel") to c++.