目标扩展说明

警告

本页描述的所有功能和API均处于开发阶段,可能随时更改,恕不另行通知。

从调用者继承编译器标志

编译器标志,例如 @jit(nrt=True, fastmath=True)) 中的 fastmathnrt 等选项是按函数指定的,但其效果定义不明确——有些标志影响整个调用图,有些标志只影响当前函数。有时,被调用者需要从调用者继承标志;例如,fastmath 标志应具有传染性。

为解决此问题,需要以下措施:

  1. 更好地定义编译器标志的语义。最好所有标志都将其影响限制在当前函数。(待办)

  2. 允许编译器标志从调用者继承。(已完成)

  3. 在函数解析中考虑编译器标志。(待办)

numba.core.targetconfig.ConfigStack 用于在整个编译器中传播编译器标志。在编译开始时,标志被推入 ConfigStack,它为编译维护一个线程本地栈。因此,被调用者可以检查调用者中的标志。

class numba.core.targetconfig.ConfigStack

用于跟踪编译器中目标配置的栈。

它将栈存储在线程本地的类属性中。同一线程中的所有实例都将看到相同的栈。

enter(flags)

返回一个上下文管理器,它在进入时执行 push(flags),在退出时执行 pop()

classmethod top_or_none()

获取栈顶(TOS),如果未设置配置则返回 None。

编译器标志

编译器标志被定义为 TargetConfig 的子类

class numba.core.targetconfig.TargetConfig(copy_from=None)

TargetConfig 的基类。

子类应使用 Option 填充类成员。例如:

>>> class MyTargetConfig(TargetConfig):
>>>     a_bool_option = Option(type=bool, default=False, doc="a bool")
>>>     an_int_option = Option(type=int, default=0, doc="an int")

元类将为每个 Option 插入属性。例如:

>>> tc = MyTargetConfig()
>>> tc.a_bool_option = True  # invokes the setter
>>> print(tc.an_int_option)  # print the default
copy()

克隆此实例。

classmethod demangle(mangled: str) str

返回 .get_mangle_string() 的解混淆结果。

discard(name)

如果定义了该选项,则按名称将其删除。

此后,该选项的值将设置为其默认值。

get_mangle_string() str

返回一个适合符号混淆的字符串。

inherit_if_not_set(name, default=<NotSet>)

ConfigStack 继承标志。

参数
name字符串

选项名称。

default可选

如果给定,它将覆盖默认值。仅当标志未在本地定义且 ConfigStack 中没有条目时使用。

is_set(name)

选项是否已设置?

summary() str

返回一个汇总此实例的 str

__repr__ 不同,仅显示明确设置的选项。

values()

返回所有值的字典

这些是内部编译器标志,与 jit 装饰器中使用的面向用户的选项不同。

在内部,面向用户的选项被映射到内部编译器标志,通过 numba.core.options.TargetOptions 实现。每个目标都可以覆盖默认编译器标志并控制 TargetOptions.finalize 中的标志继承。CPU 目标会覆盖它。

class numba.core.options.TargetOptions

目标选项将装饰器中的用户选项映射到由降低和目标上下文使用的 numba.core.compiler.Flags

finalize(flags, options)

子类可以覆盖此方法,以对默认标志进行目标特定的定制。

参数
flags标志
options字典

numba.core.options.TargetOptions.finalize() 中,使用 numba.core.targetconfig.TargetConfig.inherit_if_not_set() 从调用者请求一个编译器标志(如果当前函数未设置该标志)。