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。我们还可以使用此模块中的其他特定函数来创建特定目标。
类
|
目标设备信息,通过 TVM API 使用。 |
一种编译目标 |
|
|
编译时表示数据在运行时存储的位置,以及如何编译代码来计算它。 |
函数
|
已弃用。 |
|
返回 CUDA 目标。 |
|
返回 ROCM 目标。 |
|
返回 ARM Mali GPU 目标。 |
|
返回 Intel Graphics 目标。 |
|
返回 ARM CPU 目标。 |
|
返回 Raspberry 3b 目标。 |
|
返回 ARM Mali GPU 目标(Bifrost 架构)。 |
|
返回 RISC-V CPU 目标。 |
|
返回 Hexagon 目标。 |
|
返回 STM32 目标。 |
|
返回 Qualcomm GPU 目标。 |
|
返回适用于 target 和 target_host 的 CompilationConfig,使用与标准构建接口相同的表示约定。 |
返回标签字典,该字典将每个标签名称映射到其对应的目标。 |
- class tvm.target.Target(target, host=None)
目标设备信息,通过 TVM API 使用。
注意
您可以使用构造函数或以下函数创建目标
tvm.target.arm_cpu()
创建 arm_cpu 目标tvm.target.cuda()
创建 CUDA 目标tvm.target.rocm()
创建 ROCM 目标tvm.target.mali()
创建 Mali 目标tvm.target.intel_graphics()
创建 Intel Graphics 目标
方法
from_device
(device)检测与给定设备关联的目标。
current
([allow_none])返回当前目标。
get_kind_attr
(attr_name)获取有关目标种类的其他属性。
返回此目标的 device_type。
返回可用目标名称的列表。
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,否则返回环境中的当前目标
属性
如果存在,则从目标返回 CUDA 架构。
如果存在,则从目标返回 max_num_threads。
如果存在,则从目标返回 x 维度的最大块大小。
如果存在,则从目标返回 y 维度的最大块大小。
如果存在,则从目标返回 thread_warp_size。
如果存在,则从目标返回模型。
如果存在,则从目标返回 mcpu。
如果存在,则从目标返回 mattr。
- 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_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_from_name
(kind_name)从 TargetKind 的名称返回可用选项名称和类型的字典
- property options
返回可用选项名称和类型的字典
- tvm.target.cuda(model='unknown', arch=None, options=None)
返回 CUDA 目标。
- tvm.target.rocm(model='unknown', options=None)
返回 ROCM 目标。
- tvm.target.mali(model='unknown', options=None)
返回 ARM Mali GPU 目标。
- tvm.target.intel_graphics(model='unknown', options=None)
返回 Intel Graphics 目标。
- tvm.target.arm_cpu(model='unknown', options=None)
返回 ARM CPU 目标。当没有预调优的操作参数时,此函数还会下载预调优的操作参数。
- tvm.target.bifrost(model='unknown', options=None)
返回 ARM Mali GPU 目标(Bifrost 架构)。
- 参数:
options (str 或 str 列表) – 附加选项
- tvm.target.riscv_cpu(model='sifive-u54', options=None)
返回 RISC-V CPU 目标。默认值:sifive-u54 rv64gc
- tvm.target.hexagon(cpu_ver='v68', **kwargs)
返回 Hexagon 目标。
- 参数:
cpu_ver (str (默认值: "v68")) – 用于代码生成的 CPU 版本。并非所有允许的 CPU 字符串都有效,LLVM 将抛出错误。
parameters (可识别的关键字)
-----------------------------
hvx (int (默认值: 128)) – HVX 向量的大小(以字节为单位)。值为 0 时禁用 HVX 代码生成。
llvm_options (str 或 str 列表 (默认值: 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 目标。
- 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,使用与标准构建接口相同的表示约定。仅用于单元测试。