关于目标扩展的说明

警告

本页描述的所有功能和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()[源代码]

获取服务条款,如果没有设置配置则返回 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 继承标志。

参数:
名称str

选项名称。

默认可选的

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

is_set(name)[源代码]

选项设置了吗?

summary() str[源代码]

返回一个 str ,该字符串总结了此实例。

__repr__ 不同,只有明确设置的选项才会显示。

values()[源代码]

返回一个包含所有值的字典

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

在内部,面向用户的选项通过 :class:`numba.core.options.TargetOptions 映射到内部编译器标志 <https://github.com/numba/numba/blob/7e8538140ce3f8d01a5273a39233b5481d8b20b1/numba/core/options.py#L72>`_。每个目标可以覆盖默认的编译器标志,并在 TargetOptions.finalize 中控制标志继承。CPU 目标覆盖了它。

class numba.core.options.TargetOptions[源代码]

目标选项将装饰器中的用户选项映射到 numba.core.compiler.Flags ,这些标志用于降低和目标上下文。

finalize(flags, options)[源代码]

子类可以重写此方法,以对默认标志进行目标特定的自定义。

参数:
标志标志
选项dict

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