@areusch and I had long discussion yesterday offline, and he helped me
understand the concern from the UX perspective: If we fold executor into
target, then it's more difficult to separate the config coming from two
parties, where one party impl the codegen and the other impl the executor.
On the other hand, my concern is the fragmentation of APIs. It has been a huge
problem in the recent 1-2 years, and we do have alternatives not to do so.
Here is my proposal:
- Part 1. Add Exector/Runtime fields to TargetNode:
```
class TargetNode {
...
Executor executor;
Runtime runtime;
};
class Executor {
FromJSON();
AsJSON();
};
class Runtime {
FromJSON();
AsJSON();
};
```
- Part 2. Add a helper API to merge Target, Executor and Runtime
```
Target MergeTarget(Target target_without_executor_runtime, Executor executor,
Runtime runtime);
```
- Part 3. Allow separate specification of target, target_host, executor,
runtime in TVMC, and internally use the proposed API in Part 2 to merge,
validate and normalize them into a single Target object
```
tvmc --target "llvm" --executor "..." --runtime "..."
```
- Part 4. For heterogeneous case, annotate the target onto each
PrimFunc/RelayFunc to specify the target/runtime/executor
```
@tvm.script.ir_module
class Module:
@T.func
def tir_func():
T.func_attrs({"target": JSON-Repr-of-Target-Obj}) # with runtime&executor
included
...
@R.func
def relay_func():
T.func_attrs({"target": JSON-Repr-of-Target-Obj}) # with runtime&executor
included
...
```
---
[Visit
Topic](https://discuss.tvm.apache.org/t/pre-rfc-compilation-configuration-representation/11372/32)
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/69ecb26051e749ac91f3e6e2299eb2cb080b9e9e2996b8d2ea4ede093cdeb737).