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- 与汇编程序关联的原始内存的长度