Skip to content

Add CPU 参考解释器与差分调试器 - #220

Open
a962695448-rgb wants to merge 17 commits into
InfiniTensor:masterfrom
a962695448-rgb:add-cpu-interpreter-debugger
Open

a962695448-rgb wants to merge 17 commits into
InfiniTensor:masterfrom
a962695448-rgb:add-cpu-interpreter-debugger

Conversation

@a962695448-rgb

@a962695448-rgb a962695448-rgb commented Sep 16, 2026

Copy link
Copy Markdown

为 NineToothed 增加 NumPy CPU 参考解释器,在没有 Torch/Triton 或 GPU 的环境中执行实际 frontend/SSA 程序,提供逐 pass 差分、单步/断点/watch、可信对应关系下的定位、依赖切片以及失败导出/回放。

实现范围

兼容上游 22e74c3 的目标上下文与平台能力校验,覆盖声明范围内的算术、广播、mask 访存、归约、结构化控制流、softmax 和 matmul。GPU 验收报告拒绝覆盖已有文件并保存用例进度。验收入口记录完整支持矩阵和边界。

本轮 dtype 优化

基于 64bd695,将逐操作重复的 dtype 解析改为最多 64 项的描述符缓存,只保留规范化字符串和不可变 dtype。别名、字节序、None/fallback、原始错误拼写、用户对象变更及释放保持原语义;不缓存张量值。

三轮独立旧/新进程交替,每配置七个无剖析器样本。目标是连续 FP32 4096、跨步 FP32 16387、反向 INT32 8193 元素循环,目标几何平均加速为 1.386 / 1.329 / 1.383×。各目标至少快 5%、每轮目标平均至少快 10%、对照不得慢 5% 的预设门槛全部达到。

对照包含开轨迹版本、softmax 17×257 和 matmul 9×16×7 尾部。完整轨迹指纹、独立 NumPy 输出及输入不变性全部一致。冷/热缓存的 tracemalloc 分配另测,不将其称为进程 RSS。

本轮性能说明固定证据包含源码、协议、六个独立进程记录、JUnit 与已验证的准备脚本。

这是 CPU 解释器收益,目标循环的比值不推广到所有程序,也不与先前表达式计划实验的不同形状比值相乘。GPU 生成器和核函数未修改。

当前验证

不含 Torch/Triton 的本地环境:

pytest output:

535 passed, 15 deselected in 36.18s

新增 23 项 dtype 回归包含在 535 内。RTX 4090 D / NGC Torch 2.6 / CUDA 12.8 上,当前源码的 15/15 真实 GPU 差分通过。新测试在该主机的 CPU 上执行:

pytest output:

23 passed in 0.42s

本地 Ruff、format、贡献风格检查通过。最新提交的 CPU CI 已通过 Python 3.10/3.12 回归、独立 wheel 安装和回放;RuffSphinx 和包构建均通过。自托管 GPU pytest 仍排队,不计为通过,实机证据按本轮档案记录。

历史完整集合和限制

1b68040 的 RTX 4090 完整收集集合按同一源码与环境逐 ID 核对为 902 项:900 passed、2 项多 GPU 条件跳过。实际分段输出为:

pytest output:

898 passed, 2 skipped in 2597.93s (0:43:17)
2 passed in 1222.67s (0:20:22)

该版本固定档案保留超时、诊断退出、精确补跑和集合核对。本轮未重跑未变更的完整卷积 GPU 集合,旧计数不冒充当前版本全库结果。旧 A100 数据仍对应 ed33273(835 passed、2 skipped)。

CPU 顺序解释不模拟 GPU 竞争;定位依赖可信对应关系,未支持语义显式失败。未完成或损坏的验收报告不能当作 PASS。

a962695448-rgb and others added 17 commits September 14, 2026 16:01
为 Python 3.10/3.12 增加普通 Ubuntu CPU 工作流,覆盖 fork PR、环境隔离、wheel 安装和失败回放。
统一 CPU 测试入口,明确拒绝含 Torch/Triton 的环境;将接口文档的旧版 307 项结果标为历史。

本地验证:460 passed、15 GPU deselected;67 份 wheel 源码一致,独立示例与回放通过。
Ruff、格式及贡献风格检查通过,修改的 RST 页面严格构建通过。
完整站点在无 Torch 环境下受现有 autodoc 依赖限制;没有重新执行 GPU 测试。
兼容上游 22e74c3 的 TargetContext 和平台能力验证,保留共享前端准备与 SSA 来源追踪。
采用上游等价的布尔表达式和已修正测试,保留独立 jagged 参考断言。
补充三后端平台能力拒绝的差分诊断检查,并纳入无 Torch/Triton 的 CPU 自动回归。

当前回归 493 passed、15 GPU deselected;37 项平台/管线专项包含在上述数量中。
68 份 wheel 源码核对一致,独立安装示例和回放、Ruff/格式/贡献风格、修改文档页严格构建通过。
本轮没有执行 GPU 回归;旧 A100 835+2 结果仍仅对应历史计算源码。
以稀疏坐标广播替代稠密索引网格,保留完整轨迹、掩码和别名语义;修复零维张量关闭写掩码时的异常。

三轮受测大张量的执行分配峰值降低 36%–42%。577 项 CPU 回归、15 项真实 GPU 差分和 42 项新增边界测试通过;中文报告链接到固定证据档案。
使用按掩码直接复制减少恒等读取的重复采集;提取和数组子类保留既有索引路径。
新增 32 项边界回归。609 项 CPU 回归、15 项真实 GPU 差分及三轮性能确认通过,完整轨迹一致。

目标读取程序的三轮几何平均加速约 7.15–7.61 倍,范围和未采用初版均见固定证据。
只为活动 lane 分配偏移向量,避免每个维度在完整 mask 上重复采集与回写。
新增 53 项字节集合对照;662 项 CPU 回归、15 项真实 GPU 差分通过,三轮完整事件指纹一致。

记录层微基准平均约快 24%,实际前端调用和稀疏/密集内存口径分别报告。
解析阶段明确拒绝无法表示的关键字参数,避免 int('10', base=16) 被静默改写。
让布局调用与命名 padded shape 共享非正值返回零的规则,修复公开空视图读取失败,保留既有整数规范化。

基线复现 21 项失败,新增 67 项全部通过;完整 CPU 回归 729 passed、15 GPU deselected。固定 Triton 3.1.0 参考,未声称新的 GPU 运行或提速。
单次执行内缓存经整数范围证明的地址几何,数组内容仍实时读取,调试回调与跟踪保持原路径。修正形状符号上下文边界并新增 23 项回归。

793 项 CPU 回归、15 项原有 GPU 差分及 3 项目标矩阵差分通过;三轮指定 CPU 用例平均约快 3.85 倍,同时披露额外 141–183 KB 的分配峰值及完整证据。
复用表达式身份键,将整数区间构造移到缓存未命中时,并保留动态符号、实际求值计划和自定义键语义检查。新增三项回归,796 项 CPU 与 15+3 项实际 GPU 差分通过。

固定三轮目标平均相对 c2c35ec 加速 1.128–1.133 倍,所有控制通过;记录小幅分配峰值增加,保留初稿未达门槛的完整负结果。
无用户回调或过滤器时允许内置访存记录器复用几何;无掩码读取也复用地址,数组数据、快照和实际访存事件仍逐次读取和记录。自定义observer类型及其他掩码保持原处理。

799项CPU、15+3项实机GPU与137项语义检查通过;三轮跟踪目标约2.38倍,完整轨迹相同。披露执行峰值增加以及协议继承文案的更正,原数据和数值门槛保留。
三版源码、轨迹共享差异和控制点退化均已归档。局部跟踪提速没有达到完整采用要求,本次只更新报告与入口链接,计算和测试代码保持16ddfd1。
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant