we discussed this at the [community
meeting](https://discuss.tvm.apache.org/t/next-tvm-community-meeting-july-13/13120/2)
yesterday. here are notes:
- @areusch: one of suggestions raised was to make it possible to reconstruct a
NameSupply from an IRModule. we might need to make it possible to initialize it
from multiple IRmodules since we currently lower Relay to many separate
IRModules in the compiler.
- @kparzysz-quic : what's the use of having multiple modules, unless they're
built for separate devices. do we need `mod_name` as a field?
- `mod_name` is not to distinguish different IRModules at compile time; more
to distinguish separate models at runtime via namespace prefix.
- @kparzysz-quic : what is the connection between the name that we attach to a
global and the name that actually ends up in an object file? there is a strong
need to have a degree of control over the names that end up in the object file
and their visibility. how are we addressing this need? i think there is a lack
of this in TVM now. we don't have a way
- @tqchen: good point. we should document the linkage type. right now there
is an implicit convention: the `name_hint` is not final (it's just an
internal-to-compiler concept) and there's a GlobalVar which enforces that there
is external linkage type with a fixed name. e.g. if we are splitting the
compilation flow, then there is an expectation that when calling into a symbol,
the name won't change. another rule: if a function has attribute
`kGlobalSymbol`, you cannot change it or even delete it.
- @manupa-arm : when we say we want to have control: do we want this to
extend to Relay? if a Relay module contains a GlobalVar, should that be emitted
with exactly that name?
- @tqchen : if an IRModule has a function with attr `kGlobalSymbol` we
should respect that. but as a rule of thumb we should delay attaching this attr
til as late of possible, so we should try to avoid that symbol.
- @areusch : we also don't have this ability in scheduling; it would be
hard to attach that attribute to a Relay function e.g. main because we prefix
lowered functions
- @tqchen: we could special-case an AOT entry function when the compiler
takes special care around a symbol.
- filed https://github.com/apache/tvm/issues/12098 to document the
convention.
- @areusch some context for this RFC: in the C++ runtime, we previously mostly
cared that a GlobalVar name could be passed to Module.GetFunction() and then
that function would find that implemented PrimFunc. When we implemented AOT in
the C runtime, we changed to expecting to be able to directly call those names
as C symbols. This caused a bit of a problem when we moved to implement both
the C and C++ AOTExecutor wrappers, where metadata lookups could be different
because of name mangling. To solve that, we intended to move in a direction
where the names of all symbols were fixed at birth, thus NameSupply.
- @kparzysz-quic: who is typically the caller of these functions?
- @areusch typically an executor
- @kparzysz-quic can we modify the names of the global? shouldn't matter so
long as everyone agrees
--
Reply to this email directly or view it on GitHub:
https://github.com/apache/tvm-rfcs/pull/84#issuecomment-1184817996
You are receiving this because you are subscribed to this thread.
Message ID: <apache/tvm-rfcs/pull/84/[email protected]>