The answer would definitely be different in the case of not using BYOC. Without 
BYOC, every backend is handled by TVM compilation pipeline. It means every 
operator has to have its corresponding TOPI implementation. Since data layout 
affects the TE compute semantic, the op with different data layout is treat as 
different operators in TE/TIR. The Relay op strategy is in charge of selecting 
the correct TE/TIR op from a Relay op.

For example, a Relay conv2d op has a data layout attribute, so Relay op 
strategy will select the TOPI implementation of either conv2d_nchw, 
conv2d_nhwc, or conv2d_hwcn accordingly as the link you pointed out. Of course, 
some data layout may be missing in some targets, so you may encounter an error 
if you specify a data layout that doesn't have the corresponding TOPI 
implementation for your target (e.g., `arm_cpu`).

In short, if you are not using BYOC and require a special data layout for a 
certain op, you need to 1) register your backend as other targets (e.g., x86, 
cuda, arm_cpu, etc), 2) have the corresponding TOPI implementations for your 
backend, and 2) register the Relay op strategy to correctly lower a Relay graph 
to TE/TIR for your backend.





---
[Visit 
Topic](https://discuss.tvm.apache.org/t/best-way-to-deal-with-kernel-layout/9576/5)
 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/ddfc41ed3112bd9745346e5e3fe2a8108a4a0e9aef957cf05eeca35f09e64a36).

Reply via email to