tvm.target

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

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

注意

选项列表包括:

  • -device=

    设备名称。

  • -mtriple=

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

  • -mcpu=

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

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

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

  • -mabi=

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

  • -system-lib

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

我们可以使用tvm.target.Target()从目标字符串创建一个tvm.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])

返回一个树莓派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[, ...])

返回适用于目标和目标主机的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()

返回此目标的设备类型。

list_kinds()

返回可用目标名称列表。

canon_target(target)

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

canon_target_and_host(target[, target_host])

返回一个包含target和target_host的TVM Target对象。

canon_multi_target(multi_targets)

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

canon_multi_target_and_host(target[, ...])

返回一个TVM Array,其中包含target和target_host。

canon_target_map_and_host(target_map[, ...])

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

target_or_current(target)

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

属性:

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

如果目标中存在该属性,则返回该属性值。

static from_device(device: str | Device) 目标

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

Parameters:

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

Returns:

target – 检测到的目标。

Return type:

Target

static current(allow_none=True)

返回当前目标。

Parameters:

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

Raises:

如果当前目标未设置则抛出ValueError。

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

如果目标中存在该属性,则返回该属性值。

get_kind_attr(attr_name)

获取关于目标类型的附加属性。

Parameters:

attr_name (str) – 属性名称。

Returns:

value – 属性值

Return type:

object

get_target_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)和目标主机(target_host)的TVM Target对象。同时以规范形式返回主机信息。给定的目标(target)可以是Target.canon_target识别的任何形式。如果提供了目标主机(target_host),它也可以是Target.canon_target识别的任何形式。如果提供了目标主机(target_host),它将被设置为结果Target对象中的'host'字段(并给出警告)。

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

static canon_multi_target(multi_targets)

给定一个单一的目标类对象,或一个由目标类对象组成的集合类对象, 返回一个表示这些对象的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)

返回一个TVM Array,其中包含target和target_host。给定的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.canon_target识别的任何形式。最终的target_map键将以规范形式捕获target_host。同时返回规范形式的target_host。

static target_or_current(target)

返回目标值,如果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目标。

Parameters:
  • model (str) – CUDA设备的型号(例如1080ti)

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

  • options (strliststr) – 附加选项

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

返回一个ROCM目标。

Parameters:
  • model (str) – 该设备的型号

  • options (strliststr) - 附加选项

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

返回一个ARM Mali GPU目标。

Parameters:
  • model (str) – 该设备的型号

  • options (strliststr) - 附加选项

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

返回一个Intel Graphics目标。

Parameters:
  • model (str) – 该设备的型号

  • options (strliststr) – 附加选项

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

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

Parameters:
  • model (str) – ARM开发板的SoC名称或手机型号名称。

  • options (strliststr) - 附加选项

tvm.target.rasp(options=None)

返回一个树莓派3b目标设备。

Parameters:

options (strlist 包含 str) – 附加选项

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

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

Parameters:

options (strlist 包含 str) – 附加选项

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

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

Parameters:
  • model (str) – CPU型号名称。

  • options (strliststr) - 附加选项

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

返回一个Hexagon目标。

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

  • parameters (已识别的关键字)

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

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

  • llvm_options (strlist 类型 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目标。

Parameters:
  • series (str) – STM32开发板系列的型号名称,例如stm32H7xx或stm32F4xx

  • options (strliststr) - 附加选项

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

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

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, 目标] | None

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

Returns:

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

Return type:

可选[字典[str, Target]]