E5 验收记录#
任务:PhysX Atlas #6。交付:批量、学习接口与数据、原生 C++ 批量边界片段、中英文入口、课程/roadmap、源码地图和身份清单。
开始时已 fetch 核实实际 main 为 ed5ccdb30266ef0a0a5f1457297de827783f577b;E2 的 810f7b2361a97dafb3d4eb9db2643d316ec900c2 和 E4 均为实际祖先,工作树干净,#6 OPEN、无评论、无进行中 PR。从该基线创建 docs/e5-batch-learning-data,恢复时保留同分支来源清单与缓存。本记录对应包含它的提交;后续发布/合入状态须以实际远端读回为准。
对照验收#
要求 |
对应交付 |
结论 |
|---|---|---|
A8 批量隔离 |
第 1 节独立 Scene/同 Scene/进程边界、aggregate 与四类隔离 |
原生对象及应用责任课程完成;未运行批量环境 |
B6 CPU 调度与同步 |
第 2 节 dispatcher/task、reference、scratch、check/fetch、split simulation/fetch |
API 与实现核对;无并行执行或吞吐实测 |
CPU/GPU/Direct GPU |
第 3–4 节不可变选项、首步初始化、context/events、GPU buffer/索引、scene-wide padding、typed 读写 |
数据与同步契约交付;GPU 内核及特色能力留 E6,未执行 GPU |
A8 reset/学习语义 |
第 5、7 节 CPU/GPU reset、持续输入、局部环境重置、宿主 RL、decimation、terminal/truncated/invalid |
没有伪造 SDK 环境类或将自动 reset 后观测当 terminal observation |
A9 随机化与复现 |
第 6 节参数/共享资产、RNG 流、增强 determinism 的范围 |
分布为应用假设;无 bitwise 或统计运行验收 |
A9 数据/回放/sim-to-real |
第 8 节 schema/time/validity、三种回放、Collection 与 backing memory、模型/执行器/传感/时序差距 |
对象图、应用记录与完整 checkpoint 分开;无实物标定/迁移结论 |
B6 扩展/性能口径 |
第 9 节 scheduler/filter/DirectGPU/extensions/serializer、wall time 边界和计数公式 |
接口课程交付;完整自定义约束/几何/内核待 E6,不含性能数字 |
示例/练习/导航 |
两个原生 C++ 阅读函数、8 条易错点、10 道附答案练习、双语入口与课程状态 |
无新框架、运行入口或评分器;保留 Sim Atlas 总仓链接 |
源码与公式由作者自审;独立主审/发布由后续流程完成,本记录不将预读或自审写成最终批准。特别核对:
env_id 是应用 filter data 约定;共享静态 world 是有意的例外,aggregate/空间平移不构成完整隔离。query 与 simulation filter 仍独立。
task.run 不得阻塞,零 worker dispatcher 会同步 run/release;checkResults/completion task 不替代 fetch。每个在途 scene 的 scratch 不能被另一 scene 同时覆盖。
Direct GPU 需要首个真实物理步初始化,并会改变常规 CPU readback/sleeping 契约;GPU broad phase 与 dynamics 是不同设置。
articulation 请求子集仍以全 Scene maxDofs/maxLinks 分块;GPU index 与请求 row 分开。JOINT_FORCE/target 的 get 读回输入值,不是求解器测量。
CUDA context 锁、scene 锁、start/finish event 和 D→H readback 是不同边界;bool 可能不含异步错误,借用 contact 内部指针会在下一 simulate 失效。
zeroCache/eALL 不等于完整 reset;Direct GPU UPDATE_KINEMATIC 会清掉相关加速度/传力输出。控制输入、引擎状态与应用历史均需明确重置策略。
mass=0 的原生特殊语义、setMass 不更新惯量,以及 enhanced determinism 不支持 GPU 的范围已保留。
Binary reader 验证 header/GUID/platform,并在提供内存内构造对象;collection.release 只销毁容器,backing memory 需晚于对象释放。XML serialization 在固定头文件已 deprecated。
RL bootstrap 式明确持续任务/外部时间截断假设;并未声称 PhysX 实现奖励、终止、优化器或迁移学习。
实际静态检查#
环境:Linux、Python 3.12.12、g++ 11.4.0。固定源码 da950a3537927784951853c66618036f332ca0ce,SDK 头文件 5.11.0。manifest 累计 126 个源码文件,本项新增 23 个;全部按 Git blob 算法核对缓存内容,并独立逐项与官方相同提交的完整 Git tree 对照。新片段公开头文件依赖闭包 18 个文件,同样核对官方 blob。闭包含条件平台引用;Linux 预处理不需要未公开 Switch 平台头,不声称 18 是实际 Linux 展开数量。
补充的 Isaac Lab 官方 task-workflow 页面只证明 RL 任务组织属于宿主;其可变 URL、2026-10-09 查阅日期和用途已单独记入 sources.json。它不进入 PhysX 固定 blob 计数,也不证明任何宿主版本匹配或运行能力。
仓库根目录检查(PHYSX_SOURCE 指向核验后的固定树/缓存,内部包含 physx/include):
git diff --check
git diff --cached --check
python scripts/check_docs.py
python scripts/check_source_links.py --source-root "$PHYSX_SOURCE"
g++ -std=c++17 -DNDEBUG -fsyntax-only -Wall -Wextra \
-I "$PHYSX_SOURCE/physx/include" examples/e5_batch_boundaries.cpp
结果:本地 Markdown 文件链接、126 个源码 blob 和 472 处源码链接路径/行号检查通过,staged 新文件的空白检查通过。C++ 语法/类型检查退出码 0、无诊断;不链接、不生成或执行 SDK 程序。块公式使用 $$,未将检查称为浏览器视觉验收。未修改/放宽检查脚本或 CI。
源码工具只验证路径、行存在及身份,语义仍由实际阅读核对。静态编译无法验证 shader 的隔离效果、GPU 指针/容量真实性、device/context 配对、事件时序、实际 batch 输出、reset 或 replay 行为。
未决与下一步#
没有运行 native SDK、物理步、GPU、查询、渲染、serialization round trip、训练、基准、实物标定或 sim-to-real 实验。示例调用者仍负责初始化和生命周期、全部 shape 的 env 标记、单独 query filter、GPU 索引/缓冲/同步与实际容量;两个函数不组成一个学习框架。
历史 Isaac Sim 5.1 / UniSim 1.7.10 的内置 PhysX 与配置继续保留 DexLab #126 的未知项,不能从当前 SDK/宿主文档补齐。Isaac Lab 页面只作职责参考,没有核实其当前安装或绑定的 PhysX binary。
下一项建议 E6:GPU 内核/后端、特色几何与自定义扩展,依赖实际合入的 E3;E7 再审校两条路线与 DexLab 证据入口。开始前重查 main、Issue/PR 和依赖。本项只做本地提交后待主审,不自行开始下一阶段;后续实验继续复用 DexLab。