@@ -1180,3 +1180,66 @@ lane 结论一致;只跑模拟器,等于把「lavapipe 说对了」当成「它
11801180 第三档的「CUDA 只能上真卡」删除,代之以 §5 的矩阵;
11811181- ** §12** 的阶段表 —— 「未做」的理由全部作废,代之以 §5 的 lane 与 §9 的判据;
11821182- ** §15.8** —— 两条「缺授权」的结论作废,代之以 §4.2 与 §3.1。
1183+
1184+ ---
1185+
1186+ ## 12. 实施后自我 review(2026-09-05)
1187+
1188+ 方案写完之后由实施推翻或补上的地方。** 只记与本文所写不同的** ;相符的部分见
1189+ 实施计划表的判据列。
1190+
1191+ ### 12.1 被实施推翻的
1192+
1193+ | 本文写的 | 实测 | 处置 |
1194+ | ---| ---| ---|
1195+ | C-1「设备目标原语」是新的 ` [[target]] kind = "device" ` | ` mcpp::action ` 已有四种角色,artifact 的产物不进链接、object 的进链接,且 ninja 按路径连边 —— 「不参与常规链接、被某条边消费的产物」** 就是** artifact 角色 | 不新增 target kind。再加一种是同一个决定写第二遍 |
1196+ | C-5 的驱动取数由核心完成 | 仓库自带的 ` test_runtime_contract ` 禁止「厂商词 + 探针启动」在 ` src/ ` 共现,抓住了写下的 ` nvidia-smi ` 调用 | 关系留在核心并单测,** 取数改由声明抵达** ;` doctor ` 的整节与 ` mcpp.toolchain.devicehost ` 一并删除 |
1197+ | C9(RDC 真机)在本机可测 | nvcc 路线** 两端同时被挡** :12.9 满足驱动而不满足 C 库(C23 ` cospi ` /` rsqrt ` 的 ` noexcept ` 冲突),13.3 满足 C 库而不满足驱动(要 ≥13.0,本机 12.4) | 判据退回 e2e 607 所测的** 通用链式 action** ;真机 RDC 留给有 13.x 驱动的机器,并在示例 README 里写明为什么 |
1198+ | ① 已完成 | 13.x 的 ` cuda-nvcc ` ** 装完不能用** : nvcc 用 ` $(TOP)/nvvm/bin/cicc ` 找后端,而 13.x 把 ` nvvm/ ` 与 ` crt/ ` 拆成了独立包=独立载荷根 | xim #760 。修法的形状:** 无条件写链接** ,不要求嵌套安装成功 —— 它失败无声且两种拼法都不可靠 |
1199+ | T1.5「lavapipe 载荷」是新增包 | 现有 ` xim:mesa ` 载荷里** 只有 RADV** ,没有 ` libvulkan_lvp.so ` ,也没有 rusticl | 仍待做,且不是新增包而是** 重打 mesa 载荷** (` -Dvulkan-drivers=…,swrast ` + ` -Dgallium-rusticl=true ` )。T1.4 同理 |
1200+
1201+ ### 12.2 实施自己造出来又修掉的
1202+
1203+ - ** 「没有加速器」被写成了显示用的 ` (none) ` 。** ` accel_str ` 为空集打印 ` (none) `
1204+ 是给 ABI 标签读的;` resolvedAccel ` 把这个拼法当值传了出去,于是
1205+ ` MCPP_ACCEL=(none) ` 到达** 每一个从未提过加速器的工程** ,而指纹里
1206+ ` if (!accel.empty()) ` 恒真。e2e 605 第四段标题写着「变量与 layer 都清空」
1207+ 却只测了 layer —— 这就是它逃过套件的原因。判据只能靠构建程序** 写文件** 取得:
1208+ 它的 stdout 只在非零退出时才打印。
1209+ - ** 设备源的映射按裸包名索引。** 同一张图里两个包可以同名不同命名空间;
1210+ 改按包根索引。合入前重读 diff 时发现,没有测试覆盖它。
1211+
1212+ ### 12.3 生态级 review:这一轮之后,一个消费者看到的是什么
1213+
1214+ 一个要用 GPU 的工程现在写三样东西,各自答给不同的所有者:
1215+
1216+ ``` toml
1217+ [xlings .workspace ] # 载荷:工程自己选版本
1218+ "xim:cuda-nvcc" = " 12.9.86"
1219+
1220+ [dependencies .compat ] # 机器:驱动由机器决定,包只负责够到它
1221+ cuda-driver = " 2026.09.05"
1222+ cublas = " 12.9.1.4" # 算子库:载荷 + 构建面,两个仓库各管一半
1223+
1224+ [build ] # 轴:写一次,规则包据此推导自己的开关
1225+ accel = " cuda12.9+{sm_89} ptx>=89"
1226+ ```
1227+
1228+ ** 核心不认识其中任何一个厂商名字** ,这条由 ` test_core_vendor_probes ` 在剥掉
1229+ 注释的源码上执行,并自带分母。
1230+
1231+ 三条已被生态执行的规则在本轮各验证一次:
1232+ GPU 索引包不自己探测宿主(委托 xim sentinel);链宿主 ` libcudart ` 会被闭包
1233+ 校验拒掉(所以 ` compat.cudart ` farm 的是载荷而不是宿主);打包后的
1234+ ` runtime.artifacts ` 是封闭白名单(新增产物字段两个读取器都要查)。
1235+
1236+ ### 12.4 仍然没有做的,以及理由
1237+
1238+ | 项 | 理由 |
1239+ | ---| ---|
1240+ | T1.2 ` llvm-offload ` | ` dpcpp@7.1.0 ` 载荷自带全套 offload 工具,需要 RDC 的工程可用它;独立包仍待做 |
1241+ | T1.4 / T1.5(pocl / lavapipe)与 T4.2 | 需要** 重打 mesa 载荷** (见 12.1 末行),或新建 pocl 源码构建配方。两者都是多小时的载荷工程 |
1242+ | T1.8/T1.9/T1.10(chipstar / adaptivecpp / hip) | 依赖 T1.2/T1.4 |
1243+ | T4.3 规则包进索引 | 依赖 ③ —— 描述符指向 mcpp 的** 源码 tarball** (` grpcgen ` 同形),tag 不存在则算不出 sha256。规则包已改名到 ` mcpplibs ` 命名空间,就是为了让它可被引用而不是被复制 |
1244+ | ⑤ 九个框架 | 依赖 ④ 的规则包条目。` ggml-org.llamacpp ` 与 ` opencv.opencv ` 已在索引里,多后端是改** 它们各自的 ` -m ` 仓库** 而不是索引条目 |
1245+ | T2.6 的端到端判据 | ` accel ` 已是 ` pack::AbiTag ` 第四维并进指纹;「` .a ` 随包传播」还缺一条跨包的判据 |
0 commit comments