目标扩展说明
警告
本页描述的所有功能和API均处于开发阶段,可能随时更改,恕不另行通知。
从调用者继承编译器标志
编译器标志,例如 @jit(nrt=True, fastmath=True))
中的 fastmath
、nrt
等选项是按函数指定的,但其效果定义不明确——有些标志影响整个调用图,有些标志只影响当前函数。有时,被调用者需要从调用者继承标志;例如,fastmath
标志应具有传染性。
为解决此问题,需要以下措施:
更好地定义编译器标志的语义。最好所有标志都将其影响限制在当前函数。(待办)
允许编译器标志从调用者继承。(已完成)
在函数解析中考虑编译器标志。(待办)
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()
克隆此实例。
- discard(name)
如果定义了该选项,则按名称将其删除。
此后,该选项的值将设置为其默认值。
- inherit_if_not_set(name, default=<NotSet>)
从
ConfigStack
继承标志。- 参数
- name字符串
选项名称。
- default可选
如果给定,它将覆盖默认值。仅当标志未在本地定义且
ConfigStack
中没有条目时使用。
- is_set(name)
选项是否已设置?
- 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()
从调用者请求一个编译器标志(如果当前函数未设置该标志)。