tvm.target

目标描述和代码生成模块。

TVM 的目标字符串格式为 <target_kind> [-option=value]...

注意

选项列表包括

  • -device=<设备名称>

    设备名称。

  • -mtriple=<目标三元组>

    指定目标三元组,这对于交叉编译很有用。

  • -mcpu=<CPU 名称>

    指定当前架构中的特定芯片以生成代码。默认情况下,这是从目标三元组推断出来的,并自动检测到当前架构。

  • -mattr=a1,+a2,-a3,…

    覆盖或控制目标的特定属性,例如是否启用 SIMD 操作。默认属性集由当前 CPU 设置。

  • -mabi=<abi>

    为指定的 ABI 生成代码,例如 “lp64d”。

  • -system-lib

    构建 TVM 系统库模块。系统库是一个全局模块,其中包含程序启动时自注册的函数。用户可以使用 tvm.runtime.system_lib 获取该模块。这在禁止使用动态加载 API(如 dlopen)的环境中很有用。只要结果代码被程序链接,系统库就可用。

我们可以使用 tvm.target.Target() 从目标字符串创建一个 tvm.target.Target。我们还可以使用此模块中的其他特定函数来创建特定目标。

Target(target[, host])

目标设备信息,通过 TVM API 使用。

TargetKind

一种编译目标

VirtualDevice([device, target, memory_scope])

编译时表示数据在运行时存储的位置,以及如何编译代码来计算它。

函数

create(target)

已弃用。

cuda([model, arch, options])

返回 CUDA 目标。

rocm([model, options])

返回 ROCM 目标。

mali([model, options])

返回 ARM Mali GPU 目标。

intel_graphics([model, options])

返回 Intel Graphics 目标。

arm_cpu([model, options])

返回 ARM CPU 目标。

rasp([options])

返回 Raspberry 3b 目标。

bifrost([model, options])

返回 ARM Mali GPU 目标(Bifrost 架构)。

riscv_cpu([model, options])

返回 RISC-V CPU 目标。

hexagon([cpu_ver])

返回 Hexagon 目标。

stm32([series, options])

返回 STM32 目标。

adreno([model, options, clml])

返回 Qualcomm GPU 目标。

make_compilation_config(ctxt, target[, ...])

返回适用于 target 和 target_host 的 CompilationConfig,使用与标准构建接口相同的表示约定。

list_tags()

返回标签字典,该字典将每个标签名称映射到其对应的目标。

class tvm.target.Target(target, host=None)

目标设备信息,通过 TVM API 使用。

注意

您可以使用构造函数或以下函数创建目标

方法

from_device(device)

检测与给定设备关联的目标。

current([allow_none])

返回当前目标。

get_kind_attr(attr_name)

获取有关目标种类的其他属性。

get_target_device_type()

返回此目标的 device_type。

list_kinds()

返回可用目标名称的列表。

canon_target(target)

给定单个类似目标的对象,返回表示它的 TVM Target 对象。

canon_target_and_host(target[, target_host])

返回捕获目标和 target_host 的 TVM Target。

canon_multi_target(multi_targets)

给定单个类似目标的对象,或类似目标的对象的集合,返回表示它们的 TVM Target 对象数组。

canon_multi_target_and_host(target[, ...])

返回捕获目标和 target_host 的 TVM Target 数组。

canon_target_map_and_host(target_map[, ...])

返回 target_map 作为从规范形式的 TVM Target 到 IRModule 的映射。

target_or_current(target)

如果 target 为 None,则返回 target,否则返回环境中的当前目标

属性

arch

如果存在,则从目标返回 CUDA 架构。

max_num_threads

如果存在,则从目标返回 max_num_threads。

max_block_size_x

如果存在,则从目标返回 x 维度的最大块大小。

max_block_size_y

如果存在,则从目标返回 y 维度的最大块大小。

thread_warp_size

如果存在,则从目标返回 thread_warp_size。

model

如果存在,则从目标返回模型。

mcpu

如果存在,则从目标返回 mcpu。

mattr

如果存在,则从目标返回 mattr。

static from_device(device: str | Device) Target

检测与给定设备关联的目标。如果设备不存在,则会报错。

参数:

dev (Union[str, Device]) – 用于检测目标的设备。支持的设备类型:[“cuda”, “metal”, “rocm”, “vulkan”, “opencl”, “cpu”]

返回值:

target – 检测到的目标。

返回类型:

目标

static current(allow_none=True)

返回当前目标。

参数:

allow_none (bool) – 是否允许当前目标为 None

抛出:

ValueError if current target is not set.

property arch

如果存在,则从目标返回 CUDA 架构。

property max_num_threads

如果存在,则从目标返回 max_num_threads。

property max_block_size_x

如果存在,则从目标返回 x 维度的最大块大小。

property max_block_size_y

如果存在,则从目标返回 y 维度的最大块大小。

property thread_warp_size

如果存在,则从目标返回 thread_warp_size。

property model

如果存在,则从目标返回模型。

property mcpu

如果存在,则从目标返回 mcpu。

property mattr

如果存在,则从目标返回 mattr。

get_kind_attr(attr_name)

获取有关目标种类的其他属性。

参数:

attr_name (str) – 属性名称。

返回值:

value – 属性值

返回类型:

对象

get_target_device_type()

返回此目标的 device_type。

static list_kinds()

返回可用目标名称的列表。

static canon_target(target)

给定单个类似目标的对象,返回表示它的 TVM Target 对象。可以从以下类型转换:- None (转换为 None)。- 现有的 TVM Target 对象。- 字符串,例如 “cuda” 或 “cuda -arch=sm_80” - Python 字典,例如 {“kind”: “cuda”, “arch”: “sm_80” }

static canon_target_and_host(target, target_host=None)

返回捕获目标和 target_host 的 TVM Target。还以规范形式返回主机。给定的目标可以是 Target.canon_target 识别的任何形式。如果给定,target_host 可以是 Target.canon_target 识别的任何形式。如果给定 target_host,它将被设置为结果 Target 对象中的 ‘host’ (并给出警告)。

请注意,此方法不支持异构编译目标。

static canon_multi_target(multi_targets)

给定单个类似目标的对象,或类似目标的对象的集合,返回表示它们的 TVM Target 对象数组。可以从以下类型转换:- None (转换为 None)。- 以 canon_target 识别的形式出现的单个类似目标的对象。- 以 canon_target 识别的形式出现的类似目标的对象的 Python 列表或 TVM 数组。- 从表示设备类型的 TVM IntImm 对象到以 canon_target 识别的形式出现的类似目标的对象的 Python 字典或 TVM 映射。(这是一种表示异构目标的旧方法。键被忽略。)

static canon_multi_target_and_host(target, target_host=None)

返回捕获目标和 target_host 的 TVM Target 数组。给定的目标可以是 Target.canon_multi_target 识别的任何形式。如果给定,target_host 可以是 Target.canon_target 识别的任何形式。如果给定 target_host,它将被设置为每个结果 Target 对象中的 ‘host’ (并给出警告)。

static canon_target_map_and_host(target_map, target_host=None)

返回 target_map 作为从规范形式的 TVM Target 到 IRModule 的映射。输入 target_map 的键可以是 Target.canon_target 识别的任何形式。类似地,如果给定,target_host 可以是 Target.canon_target 识别的任何形式。最终的 target_map 键将以规范形式捕获 target_host。还以规范形式返回 target_host。

static target_or_current(target)

如果 target 为 None,则返回 target,否则返回环境中的当前目标

tvm.target.create(target)

已弃用。请直接使用 tvm.target.Target 的构造函数。

class tvm.target.TargetKind

一种编译目标

属性

options

返回可用选项名称和类型的字典

方法

options_from_name(kind_name)

从 TargetKind 的名称返回可用选项名称和类型的字典

property options

返回可用选项名称和类型的字典

static options_from_name(kind_name: str)

从 TargetKind 的名称返回可用选项名称和类型的字典

tvm.target.cuda(model='unknown', arch=None, options=None)

返回 CUDA 目标。

参数:
  • model (str) – CUDA 设备的模型 (例如 1080ti)

  • arch (str) – CUDA 架构 (例如 sm_61)

  • options (strstr 列表) – 附加选项

tvm.target.rocm(model='unknown', options=None)

返回 ROCM 目标。

参数:
  • model (str) – 此设备的模型

  • options (strstr 列表) – 附加选项

tvm.target.mali(model='unknown', options=None)

返回 ARM Mali GPU 目标。

参数:
  • model (str) – 此设备的模型

  • options (strstr 列表) – 附加选项

tvm.target.intel_graphics(model='unknown', options=None)

返回 Intel Graphics 目标。

参数:
  • model (str) – 此设备的模型

  • options (strstr 列表) – 附加选项

tvm.target.arm_cpu(model='unknown', options=None)

返回 ARM CPU 目标。当没有预调优的操作参数时,此函数还会下载预调优的操作参数。

参数:
  • model (str) – ARM 开发板的 SoC 名称或手机名称。

  • options (strstr 列表) – 附加选项

tvm.target.rasp(options=None)

返回 Raspberry 3b 目标。

参数:

options (strstr 列表) – 附加选项

tvm.target.bifrost(model='unknown', options=None)

返回 ARM Mali GPU 目标(Bifrost 架构)。

参数:

options (strstr 列表) – 附加选项

tvm.target.riscv_cpu(model='sifive-u54', options=None)

返回 RISC-V CPU 目标。默认值:sifive-u54 rv64gc

参数:
  • model (str) – CPU 名称。

  • options (strstr 列表) – 附加选项

tvm.target.hexagon(cpu_ver='v68', **kwargs)

返回 Hexagon 目标。

参数:
  • cpu_ver (str (默认值: "v68")) – 用于代码生成的 CPU 版本。并非所有允许的 CPU 字符串都有效,LLVM 将抛出错误。

  • parameters (可识别的关键字)

  • -----------------------------

  • hvx (int (默认值: 128)) – HVX 向量的大小(以字节为单位)。值为 0 时禁用 HVX 代码生成。

  • llvm_options (strstr 列表 (默认值: None)) – 用户定义的编译器参数。

  • use_qfloat (bool (默认值: cpu_ver >= v68 时为 True, 否则为 False)) – 是否使用 QFloat HVX 指令。

  • use_ieee_fp (bool (默认值: False)) – 是否使用 IEEE HVX 指令

  • num_cores (int (默认值: 4)) – HVX 线程数。元调度器需要此属性。

  • vtcm_capacity (int (默认值: 0)) – Hexagon VTCM 容量限制。如果值为 0,则容量被视为无限制。

  • 注意 (HVX 中的浮点支持需要 LLVM 14+。)

tvm.target.stm32(series='unknown', options=None)

返回 STM32 目标。

参数:
  • series (字符串) – STM32 板级系列的系列名称,例如 stm32H7xx 或 stm32F4xx

  • options (strstr 列表) – 附加选项

tvm.target.adreno(model='unknown', options=None, clml=False)

返回一个高通 GPU 目标。 :param model: 此设备的型号 :type model: 字符串 :param options: 附加选项 :type options: 字符串或字符串列表

class tvm.target.VirtualDevice(device=None, target=None, memory_scope='')

编译时表示数据在运行时存储的位置,以及如何编译代码来计算它。

tvm.target.make_compilation_config(ctxt, target, target_host=None)

返回适用于 target 和 target_host 的 CompilationConfig,使用与标准构建接口相同的表示约定。仅用于单元测试。

tvm.target.list_tags() Dict[str, Target] | None

返回标签字典,该字典将每个标签名称映射到其对应的目标。

返回值:

tag_dict – 标签字典,将每个标签名称映射到其对应的目标。如果 TVM 以仅运行时模式构建,则为 None。

返回类型:

Optional[Dict[str, Target]]