[RFC] TVM Target Specification

Thanks @mbs-octoml!

Target is a compile-time concept, while device is a runtime concept. The separation design is to make sure that a target can describe a device that doesn’t exist on the host, mainly for cross compilation.

And yes, in principle, every TargetKind corresponds to a DLDeviceType, for example

  • llvm (compile time) => kDLCPU (runtime)
  • cuda (compile time) => kDLCUDA (runtime)
  • nvptx (compile time) => kDLCUDA (runtime)

Note that device_id is not present anywhere in the Target system, because we don’t require the device to be present on the host in compile time.