tvm.target
目标描述和 codgen 模块。
TVM 的目标字符串格式为。<target_kind> [-option=value]...
。
选项列表包括:
- -device=
设备名称。 - -mtriple=
指定目标三元组,这对于交叉编译很有用。 - -mcpu=
指定当前架构中的特定芯片以生成代码。默认情况下,这是从目标三元组推断并自动检测到当前架构的。 - -mattr=a1,+a2,-a3,… 覆盖或控制目标的具体属性,例如是否启用 SIMD 操作。默认属性集由当前 CPU 设置。
- -mabi=
为指定的 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 使用。
您可以使用构造函数或以下函数创建目标:
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) | 获取有关目标类型的附加属性。 |
get_target_device_type() | 返回此目标的设备类型。 |
list_kinds() | 返回可用目标名称的列表。 |
canon_target(target) | 给定一个类似目标的对象,返回代表它的 TVM Target 对象。 |
canon_target_and_host(target[, target_host]) | 返回一个 TVM Target,用于表示 target 和 target_host。 |
canon_multi_target(multi_targets) | 给定一个类似目标的对象,或者类似目标对象的类似集合的对象,返回代表该对象的 TVM 目标对象的 TVM 数组。 |
canon_multi_target_and_host(target[, …]) | 返回一个 TVM Array |
canon_target_map_and_host(target_map[, …]) | 将 target_map 作为从 TVM Target 的规范形式到 IRModules 的映射返回。 |
target_or_current(target) | 返回目标,如果目标为 None,则返回环境中的当前目标。 |
属性:
arch | 如果存在,则返回目标的 cuda arch。 |
---|---|
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 – 检测到的目标。
- 返回类型:Target。
static current(allow_none=True)
返回当前目标。
- 参数:allow_none (bool) – 是否允许当前目标为无。
- Raises: 如果当前目标未设置,则抛出 ValueError。
property arch
如果存在,则返回目标的 cuda arch。
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)
获取有关目标类型的附加属性。
get_target_device_type()
返回此目标的设备类型。
static list_kinds()
返回可用目标名称的列表。
static canon_target(target)
给定一个类似目标的对象,返回代表它的 TVM Target 对象。可从以下对象转换:None(转换为 None)。现有的 TVM Target 对象。字符串,例如“cuda”或“cuda -arch=sm80”。Python 字典,例如 {“kind”: “cuda”, “arch”: “sm80” }。
static canon_target_and_host(target, target_host=None)
返回 TVM Target 捕获 target 和 target_host。同时返回规范格式的地址。给定的目标可以是 Target.canon_target 可识别的任何格式。如果指定了 target_host,则 target.canon_target 可识别的任何格式。如果指定了 target_host,它将被设置为结果 Target 对象中的「host」(并发出警告)。
请注意,此方法不支持异构编译目标。
static canon_multi_target(multi_targets)
给定一个类似目标的对象,或一个类似目标对象的集合对象,返回一个代表该对象的 TVM Target 对象的 TVM 数组。可从以下类型转换:None(转换为 None)。canon_target 可识别形式的单个类似目标的对象。canon_target 可识别形式的类似目标对象的 Python 列表或 TVM 数组。一个 Python 字典或 TVM 映射,用于将表示设备类型的 TVM IntImm 对象转换为 canon_target 可识别形式的类似目标的对象。(这是一种表示异构目标的传统方法。键会被忽略。)
static canon_multi_target_and_host(target, target_host=None)
返回一个包含 target 和 target_host 的 TVM Array。给定的 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 到 IRModules。输入 target_map 的键可以是 Target.canon_target 可识别的任何形式。同样,如果指定了 target_host,则 target_host 也可以是 Target.canon_target 可识别的任何形式。最终的 target_map 键将以规范形式捕获 target_host。同时,返回的 target_host 也以规范形式存在。
static target_or_current(target)
返回目标,如果目标为 None,则返回环境中的当前目标。
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 目标。
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.rasp(options=None)
返回 Raspberry 3b 目标。
tvm.target.bifrost(model='unknown', options=None)
返回 ARM Mali GPU 目标(Bifrost 架构)。
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(**default: "v68"**)) :用于代码生成的 CPU 版本。并非所有允许的 cpu str 都是有效的,LLVM 将会抛出错误。
- parameters (Recognized keyword)。
- -----------------------------
- hvx (int(default: 128**)) :HVX 向量的大小(以字节为单位)。值为 0 表示禁用 HVX 代码生成。
- llvm_options (str 或str列表(default: None*)*) :用户定义的编译器参数。
- use_qfloat (bool(default: True for cpu_ver >= v68**,False otherwise)) :是否使用 QFloat HVX 指令。
- use_ieee_fp (bool(default: False**)) :是否使用 IEEE HVX 指令。
- num_cores (int(default: 4**)) :HVX 线程数。此属性是元调度程序所必需的。
- vtcm_capacity (int(default: 0**)) :Hexagon VTCM 容量限制。如果值为 0,则容量被视为无限制。
- Note (HVX 中的浮点支持需要 LLVM 14 及以上版本)。
tvm.target.stm32(series='unknown', options=None)
返回 STM32 目标。
tvm.target.adreno(model='unknown', options=None, clml=False)
返回 Qualcomm GPU 目标。:param model: 此设备的型号:type model: str:param options: 附加选项:type options: str 或 str 列表。
classtvm.target.VirtualDevice(device=None,target=None,memory_scope='')
编译时数据存储位置和代码编译方式的表现形式,用于在运行时存储数据。
属性:
device_type_int | 虚拟设备的类型。 |
---|---|
memory_scope | 关于内存的面积。 |
target | 描述如何为虚拟设备编译的目标。 |
virtual_device_id | 虚拟设备的设备 ID。 |
propertydevice_type_int
虚拟设备的类型。
propertymemory_scope
相对于虚拟设备存储数据的内存区域。
propertytarget
描述如何为虚拟设备编译的目标。
propertyvirtual_device_id
虚拟设备的设备 ID。
tvm.target.make_compilation_config(ctxt,target,target_host=None)
返回适用于 target 和 target_host 的 CompilationConfig,使用与标准构建接口相同的表示约定。仅用于单元测试。
tvm.target.list_tags()→Dict[str,Target] |None
返回一个包含标签的字典,将每个标签名映射到其对应的目标。