JIT 挂钩¶
在 pypyjit
模块中有一些挂钩,可以帮助你了解 pypy 的 JIT 在运行你的程序时在做什么。
-
dont_trace_here
(next_instr, is_being_profiled, pycode)¶
-
get_jitcell_at_key
(next_instr, is_being_profiled, pycode)¶
-
get_stats_asmmemmgr
()¶ 返回 JIT 后端当前使用的原始内存,以一对 (已分配的总内存,正在使用的内存) 表示。
-
residual_call
(callable, *args, **keywords)¶ 用于测试。调用 callable(…),但不让 JIT 跟踪调用。
-
set_compile_hook
(callable, operations=True)¶ 设置一个编译挂钩,每次编译循环时都会调用它。
该可调用对象将使用
pypyjit.JitLoopInfo
对象调用。有关详细信息,请参阅其文档。请注意,jit 挂钩不是可重入的。这意味着如果 jit 挂钩内部的代码本身被 jitted,它将被编译,但 jit 挂钩不会为此调用。
如果 operations=False,则没有操作列表可用。如果挂钩应该非常轻量级,这很有用。
-
set_abort_hook
(hook)¶ 设置一个挂钩(可调用对象),每次由于某种原因中止跟踪时都会调用它。
该挂钩将使用以下签名调用:
hook(jitdriver_name, greenkey, reason, oplist)
Reason 是一个字符串,其他参数的含义与 JitLoopInfo 对象上的属性相同。
-
set_trace_too_long_hook
(hook)¶ 设置一个挂钩(可调用对象),每次我们由于跟踪过长而中止跟踪时都会调用它。
该挂钩将使用以下签名调用:
hook(jitdriver_name, greenkey)
-
enable_debug
()¶ 开始为
get_stats_snapshot
记录调试计数器。目前已禁用。
-
disable_debug
()¶ 停止为
get_stats_snapshot
记录调试计数器。目前已禁用。
-
get_stats_snapshot
()¶ 获取特定时间点的 JIT 状态。请注意,这是急切的 - 属性访问不是懒惰的,如果您需要新的统计信息,则需要再次调用此函数。您可能希望调用
enable_debug
以获取更多信息。它返回一个JitInfoSnapshot
实例。
-
class
JitInfoSnapshot
¶ 描述当前快照的类。可用的属性
counters
- 内部 JIT 整数计数器counter_times
- 内部 JIT 浮点计数器,特别是用于跟踪和 JIT 后端的耗时loop_run_times
- 循环运行次数的计数器,仅在调用enable_debug
时有效。
-
class
JitLoopInfo
¶ 包含有关已编译循环的信息的类。可用的属性
operations
- 操作列表,如果请求jitdriver_name
- 与此循环关联的 jitdriver 的名称greenkey
- 循环被编译的键(例如代码位置、是否正在分析、python jitdriver 的 pycode 元组)loop_no
- 循环基数bridge_no
- 失败描述符的 IDtype
- “入口桥”、“循环”或“桥”asmaddr
- 汇编程序所在的原始内存中的地址asmlen
- 与汇编程序关联的原始内存的长度