JIT: Set the IP and check for invalidation in `POP_TOP` only if `Py_Dealloc` is called.
还没有人认领这个 Issue。
- 主要语言
- Python
- 星标
- 77.2k
- 派生
- 35.9k
- PR 合并指标
- PR 指标待抓取
描述
The optimizer removes many POP_TOPs, but quite a few remain.
The code for POP_TOP looks like this:
inst(POP_TOP, (value --)) {
PyStackRef_XCLOSE(value);
}
which is fine for the interprete but in the JIT, as POP_TOP is marked as escaping, we need to set the IP before and check for invalidation afterwards.
What we could do, is have a version of POP_TOP that sets the IP and checks for invalidation only if Py_Dealloc is called, so we don't need to add SET_IP and CHECK_VALIDITY.
The new form of POP_TOP would look like this:
op(_POP_TOP_SET_IP_CHECK_INVALID, (value --)) {
if (do_decref_and_refcnt_is_zero(value)) {
SET_IP()
Py_Dealloc()
CHECK_VALID();
}
}
_POP_TOP_SET_IP_CHECK_INVALID should be inserted in the same pass that we insert _SET_IP and _CHECK_VALIDITY as we know whether we need to insert those uops, and leave POP_TOP alone in those cases.
Overall, this should speed things up as it doesn't increase the overall code size, but it does execute less code in many cases.
贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
调研方向
检查 POP_TOP 的 JIT 实现,以及插入 _SET_IP 和 _CHECK_VALIDITY 的 pass。跟踪 do_decref_and_refcnt_is_zero 以及现有的 SET_IP、Py_Dealloc 和 CHECK_VALID 路径;完成的标准是,仅在需要的位置插入专用形式,同时其他位置的 POP_TOP 保持不变,并保留失效行为。
由索引模型根据 Issue 内容生成。
评估
- 技术栈
- c, python
- 领域
- compilers, performance
- Issue 类型
- 重构
- 难度
- 4/5
- 预计耗时
- 3-5 天
- 活跃度
- 冷清
- 描述清晰度
- 基本清楚
- 新手友好度
- 48/100