Thanks for the comments

[quote="comaniac, post:3, topic:7933"]
For Q2, CodegenDNNL does not have to worry about the C host as it only 
processes subgraphs.
[/quote]

I looked further into the code and this is what I came up with:

The CodeGenC (which is the base class for the CodeGenCHost) also deals with 
subgraphs.
The main difference (AFAIK) between both types of subgraphs is that for DNNL 
they are in Relay, while the other are in TIR. This is because they have gone 
the Relay -> Topi -> TE -> TIR process, which is the standard lowering process. 
BYOC is an alternative way to that. Therefore a BYOC C generator should not be 
derived from CodeGenC since it's not in TIR format (it's routines for visiting 
nodes expect TIR nodes).

[quote="comaniac, post:3, topic:7933"]
For Q3, CsourceModuleCreate takes 4 arguments while the last two are optional.
[/quote]

Yeah I was aware that the last two were optional, but I was wondering why the 
CodeGenCHost doesnt set the other variables. I have a hypothesis, but unsure 
how correct it is since it only concerns the third argument `symbol`:

When generating C code with the CodeGenCHost, the process collects all 
operators beforehand and then bundles them up in one call to CodeGenCHost. This 
means that the `runtime::Module` can have the `''`symbol since it is assumed 
that there will not be a second module with that name. In BYOC, and therefore 
in the DNNL example, each subgraph is sent to CodegenDNNL separately. 
Generating `n` `runtime:Module`s. If all are given the same symbol, the 
compiler will throw an error about name collision.

What my previous insight does not respond is:
* Why, in the CodeGenCHost example, is `symbol=''`? How does the runtime know 
that the module where all routines are found is called `''` and not any other 
string?
    * In the BYOC example it is given the Relay composite function name which 
was partitioned from the original Relay program. Which makes sense because the 
Relay program calls that function and therefore having the same symbol makes it 
a simple mapping. 
    * Based on that logic I would expect it to have the default name `'main'`





---
[Visit 
Topic](https://discuss.tvm.apache.org/t/codegenchost-and-codegencbase-and-relation-to-internal-and-external-compilers/7933/4)
 to respond.

You are receiving this because you enabled mailing list mode.

To unsubscribe from these emails, [click 
here](https://discuss.tvm.apache.org/email/unsubscribe/c22b2f8f1542f408fc5656db6a3ee1b76dfe971c6a1216c269b992b2e127463f).

Reply via email to