23 #ifndef TVM_NODE_STRUCTURAL_HASH_H_ 24 #define TVM_NODE_STRUCTURAL_HASH_H_ 40 template <
typename T,
typename U>
46 static_assert(
sizeof(
Union) ==
sizeof(T),
"sizeof(Union) != sizeof(T)");
47 static_assert(
sizeof(
Union) ==
sizeof(U),
"sizeof(Union) != sizeof(U)");
54 uint64_t
operator()(
const float& key)
const {
return Reinterpret<float, uint32_t>(key); }
55 uint64_t
operator()(
const double& key)
const {
return Reinterpret<double, uint64_t>(key); }
56 uint64_t
operator()(
const int64_t& key)
const {
return Reinterpret<int64_t, uint64_t>(key); }
57 uint64_t
operator()(
const uint64_t& key)
const {
return key; }
58 uint64_t
operator()(
const int& key)
const {
return Reinterpret<int, uint32_t>(key); }
59 uint64_t
operator()(
const bool& key)
const {
return key; }
61 return Reinterpret<DLDataType, uint32_t>(key);
63 template <typename ENum, typename = typename std::enable_if<std::is_enum<ENum>::value>::type>
65 return Reinterpret<int64_t, uint64_t>(
static_cast<int64_t
>(key));
86 using BaseValueHash::operator();
120 virtual void SHashReduceHashedValue(uint64_t hashed_value) = 0;
127 virtual void SHashReduce(
const ObjectRef& key,
bool map_free_vars) = 0;
150 virtual bool LookupHashedValue(
const ObjectRef& key, uint64_t* hashed_value) = 0;
155 virtual void MarkGraphNode() = 0;
166 : handler_(handler), map_free_vars_(map_free_vars) {}
171 template <
typename T,
172 typename =
typename std::enable_if<!std::is_base_of<ObjectRef, T>::value>::type>
194 handler_->SHashReduceFreeVar(var, map_free_vars_);
221 void SHashReduceHashedValue(uint64_t hashed_value)
override;
222 void SHashReduce(
const ObjectRef& key,
bool map_free_vars)
override;
224 bool LookupHashedValue(
const ObjectRef& key, uint64_t* hashed_value)
override;
225 void MarkGraphNode()
override;
233 virtual uint64_t Hash(
const ObjectRef&
object,
bool map_free_vars);
242 virtual void DispatchSHash(
const ObjectRef&
object,
bool map_free_vars);
251 static constexpr
const std::nullptr_t VisitAttrs =
nullptr;
258 #endif // TVM_NODE_STRUCTURAL_HASH_H_ static uint64_t StableHashBytes(const char *data, size_t size)
Hash the binary bytes.
Definition: string.h:251
void FreeVarHashImpl(const runtime::Object *var) const
Implementation for hash for a free var.
Definition: structural_hash.h:193
Internal handler that defines custom behaviors.
Definition: structural_hash.h:113
A Reducer class to reduce the structural equality result of two objects.
Definition: structural_equal.h:124
runtime implementation for LibTorch/TorchScript.
Definition: analyzer.h:36
A Reducer class to reduce the structural hash value.
Definition: structural_hash.h:110
PrimExpr equal(PrimExpr a, PrimExpr b, Span span=Span())
equal
uint64_t operator()(const ENum &key) const
Definition: structural_hash.h:64
uint64_t Reinterpret(T value) const
Definition: structural_hash.h:41
base class of all object containers.
Definition: object.h:167
uint64_t operator()(const double &key) const
Definition: structural_hash.h:55
uint64_t operator()(const bool &key) const
Definition: structural_hash.h:59
IntSet Union(const Array< IntSet > &sets)
Create a union set of all sets, possibly relaxed.
The default handler for hash key computation.
Definition: structural_hash.h:216
A device-independent managed NDArray abstraction.
uint64_t operator()(const uint64_t &key) const
Definition: structural_hash.h:57
Definition: structural_hash.h:250
Handler * operator->() const
Definition: structural_hash.h:198
Runtime primitive data type.
Definition: data_type.h:41
Hash definition of base value classes.
Definition: structural_hash.h:38
Object container class that backs NDArray.
Definition: ndarray.h:286
uint64_t operator()(const int64_t &key) const
Definition: structural_hash.h:56
Var var(std::string name_hint, DataType t=DataType::Int(32))
Construct a new Var expression.
Defines the Functor data structures.
Base class of all object reference.
Definition: object.h:511
SHashReducer(Handler *handler, bool map_free_vars)
Constructor with a specific handler.
Definition: structural_hash.h:165
uint64_t operator()(const std::string &key) const
Definition: structural_hash.h:67
uint64_t operator()(const int &key) const
Definition: structural_hash.h:58
uint64_t operator()(const runtime::DataType &key) const
Definition: structural_hash.h:60
void operator()(const T &key) const
Push hash of key to the current sequence of hash values.
Definition: structural_hash.h:173
Content-aware structural hashing.
Definition: structural_hash.h:83
uint64_t operator()(const float &key) const
Definition: structural_hash.h:54
void operator()(const ObjectRef &key) const
Push hash of key to the current sequence of hash values.
Definition: structural_hash.h:181
void DefHash(const ObjectRef &key) const
Push hash of key to the current sequence of hash values.
Definition: structural_hash.h:187