导读
开始读源码之前,先把两件事讲清楚:
- 怎么读这一卷:为什么是 0.8.0,它依赖的那一串单独发布的 provider(tcontract、cpueinsum、tlinalg、threadteam、strided-rs、t4a-faer)各锁在哪个 commit;直接计算、traced、eager 三条主线和 einsum 线每一步落在哪个函数、哪一页讲;README 的「Conventions you must know」五条,各用一个小程序核实(行主序数据静默算错、engine 到底持有什么、
->必须写、a + b + c编不过);native、blas、blas-*、provider-inject、autodiff、cuda、rocm、pjrt各打开什么,为什么一个 crate 开blas、另一个留着默认的native,整个构建就编不过。 - 源码地图:16 个 crate 的分层和依赖方向,和
cargo tree对照,上游架构文档哪里过时了;每个 crate 多少行、测试多少行(测试散在src/**/tests*里,怎么数的);tcontract、cpueinsum、tlinalg、threadteam、strided-rs、computegraph、omeco、t4a-faer、t4a-cuda-* 各管什么;一个只做 CPU matmul 的程序依赖多少个包。
flowchart TB read[怎么读这一卷] --> ver[锁定版本] read --> lines["三条主线 加 einsum"] read --> conv[五条约定] read --> feat["feature 要一致"] map[源码地图] --> layers["分层与依赖"] map --> size[规模] map --> ext["外部 provider"]
💬 关联讨论
发起讨论加载中...