数据流动画化
把“每份数据原来在哪里、谁在本步操作它、经过什么命令到哪里、为什么能够并行”做成可暂停、可追踪、与源码对应的动画。优先交付可运行的演示,而不是只给布局建议。
交付原则
- 双页各分其职:默认一个控制与解释页、一个专注数据流的动画页,能在两个显示器分别全屏,共享唯一进度。用户明确要求单屏时按其要求调整。
- 每阶段一屏完整:针对实际浏览器可用视口组织内容,减少换页和滚动;不能靠裁掉内容或缩成难读的小字宣称一屏完成。
- 当前操作统一红色:本步的读取、写入、活动连线、关键结果和实际执行代码一起突出;暂停后仍保留,进入下一步后重点移动。
- 数据与代码可核对:图中对象使用真实变量名,具体数字由同一模型推导,能追踪来源、去向、索引和源码位置。
- 教学时序有边界:明确区分源码语义模拟与实机执行追踪,不能把教学批次当成硬件全局同步时刻或性能测量。
- 通信默认至少四个 rank:四个参与者必须都有真实模型状态,重新推导每个对端的路由、队列、通知和输出;不得只复制装饰面板。用户明确限定更小规模时遵循用户要求。
- 纯白底、无隐含数字、无遮挡:默认 HTML 页面背景为
#ffffff。编号、数据值、字节数、权重、状态值要有字段名与解释;元素不出界不等于元素不重叠。 - 数据对象的内部变化是主线:先展示对象由哪些字段、结构体或数组组成,再逐步展示元素何时被谁从什么值写成什么值。不能把动画简化成对象名字之间的移动箭头或几个状态数字。
工作流程
1. 固定源码与分析范围
优先利用当前项目和已有实现继续改进。用户指定远端文件时,获取该仓库、分支的真实内容并记录提交标识;不要用另一个分支的同名文件替代。页面读取失败可用 Git 获取。缺少必要源码时先完成可验证部分,再明确缺失的信息。
读取目标函数及必要的调用者、输入生产者、输出消费者、内存分配与同步代码。先解释这个函数实际搬运的是 token、计数、索引还是标志,再决定画什么。源码注释与实现冲突时依实现建模,并指出差异。
整理简短的证据与假设:源码版本、分析入口、示例参数、合法输入约束、尚未实测的硬件行为。示例数值是教学选择,不冒充用户运行配置。
2. 建立变量账本和批次模型
阅读 数据模型与验证,建立一个独立于页面的计算模型。
每个重要对象至少记录:所属 rank / 核 / 线程、真实变量名、内存层级、dtype、逻辑形状、有效元素数、分配容量、对齐与填充、索引到地址的公式、生命周期。明确字节和元素单位,以及不同变量是否指向同一存储。
先制作“对象目录与剖面”:输入数组、临时结构/UB、打包块、通信描述符、独立标志、接收副本、输出数组分别列出字段名、类型、索引范围和嵌套关系。连续内存的逻辑记录要说明并非真实 C++ struct;padding 未定义时不能随意画成 0。为每个可观察元素记录来源、当前值、上一步值、本步操作、操作者、时刻/教学步骤与源码位置;复制只改变位置、格式化重排、状态清零要分别表达。
默认主视图跟踪一条具体记录穿过对象链,并显示“原值 → 新值”,同时保留至少四个 rank 的概览。较长数组可按有解释的索引区间折叠,但必须能展开完整数组或选择任意元素,查看其逐步值历史;不能只展示首元素却暗示已经解释整个数组。零值必须与“未初始化/未写入”区别展示。当前操作是读还是写不能仅由数值是否变化判断。
每个步骤描述:批次编号、执行主体、函数与命令、读取对象及范围、写入对象及范围、实际数据、完成或等待条件。把跨 rank 并行、核间分工、核内循环顺序和异步提交分别表达清楚。
先用小而有区分度的输入算通全过程,再设计动画。通信任务默认至少四个 rank,并包含多个来源、多个目的、空对端和本机路径;默认数据应包含非零、零和不均匀分布。参数改变后,从模型重算数组、形状、步数和代码分支,包括发送核编号影响的路由或队列选择,不能把两卡专用公式直接复制到四卡面板。
阅读 教学与视觉验收。把每个可见数字登记为“索引、载荷、计数、大小、状态、教学参数”之一。就近写字段名、单位、取值含义;计算量给公式,教学数值注明人为选择。禁止使用 t0 · 1 这类把记录编号与数据值混在一起的标签。应分别写“token 编号 0”和“首元素值 1”,并解释首元素是 x[token, 0],不是整个 token 或 flag。
3. 分配双屏内容
| 页面 | 主要内容 | 交互职责 |
|---|---|---|
| 控制与解释屏 | 唯一主进度条、阶段说明、真实源码节选及行号、参数、当前记录的来源与去向 | 播放、暂停、前后步、重置、调速、跳阶段、打开动画窗口 |
| 数据流动画屏 | rank / 核泳道、数组与内存区域、活动传输、接收布局、当前阶段结果 | 查看当前数据流,点击对象反向联动控制屏的追踪详情 |
动画屏只保留简短阶段标题、必要状态和图例。长解释、完整变量账本入口、代码详情归控制屏。两页显示一致的步骤标识,用户能够立即核对联动状态。
按阶段切换信息密度:输入阶段展示初始数组;发送阶段展示本批源块、连接与目的布局;汇总阶段展示核间小计与起始偏移;累加阶段展示当前读取和输出。已完成且不再参与本阶段的细节收起,但保留理解当前操作所需的上下文。
每段源码必须显示所属函数的准确名称、定义行、调用者或调用链、固定提交和文件名。展示当前语句前后的连续原始上下文,覆盖必要的条件、循环、变量定义与语句边界;当前执行行红色,上下文灰色。长函数在明确的区间之外用 ⋯ 标示省略,提供含签名的完整函数入口。跨函数步骤用有名称的片段页签,不拼成看似同一函数的无名语句集合。不得用伪代码冒充原文,也不得把内部裁切的代码框当成完整展示。
4. 实现共享进度与语义高亮
实现前阅读 双屏联动与高亮。推荐 control.html、visual.html 共用模型、源码索引和状态模块;已有项目可沿用其框架,无须另建技术栈。
同设备、同浏览器配置文件的双窗口可用同源 BroadcastChannel;共享一个 session 和权威状态,以共同时间锚点推导播放进度。支持后加入、刷新恢复、反向选择和多个控制窗口不重复推进。页面应说明联动范围,不能暗示可以跨浏览器或跨设备同步。
以模型给出的显式读写集合和源码行集合驱动红色,不能只比较数值差异。零值写入、同值重写、新副本都属于当前操作。未执行分支不高亮。rank 身份色、完成状态和用户选中状态使用独立视觉语义。
新步骤轻闪一次帮助定位;暂停时保留静态红色,心跳、速度变化或选中操作不重复触发步骤闪烁。遵守 prefers-reduced-motion,并用边框、读写标签等辅助线索,使颜色不是唯一信息来源。
5. 检查真实一屏布局
使用受视口高度约束的网格,例如 100dvh、minmax(0, 1fr) 和 min-height: 0。检查各面板和数组实际内容,而不只检查页面根节点是否滚动。
默认 html、body 与页面主容器均为纯白背景,分区用留白、边框、标题区分;局部操作色不能扩展成整页深色或灰色底。用户给出背景约束时,将其纳入实际 computed style 验证。
复杂矩阵优先分成同屏的多个连续分组,重复必要行列标题;保留 rank、来源和目的索引。较大规模若不能全部可读展示,应明确哪些是聚合视图、哪些是可选详情,不能隐藏数据却暗示已经展示全部。
按用户屏幕条件验收;未知时以 1280×720、1440×900、1920×1080 的 CSS 视口作为桌面参考。每个页面分别读取实际 innerWidth / innerHeight,不能把请求设置的尺寸当成已生效;测试函数显式传入当前标签页句柄,避免闭包引用旧页面。遍历全部阶段与最高密度预设,检查未选中、已选中、读写徽标出现、弹窗和较长文字状态。
同时检查两类缺陷:①容器溢出/裁切;②本应分离的元素发生交叠。对卡片、相邻区块、表头/正文、字段标签/数据值、读写徽标/文字、按钮与源码行做矩形相交和文字边界检查。祖先包含子元素、刻意放在专用轨道内的动画粒子可作为有说明的例外;不能把所有绝对定位元素排除。传输线优先走独立通道,禁止穿过标签或覆盖数值。尺寸脚本通过后,仍须实际查看最拥挤的截图。
6. 验证后交付
先验证算法不变量,再实际操作浏览器,避免“动画流畅但数字错误”。重点验证:
- 输入到输出的路由、数量和前缀能核对;零值、集中路由、不均匀分工及合法边界场景符合代码。
- 双页播放、暂停、步进、拖动、重置、调速和参数更新一致;点击记录反向联动;后加入和刷新能够恢复。
- 本步输入、输出与代码同时红;上一步回归普通状态;零值新写入仍红;暂停不丢重点;实际未执行分支不红。
- 所有主要阶段在目标视口可完整阅读;没有隐藏溢出、相互遮挡或未解释数字;函数名称和连续源码上下文可定位;背景实际为纯白;浏览器无相关脚本错误。
交付页面入口、一条启动命令、源码版本与模型边界,以及实际验证结果。没有执行的检查应直接说明。双屏使用方式为:同一浏览器打开两页,将动画窗口拖到第二显示器,分别全屏。弹窗受限时提供可手动打开的链接。
默认使用本地 HTTP 服务和内存状态,不增加数据库或持久化。需要跨设备时再采用必要的服务端同步。遵循当前项目的保存与提交约定;只有用户要求时才发布或推送远端。
用户指出可读性或重叠问题时,先重现其具体截图/步骤,再修复模型或布局;写出“原错误 → 方法原因 → 修复 → 新增验收”。不能用大量通过的无关测试掩盖该问题。将可复用教训更新到本 Skill;用户授权推送时,验证规范源与全局链接后提交到所属 Skill 仓库,并核对远端提交。