From 07e9878f06fb678d8994b9a9867b29679aa9fb48 Mon Sep 17 00:00:00 2001 From: NiseAzaka Date: Sun, 16 Aug 2026 23:25:40 +0800 Subject: [PATCH 1/4] complete training camp homework assignments Implement all 8 assignments in TinyInfiniTensor: - memory allocator: first-fit allocation with free block merge and end-of-memory block extension; graph memory planning in dataMalloc with reference-count based memory reuse - shape inference for transpose, clip, cast and concat operators - bidirectional broadcasting for element-wise operators - matmul shape inference with transA/transB and batch broadcast - graph optimization: redundant transpose pair elimination and transpose fusion into matmul trans attributes All 11 tests pass (make test-cpp). --- ...14\346\210\220\350\257\264\346\230\216.md" | 1026 +++++++++++++++++ include/core/allocator.h | 9 +- src/core/allocator.cc | 58 +- src/core/graph.cc | 190 +++ src/operators/concat.cc | 20 + src/operators/matmul.cc | 37 +- src/operators/transpose.cc | 9 +- src/operators/unary.cc | 13 +- src/utils/operator_utils.cc | 22 +- 9 files changed, 1374 insertions(+), 10 deletions(-) create mode 100644 "docs/\344\275\234\344\270\232\345\256\214\346\210\220\350\257\264\346\230\216.md" diff --git "a/docs/\344\275\234\344\270\232\345\256\214\346\210\220\350\257\264\346\230\216.md" "b/docs/\344\275\234\344\270\232\345\256\214\346\210\220\350\257\264\346\230\216.md" new file mode 100644 index 00000000..051cae8b --- /dev/null +++ "b/docs/\344\275\234\344\270\232\345\256\214\346\210\220\350\257\264\346\230\216.md" @@ -0,0 +1,1026 @@ +# TinyInfiniTensor 训练营作业完成说明 + +## 完成情况 + +本文档对应 [训练营作业介绍](./训练营作业介绍.md) 中的 8 道作业题,**已全部完成并通过本地自测**: + +| # | 作业 | 难度 | 对应测例 | 状态 | +| --- | --- | --- | --- | --- | +| 一 | 内存分配器(allocator + dataMalloc) | ⭐⭐⭐⭐ | test_allocator、test_nativecpu_concat、test_nativecpu_elementwise、test_nativecpu_transpose | ✅ 已完成 | +| 二 | transpose 算子形状推导 | ⭐ | test_transpose、test_nativecpu_transpose | ✅ 已完成 | +| 三 | clip 算子形状推导 | ⭐ | test_clip | ✅ 已完成 | +| 四 | cast 形状推导 & 数据类型推导 | ⭐⭐ | test_cast | ✅ 已完成 | +| 五 | concat 算子形状推导 | ⭐⭐ | test_concat、test_nativecpu_concat | ✅ 已完成 | +| 六 | 双向广播 | ⭐⭐⭐ | test_element_wise、test_nativecpu_elementwise、test_matmul | ✅ 已完成 | +| 七 | 矩阵乘形状推导 | ⭐⭐⭐ | test_matmul | ✅ 已完成 | +| 八 | 简单图优化规则实现 | ⭐⭐⭐⭐ | test_graph | ✅ 已完成 | + +**测试结果**:`make test-cpp` 11/11 全部通过(每个测例 10 分)。 + +## 文档定位 + +本文档是作业的**完成记录与实现说明**:记录了每个作业的实现思路、关键原理、 +完整参考实现(即当前仓库中的代码)以及开发过程中踩过的坑。自测命令: + +```bash +make build # 编译 +make test-cpp # 运行全部 11 个测例 +``` + +以下各节按作业顺序记录实现说明(顺序:二 → 三 → 四 → 五 → 六 → 七 → 一 → 八)。 + +--- + +## 0. 项目速览与常用概念 + +### 0.1 目录结构与构建 + +```text +include/ 头文件(声明) + core/ tensor / operator / graph / allocator / runtime / blob ... + operators/ transpose / unary / concat / matmul / element_wise 的算子类 + utils/ 工具函数(广播、异常等) +src/ + core/ core 组件的实现 + operators/ 各算子实现(形状推导 inferShape 在这里) + kernels/cpu/ CPU kernel(真正做计算的代码,作业不涉及) + utils/ 工具函数实现(infer_broadcast 在这里) +test/ + core/ test_allocator、test_graph + operators/ test_transpose、test_clip、test_cast、test_concat、test_element_wise、test_matmul + kernels/nativecpu/ test_nativecpu_concat、test_nativecpu_elementwise、test_nativecpu_transpose +docs/ 项目文档 +``` + +构建与自测(进入项目根目录): + +```bash +make build # 默认 Release 模式构建(含测试) +make test-cpp # 运行全部 11 个测例,全部通过即完成作业 +``` + +### 0.2 核心对象模型 + +| 类型 | 说明 | +| --- | --- | +| `TensorObj` | 一张量,包含形状 `Shape`(`vector`)、数据类型 `DataType`、数据内存 `Blob`。`getBytes()` 返回占用字节数(`size() * dtype.getSize()`) | +| `OperatorObj` | 一个算子,持有输入 `inputs`、输出 `outputs`,以及前驱 `predecessors`/后继 `successors` | +| `GraphObj` | 计算图,管理 `tensors`、`ops`、`allocator` | +| `BlobObj` | 封装一块真实内存指针,`tensor->setDataBlob(blob)` 把内存绑定给 tensor | +| `Ref` / `WRef` | 分别是 `shared_ptr` / `weak_ptr` 的别名。tensor 与算子之间用 `weak_ptr` 互相引用,避免循环引用 | + +图中有两组双向关系,**写代码维护关系时最容易在这里出错**: + +- **tensor 侧**:`source`(谁产生了我,`weak_ptr`)与 `targets`(谁消费我,`weak_ptr` 列表)。 +- **op 侧**:`predecessors` / `successors`。 + +这两个视图必须同步维护。例如 `addOperatorAndConnect` 中会同时维护这两侧。 + +### 0.3 形状推导流程(理解作业二~七的关键) + +以 `g->addOp(i, nullptr, perm)` 为例,创建算子时会走: + +```cpp +OperatorObj::checkValid(graph) // src/core/operator.cc:43 + ├─ inferShape() // 调用各算子的形状推导 → 得到输出形状 + ├─ inferDataType() // 得到输出数据类型 + └─ outputs[i] = graph->addTensor(...) // 按推导出的形状/类型创建输出 tensor +``` + +所以作业二~七的任务,本质是**让 `inferShape` 返回正确形状**(部分算子还要重写 `inferDataType`)。 +返回类型是 `optional>`,每个元素对应一个输出的形状;返回 `std::nullopt` 表示推导失败。 + +注意:`checkValid` 中已经调用了 `inferShape`,所以 `g->addOp(...)` 返回的 +算子对象的输出 tensor 就已经带上了正确的形状,测例都是通过 +`op->getOutput()->getDims()` 来断言的。 + +### 0.4 guid 与 Fuid + +- `guid`:每个 `Object`(tensor、op、graph)全局唯一的 ID,从 1 开始递增。 +- `fuid`:tensor 的"家族 ID",克隆的 tensor 共享同一个 fuid。 +- `test_graph` 中 `EXPECT_EQ(op->getInputs(0)->getGuid(), 2)` 就是利用 + guid 从 1 开始(graph 占 1,后续创建的 tensor 依次为 2、3、…)来验证重连结果。 + +--- + +## 作业一:内存分配器(⭐⭐⭐⭐) + +**对应测例**:`test_allocator`、`test_nativecpu_concat`、`test_nativecpu_elementwise`、`test_nativecpu_transpose` + +**涉及文件**:`include/core/allocator.h`、`src/core/allocator.cc`、`src/core/graph.cc`(dataMalloc) + +### 1.1 设计要点:这是一个"模拟"分配器 + +先理解 `Allocator` 的总体设计(`include/core/allocator.h` + `src/core/allocator.cc`): + +- `alloc(size)` / `free(addr, size)` 都带有 `IT_ASSERT(this->ptr == nullptr)`, + 也就是说 **alloc/free 阶段完全不做真实内存操作**,只是"纸上谈兵"地计算偏移量。 +- 真实内存只在 `getPtr()` 里分配**一次**(大小等于 `peak`,即规划出的最大内存), + 之后所有 tensor 都通过 `基址 + 偏移量` 的方式共享这块内存。 +- `used` 是当前"模拟"状态下被占用的字节数;`peak` 是历史上 `used` 达到的最大值 + (即真正需要分配的内存大小);`getPtr()` 就是按 `peak` 分配。 + +因此我们的任务就是实现两件事: + +1. 用 `freeBlocks` 记录空闲块,实现 `alloc`(找到合适空闲块或从尾部新分配)与 + `free`(回收并合并相邻空闲块); +2. 在 `GraphObj::dataMalloc` 里**先规划**好每个 tensor 的偏移量,**最后**一次性 + `getPtr()` 绑定真实内存。 + +### 1.2 step1:声明空闲块数据结构 + +`include/core/allocator.h` 的 private 区: + +```cpp +// =================================== 作业 =================================== +// std::map:key 为 free block 的起始地址偏移量, +// value 为 block 的大小。map 会按 key(地址)自动升序排列, +// 这样既能快速找到满足大小的空闲块,也能方便地与相邻块做合并。 +std::map freeBlocks; +// =================================== 作业 =================================== +``` + +**为什么用 `std::map`?** + +- 天然按地址升序排列,可以用 first-fit 策略从低地址开始扫描; +- `std::prev(it)` / `std::next(it)` 可以方便地访问相邻块做合并; +- 插入/删除是 O(log n),对学习场景足够。 + +### 1.3 step2:实现 `alloc` + +```cpp +size_t Allocator::alloc(size_t size) +{ + IT_ASSERT(this->ptr == nullptr); + // pad the size to the multiple of alignment + size = this->getAlignedSize(size); + + // =================================== 作业 =================================== + // 采用 first-fit 策略:从低地址到高地址扫描 free block, + // 找到第一个大小不小于 size 的空闲块就进行分配。 + for (auto it = freeBlocks.begin(); it != freeBlocks.end(); ++it) + { + if (it->second >= size) // 找到足够大的空闲块 + { + size_t addr = it->first; // 该块的起始地址就是返回的偏移量 + // 空闲块比需要的更大:把剩余部分重新放回 free list + if (it->second > size) + { + freeBlocks[addr + size] = it->second - size; + } + freeBlocks.erase(it); // 这个块被整块用掉(或切掉一部分) + used += size; // 更新模拟使用量 + peak = std::max(peak, used); // 更新历史峰值 + return addr; + } + } + // 没有合适的空闲块,就在已用内存的末尾追加新的内存。 + // 特例:如果地址最大的空闲块一直延伸到当前内存末尾(peak), + // 可以从该块的起始地址继续向外扩展,从而复用之前被释放的"末尾块"。 + if (!freeBlocks.empty()) + { + auto last = std::prev(freeBlocks.end()); + if (last->first + last->second == peak) + { + size_t addr = last->first; + peak = addr + size; // 内存末尾向后扩展 + used += size; + freeBlocks.erase(last); + return addr; + } + } + size_t addr = peak; // 普通情况:直接追加到内存末尾 + peak += size; + used += size; + return addr; +} +``` + +**逐段解释:** + +1. **first-fit 扫描**:从低地址开始找第一个 `second >= size` 的空闲块。找到了就把 + `[addr, addr+size)` 分配出去;如果空闲块更大,把 `[addr+size, addr+second)` 的 + 剩余部分作为新的空闲块塞回 map。这里 `freeBlocks[addr + size] = ...` 利用 + map 的自动排序,新块会落在正确的位置。 + +2. **末尾块扩展(容易漏掉的细节)**:`test_allocator` 的 + `testAllocWithEndFreeBlock` 故意设计了这样一个场景: + - 依次分配 a、b、c 三块内存(c 在末尾,`[96,144)`); + - free c,此时 free list 里只有 `{[96,144):48}` 这一个块; + - 再分配 d(96 字节,是 c 的两倍大)。 + - 测例期望 `offsetD == offsetC`,即 d 复用 c 的位置。 + + 如果只做 first-fit,48 字节的空闲块装不下 96 字节,d 会被放到 144 处, + 测例失败。正确的做法是:**当最后一个空闲块正好延伸到内存末尾(`peak`)时**, + 可以从它的起始地址继续向外扩展。`96+48 == 144 == peak`,因此 d 从 96 开始, + 扩展到 `96+96=192`,既复用了 c 的位置,又不会与 b 重叠。 + +3. **追加分配**:既没有合适的空闲块、也没有可扩展的末尾块时,在 `peak` 处追加。 + 注意这里返回的 `addr = peak`(旧的 peak),然后把 peak 向后推。 + +### 1.4 step2:实现 `free` + +```cpp +void Allocator::free(size_t addr, size_t size) +{ + IT_ASSERT(this->ptr == nullptr); + size = getAlignedSize(size); + + // =================================== 作业 =================================== + used -= size; + auto it = freeBlocks.emplace(addr, size).first; + + // 合并前一块:前一块的结束地址 == 当前块的起始地址 + if (it != freeBlocks.begin()) + { + auto prev = std::prev(it); + if (prev->first + prev->second == addr) + { + prev->second += it->second; // 把当前块并入前一块 + freeBlocks.erase(it); + it = prev; + } + } + // 合并后一块:当前块的结束地址 == 后一块的起始地址 + auto next = std::next(it); + if (next != freeBlocks.end() && it->first + it->second == next->first) + { + it->second += next->second; // 把后一块并入当前块 + freeBlocks.erase(next); + } + // =================================== 作业 =================================== +} +``` + +**解释:** + +- `free` 的核心是"回收 + 合并"。如果不合并,连续 free 两个相邻块会产生两个 + 碎片化的空闲块,后续的大块分配可能因为凑不齐而失败,或者导致不必要的内存增长。 +- 合并分两步:**先向前合并,再向后合并**(顺序不能反,向前合并后 `it` 指向 + 合并后的块,再用它向后合并,否则可能漏掉第二次合并)。 +- 合并条件是**地址恰好相邻**:`前一块的 first + second == 当前块的 addr`。 + +### 1.5 step3:`GraphObj::dataMalloc`(计算图内存分配) + +```cpp +void GraphObj::dataMalloc() +{ + // topological sorting first + IT_ASSERT(topo_sort() == true); + + // =================================== 作业 =================================== + std::map refCount; // tensor -> 剩余消费者个数 + std::map offsetMap; // tensor -> 规划到的偏移量 + std::unordered_set allocated; // 已规划过内存的 tensor + for (auto &t : tensors) + refCount[t] = t->getTargets().size(); + + // 阶段一:模拟分配,规划每个 tensor 的偏移量 + for (auto &op : ops) + { + // 为算子的输入分配内存(每个 tensor 只规划一次) + for (auto &t : op->getInputs()) + { + if (allocated.find(t) == allocated.end()) + { + offsetMap[t] = allocator.alloc(t->getBytes()); + allocated.insert(t); + } + } + // 为算子的输出分配内存(先于输入回收,避免与输入重叠) + for (auto &t : op->getOutputs()) + { + if (allocated.find(t) == allocated.end()) + { + offsetMap[t] = allocator.alloc(t->getBytes()); + allocated.insert(t); + } + } + // 本算子的输入在本算子执行完后不再被它使用: + // 引用计数减一,归零的输入(最后一个消费者已完成)立即回收, + // 供后面的算子复用,从而降低峰值内存。 + for (auto &t : op->getInputs()) + { + if (--refCount[t] == 0) + allocator.free(offsetMap[t], t->getBytes()); + } + } + + // 阶段二:真正分配内存,并按偏移量给每个 tensor 绑定 Blob + auto base = allocator.getPtr(); + for (auto &[t, offset] : offsetMap) + t->setDataBlob(make_ref(runtime, (char *)base + offset)); + // =================================== 作业 =================================== + + allocator.info(); +} +``` + +**逐段解释(这一段是作业一里最容易出问题的部分):** + +1. **为什么必须分两个阶段?** + 因为 allocator 的 `alloc/free` 带断言 `IT_ASSERT(this->ptr == nullptr)`, + `getPtr()` 只能调用一次且必须在所有模拟分配**之后**。如果边 alloc 边 + `getPtr()` 绑 Blob,第二次 alloc 就直接断言失败。 + +2. **`refCount` 的用途(内存复用)**:每个 tensor 初始化时记录它还有多少个消费者 + (即 `targets` 的个数)。当拓扑序遍历到某个 op 时,它的输入被"消费"一次, + 计数减一;减到 0 说明该 tensor 之后再也不会被读,内存可以 `free` 掉, + 让后面的算子复用。例如一个 `i1 -> op1 -> o1 -> op2 -> o2` 的链条, + `i1` 在 op1 规划完就被回收,`o2` 就可以复用 `i1` 的内存,peak 内存近似减半。 + +3. **输出必须先于输入回收来分配(关键顺序)**:在一个算子内部,如果先回收输入再 + 分配输出,输出会复用**本算子输入**的内存。而 kernel 实际执行时是 + **边读输入边写输出**的(见 `src/kernels/cpu/concat.cc` 的 + `outPtr[oOffset] = inPtr[iOffset]`),输入与输出重叠就会算错。 + 因此代码把「分配输出」放在「回收输入」之前。 + +4. **为什么要 `allocated` 集合**:同一个 tensor 可能被多个算子消费(多输入分支), + 如果不做去重,第二个算子会给同一个 tensor 再 alloc 一块内存,浪费内存且 + `offsetMap` 会被覆盖。`allocated` 保证每个 tensor 只规划一次。 + +5. **绑定 Blob**:`allocator.getPtr()` 返回真实内存基址,加上偏移量后构造 + `BlobObj`,通过 `tensor->setDataBlob(...)` 绑定。之后测试里的 + `t->setData(...)`(写数据)与 `runtime->run(g)`(执行 kernel)都能正常工作。 + +**验证**:`test_nativecpu_*` 三个测例通过即说明 dataMalloc 正确; +`test_allocator` 通过即说明 alloc/free 正确。 + +--- + +## 作业二:transpose 算子形状推导(⭐) + +**对应测例**:`test_transpose`、`test_nativecpu_transpose` +**涉及文件**:`src/operators/transpose.cc` + +### 2.1 原理 + +ONNX Transpose 算子有一个属性 `permute`:**输出的第 i 维来自输入的第 `permute[i]` 维**。 +例如输入形状 `[1,2,3,4]`,`permute = {0,2,1,3}`,则输出形状为 `[1,3,2,4]`。 +`transposePermute` 成员在构造函数中已初始化(空 permute 时默认为恒等置换)。 + +**ONNX 标准参考**: + +### 2.2 实现 + +```cpp +optional> TransposeObj::inferShape(const TensorVec &inputs) +{ + const auto A = inputs[0]; + auto input_dim = A->getDims(); + auto output_dim = input_dim; + int rank = A->getRank(); + + // =================================== 作业 =================================== + // permute 的含义:输出的第 i 维来自输入的第 permute[i] 维, + // 即 output_dim[i] = input_dim[permute[i]]。 + for (int i = 0; i < rank; ++i) + output_dim[i] = input_dim[transposePermute[i]]; + return {{output_dim}}; + // =================================== 作业 =================================== +} +``` + +**验证**:`test_transpose` 的三个用例(含恒等置换)都期望 `getOutput()->getDims()` +等于置换后的形状;`test_nativecpu_transpose` 进一步验证数据层面也正确。 + +--- + +## 作业三:clip 算子形状推导(⭐) + +**对应测例**:`test_clip` +**涉及文件**:`src/operators/unary.cc` + +### 3.1 原理 + +Clip 把每个元素限制在 `[min, max]` 区间内,**不改变形状**,输出形状与输入完全一致。 + +**ONNX 标准参考**: + +### 3.2 实现 + +```cpp +optional> ClipObj::inferShape(const TensorVec &inputs) +{ + // =================================== 作业 =================================== + // clip 是按元素把数值限制在 [min, max] 区间内,不改变 tensor 的形状, + // 输出形状与输入形状完全一致。 + return {{inputs[0]->getDims()}}; + // =================================== 作业 =================================== +} +``` + +**注意返回类型**:`optional>`,最外层 `{}` 是 optional, +`{{...}}` 是 vector(含一个 Shape)。不要写错括号层级。 + +--- + +## 作业四:cast 算子形状推导 & 数据类型推导(⭐⭐) + +**对应测例**:`test_cast` +**涉及文件**:`src/operators/unary.cc` + +### 4.1 原理 + +Cast 把元素从一种数据类型转为另一种,**形状不变**,**数据类型改变**。 +`CastType` 到 `DataType` 的映射已经由现成的 `getOutputDataType()` 实现 +(`src/operators/unary.cc` 底部的 switch 语句),我们只需把它接进来。 + +**ONNX 标准参考**: + +### 4.2 实现 + +```cpp +vector CastObj::inferDataType(const TensorVec &inputs) const +{ + // =================================== 作业 =================================== + // cast 只有一个输出,数据类型由 castType 决定。 + // getOutputDataType() 已经把 CastType 到 DataType 的映射实现好了。 + return {getOutputDataType()}; + // =================================== 作业 =================================== +} + +optional> CastObj::inferShape(const TensorVec &inputs) +{ + // =================================== 作业 =================================== + // cast 只改变数据类型,不改变形状,输出形状与输入一致。 + return {{inputs[0]->getDims()}}; + // =================================== 作业 =================================== +} +``` + +**解释:** + +- `inferDataType` 返回 `vector`,**第 i 个元素是第 i 个输出的数据类型**。 + cast 只有一个输出,所以返回 `{getOutputDataType()}`。默认实现 + (`src/core/operator.cc:74`)是"输出类型 = 输入类型",对 cast 不适用,必须重写。 +- `checkValid` 中会调用 `inferDataType` 来创建输出 tensor,所以测例里的 + `op->getOutDType()` 才等于 `Float16`。 + +--- + +## 作业五:concat 算子形状推导(⭐⭐) + +**对应测例**:`test_concat`、`test_nativecpu_concat` +**涉及文件**:`src/operators/concat.cc` + +### 5.1 原理 + +Concat 把多个输入在 `dim` 维度上拼接: +- 其它维度保持不变; +- `dim` 维的大小 = 所有输入在该维大小之和。 + +例如 `[1,3,2,4]` 与 `[1,3,2,5]` 在 dim=3 上拼接,得到 `[1,3,2,9]`。 +构造函数里已经用 `get_real_axis` 把负轴归一化到了 `[0, rank)`。 + +**ONNX 标准参考**: + +### 5.2 实现 + +```cpp +optional> ConcatObj::inferShape(const TensorVec &inputs) { + Shape dims = inputs[0]->getDims(); + auto rank = inputs[0]->getRank(); + + // =================================== 作业 =================================== + IT_ASSERT(rank >= 1); + size_t concatDim = (size_t)get_real_axis(dim, rank); // 归一化 dim(防御负轴) + dims[concatDim] = 0; // 先清零拼接维 + for (auto &input : inputs) { + IT_ASSERT(input->getRank() == rank); // 所有输入维度数必须一致 + for (size_t i = 0; i < rank; ++i) + if (i != concatDim) // 除拼接维外,其余维度必须相同 + IT_ASSERT(input->getDims()[i] == dims[i], + "Concat: mismatch on dim " + std::to_string(i)); + dims[concatDim] += input->getDims()[concatDim]; // 累加各输入在该维的大小 + } + // =================================== 作业 =================================== + + return {{dims}}; +} +``` + +**验证**:`test_concat` 断言输出为 `{1,3,2,9}`;`test_nativecpu_concat` 验证 +三个输入拼接后的数据与期望完全一致。 + +**健壮性说明**:ONNX 要求所有输入**除 dim 维外形状完全相同**。上面的实现除了 +检查 `rank` 一致外,还逐一断言了每个非拼接维与其他输入相同(`i != concatDim`)。 +如果只检查 rank 而不检查其它维度,非法的输入(如 `[1,3,2,4]` 与 `[1,3,2,5]` +在 dim=1 上拼接)会被静默接受并产生错误结果,因此这一步检查建议保留。 + +**类型陷阱**:`getRank()` 返回 `size_t`(`TensorObj::getRank()` 返回 +`shape.size()`),而项目编译选项带有 `-Wall -Werror`(警告视为错误), +所以循环变量必须用 `size_t`(如 `for (size_t i = 0; ...)`)并把 +`concatDim` 也转成 `size_t` 再比较;若写 `for (int i = 0; i < rank; ++i)`, +会触发 `-Wsign-compare` 直接编译失败。 + +--- + +## 作业六:双向广播(⭐⭐⭐) + +**对应测例**:`test_element_wise`、`test_nativecpu_elementwise`、`test_matmul` + +**涉及文件**:`src/utils/operator_utils.cc`(`infer_broadcast`) + +### 6.1 原理 + +NumPy/ONNX 的广播规则(从后往前对齐): + +1. 两个 shape 从**最后一个维度**开始逐维比较; +2. 维度数量不同时,较短的 shape 在前面补 1; +3. 每个维度上,若两个大小相等、或其中一个是 1,则可以广播,结果取**较大的那个**; +4. 若两个都大于 1 且不相等,则不能广播(报错)。 + +例如 `{1,2,2,3,1}` 与 `{2,1,1}` 广播为 `{1,2,2,3,2}`(对齐后: +`{1,2,2,3,1}` vs `{1,1,2,1,1}` → `{1,2,2,3,2}`)。 + +**ONNX 标准参考**: + +### 6.2 实现 + +```cpp +Shape infer_broadcast(const Shape &A, const Shape &B) { + + // =================================== 作业 =================================== + Shape ans; + auto itA = A.rbegin(), itB = B.rbegin(); // 反向迭代器:从后往前比较 + while (itA != A.rend() || itB != B.rend()) + { + int dimA = (itA != A.rend()) ? *itA++ : 1; // 短的 shape 视为补 1 + int dimB = (itB != B.rend()) ? *itB++ : 1; + IT_ASSERT(dimA == dimB || dimA == 1 || dimB == 1, + "Broadcast failed: " + vecToString(A) + " vs " + vecToString(B)); + ans.emplace_back(std::max(dimA, dimB)); // 每维取较大者 + } + // 上面是从后往前生成的,翻转回来即得到从左到右的形状 + std::reverse(ans.begin(), ans.end()); + return ans; + // =================================== 作业 =================================== +} +``` + +**逐段解释:** + +- 用**反向迭代器**天然实现"从后往前对齐";当一个 shape 较短时,对应的迭代器先到 + `rend()`,此时该维按 1 处理(等价于前面补 1)。 +- `std::max(dimA, dimB)` 实现"取较大者":相等取本身,有一方为 1 取另一方。 +- 因为是从后往前 push 的,最后要 `std::reverse` 一下恢复从左到右的顺序。 +- 需要 `#include `(文件顶部已加)。 + +**验证**:`test_element_wise` 的 5 个用例覆盖了各种广播组合(标量、单维、多 1、 +对齐补位等);`test_nativecpu_elementwise` 验证广播后的实际计算数据正确; +`test_matmul` 的批量维度广播也依赖本函数。 + +--- + +## 作业七:矩阵乘形状推导(⭐⭐⭐) + +**对应测例**:`test_matmul` +**涉及文件**:`src/operators/matmul.cc` + +### 7.1 原理 + +ONNX MatMul 语义(行主序): + +- A 的形状记为 `[batch..., m, k']`,B 记为 `[batch..., k'', n]`; +- `transA = true` 表示 A 参与乘法前**交换最后两个维度**,即转置前的 A 形状是 + `[batch..., k, m]`; +- `transB = true` 表示 B 参与乘法前交换最后两个维度,即转置前的 B 形状是 + `[batch..., n, k]`; +- 两个矩阵的 k 维必须相等; +- 输出形状 = 批量维(A、B 的批量维双向广播)+ `[m, n]`。 + +**ONNX 标准参考**: + +**⚠️ 最容易写反的地方:m/k 的取值** + +| transA | A 转置前形状 | m | k | +| --- | --- | --- | --- | +| false | `[..., m, k]` | `dimsA[rankA-2]` | `dimsA[rankA-1]` | +| true | `[..., k, m]` | `dimsA[rankA-1]` | `dimsA[rankA-2]` | + +| transB | B 转置前形状 | n | k | +| --- | --- | --- | --- | +| false | `[..., k, n]` | `dimsB[rankB-1]` | `dimsB[rankB-2]` | +| true | `[..., n, k]` | `dimsB[rankB-2]` | `dimsB[rankB-1]` | + +直观记忆:**不转置时,m/k 分别来自倒数第二维/最后一维;转置时正好对调**。 + +### 7.2 实现 + +```cpp +optional> MatmulObj::inferShape(const TensorVec &inputs) +{ + // =================================== 作业 =================================== + const auto A = inputs[0], B = inputs[1]; + auto dimsA = A->getDims(); + auto dimsB = B->getDims(); + auto rankA = A->getRank(); + auto rankB = B->getRank(); + IT_ASSERT(rankA >= 2 && rankB >= 2); + + // 解析出 m、n、k(见上表,trans 时 m/k 的来源对调) + m = transA ? dimsA[rankA - 1] : dimsA[rankA - 2]; + k = transA ? dimsA[rankA - 2] : dimsA[rankA - 1]; + n = transB ? dimsB[rankB - 2] : dimsB[rankB - 1]; + IT_ASSERT(k == (transB ? dimsB[rankB - 1] : dimsB[rankB - 2]), + "Matmul: inner dimensions mismatch"); + + // 批量维度做双向广播(复用作业六的 infer_broadcast) + Shape batchA(dimsA.begin(), dimsA.end() - 2); + Shape batchB(dimsB.begin(), dimsB.end() - 2); + auto batch = infer_broadcast(batchA, batchB); + + // 拼接得到输出形状 + Shape dimsC = batch; + dimsC.emplace_back(m); + dimsC.emplace_back(n); + return {{dimsC}}; + // =================================== 作业 =================================== +} +``` + +**解释:** + +- `m`、`n`、`k` 是 `MatmulObj` 的成员变量(头文件里声明了),这里顺便赋值, + 供 `toString()` 打印使用。 +- 批量维是 `dimsA` 去掉最后两维的部分;两个批量维形状不同时按广播规则对齐。 + 测例 `{1,2,3,5} × {1,1,5,2}` → 批量 `{1,2} 广播 {1,1}` → `{1,2}`, + 输出 `{1,2,3,2}`,与期望一致。 +- 本作业依赖作业六(`infer_broadcast`),需要 + `#include "utils/operator_utils.h"`。 + +--- + +## 作业八:简单图优化规则实现(⭐⭐⭐⭐) + +**对应测例**:`test_graph` +**涉及文件**:`src/core/graph.cc`(`optimize`)、`src/core/operator.cc`(被调用的接口) + +### 8.1 题目要求 + +1. **去除冗余算子**:两个相邻 transpose 互为逆操作(permute 互逆)时,两者可以 + 一起删除,中间结果直接跳过; +2. **合并算子**:matmul 的输入若来自"仅交换最后两维"的 transpose,可以把它 + 融合进 matmul 的 `transA`/`transB` 属性。 + +### 8.2 先看测例想要什么(test_graph 的图) + +```text +i1 --T{0,1,3,2}--> t1 --T{0,1,3,2}--> t2 ─┐ + ├──> Matmul ──> o +i2 --T{0,1,3,2}--> t3 ─────────────────────┘ +``` + +测例的断言: + +- 优化后只有 **1 个算子**(MatMul,`OpType::MatMul == 7`); +- 只剩 **3 个 tensor**(i1、i2、o); +- matmul 输入为 i1、i2(guid 分别为 2、3,因为 graph 占 guid 1); +- `transA == false`、`transB == true`。 + +即期望结果:`Matmul(i1, i2, o, transA=false, transB=true)`。 + +**注意顺序**:必须先执行规则 1(消除 `t1/t2` 之间的互逆对),再执行规则 2。 +如果反过来,规则 2 会先把 `t2`(来自 t1 的 transpose)融合成 `transA=true`, +之后规则 1 虽然删掉了互逆对,但 `transA` 仍残留为 true,导致断言失败。 + +### 8.3 完整实现 + +```cpp +void GraphObj::optimize() +{ + // =================================== 作业 =================================== + // 辅助函数 1:判断两个 permute 是否互为逆置换(perm1 ∘ perm2 = identity) + auto isInverse = [](const std::vector &p1, const std::vector &p2) { + if (p1.size() != p2.size()) + return false; + for (size_t i = 0; i < p1.size(); ++i) + if (p2[(size_t)p1[i]] != (int)i) + return false; + return true; + }; + // 辅助函数 2:判断 permute 是否只交换最后两个维度(如 {0,1,3,2}) + auto isSwapLastTwo = [](const std::vector &perm) { + size_t r = perm.size(); + if (r < 2) + return false; + for (size_t i = 0; i < r; ++i) + { + int expect = (int)i; // 默认保持原位 + if (i == r - 2) // 倒数第二维映射到最后一位 + expect = (int)(r - 1); + else if (i == r - 1) // 最后一位映射到倒数第二维 + expect = (int)(r - 2); + if (perm[i] != expect) + return false; + } + return true; + }; + + // ==================== 规则 1:去除冗余的互逆 transpose 对 ==================== + bool changed = true; + while (changed) + { + changed = false; + for (auto &op : ops) + { + if (op->getOpType() != OpType::Transpose) + continue; + auto trans = as(op); // mid -> out + auto mid = trans->getInputs(0); + auto pred = mid->getSource(); // input -> mid + if (!pred || pred->getOpType() != OpType::Transpose) + continue; + // 安全条件:mid 只被 trans 这一个算子消费,否则不能删除 pred + if (mid->getTargets().size() != 1) + continue; + if (!isInverse(as(pred)->getPermute(), + trans->getPermute())) + continue; + + auto input = pred->getInputs(0); + auto out = trans->getOutput(0); + // 先记住 out 是否有消费者(决定它是否还能删除) + bool outHasConsumers = !out->getTargets().empty(); + // 把 out 的所有消费者(后继算子)的输入从 out 换成 input + for (auto &succ : out->getTargets()) + { + succ->replaceInput(out, input); + out->removeTarget(succ); + input->addTarget(succ); + succ->removePredecessors(trans); + trans->removeSuccessors(succ); + } + input->removeTarget(pred); + mid->removeTarget(trans); + trans->removePredecessors(pred); + pred->removeSuccessors(trans); + mid->setSource(nullptr); + out->setSource(input->getSource()); + // 从图中移除冗余的算子和中间 tensor + removeOperator(trans); + removeOperator(pred); + removeTensor(mid); + // out 原本有消费者且已全部改接到 input,可以一并删除; + // 若 out 是图的输出(本来就没有消费者),则予以保留。 + if (outHasConsumers) + removeTensor(out); + changed = true; + break; // 重新扫描 + } + } + + // ============ 规则 2:把输入上的 transpose 融合进 matmul 的 trans 属性 ============ + for (auto &op : ops) + { + if (op->getOpType() != OpType::MatMul) + continue; + auto matmul = as(op); + for (int i = 0; i < 2; ++i) + { + auto in = matmul->getInputs(i); + auto src = in->getSource(); + if (!src || src->getOpType() != OpType::Transpose) + continue; + // 安全条件:该 transpose 只被 matmul 一个算子消费 + if (in->getTargets().size() != 1) + continue; + if (!isSwapLastTwo(as(src)->getPermute())) + continue; + auto trans = as(src); + auto newIn = trans->getInputs(0); + if (i == 0) + matmul->setTransA(true); + else + matmul->setTransB(true); + matmul->replaceInput(in, newIn); + in->removeTarget(matmul); + newIn->addTarget(matmul); + newIn->removeTarget(trans); + matmul->removePredecessors(trans); + trans->removeSuccessors(matmul); + in->setSource(nullptr); + removeOperator(trans); + removeTensor(in); + } + } + // =================================== 作业 =================================== +} +``` + +### 8.4 逐段解释 + +**辅助函数** + +- `isInverse(p1, p2)`:判断 `p1` 和 `p2` 是否互逆。数学上两个置换互逆当且仅当 + 它们的复合是恒等置换,即对每个维度 i,`p2[p1[i]] == i`。 + `{0,1,3,2}` 是自逆的(交换两个维度两次等于没换),所以测例中的 + `T{0,1,3,2} → T{0,1,3,2}` 是一对互逆 transpose。 +- `isSwapLastTwo(perm)`:判断 permute 是否只交换最后两个维度——前 `r-2` 个维度 + 保持原位,第 `r-2` 维映射到 `r-1`,第 `r-1` 维映射到 `r-2`。 + +**规则 1 的删除流程** + +以 `pred(input -> mid)`、`trans(mid -> out)` 互逆为例。**删除前的图结构**如下 +(实线为数据流,括号内是每个 tensor 的 `source` / `targets`): + +```text +[input] ──(pred)──► [mid] ──(trans)──► [out] ──────────► [succ1] [succ2] + source:null source:pred source:trans (succ 是 out 的消费者) + targets:[pred] targets:[trans] targets:[succ1,succ2] +``` + +op 侧还有 `pred.succ=[trans]`、`trans.pred=[pred]`、`succ1.pred=[trans]` 等 +前驱/后继关系,与 tensor 侧一一对应。整个删除分三步: + +**第 1 步:数据流改道**(循环遍历 `out` 的每个消费者 `succ`) + +```text + ┌──────────── 旧路径(即将废弃)────────────┐ + ▼ │ +[input] ──(pred)──► [mid] ──(trans)──► [out] ──► [succ1] [succ2] + └────────────── 新路径(replaceInput)─────────► ▲ + │ +``` + +- `succ->replaceInput(out, input)`:只改 succ 的输入列表(数据流改道); +- `out->removeTarget(succ)` / `input->addTarget(succ)`:同步 tensor 侧 `targets`; +- `succ->removePredecessors(trans)` / `trans->removeSuccessors(succ)`:同步 op 侧关系。 + +**第 2 步:清理与被删算子相关的残留关系** + +| 操作 | 作用 | +| --- | --- | +| `input->removeTarget(pred)` | input 的消费者列表移除 pred | +| `mid->removeTarget(trans)` | mid 的消费者列表移除 trans | +| `trans->removePredecessors(pred)` | trans 的前驱移除 pred | +| `pred->removeSuccessors(trans)` | pred 的后继移除 trans | +| `mid->setSource(nullptr)` | mid 的生产者(pred)已删,置空 | +| `out->setSource(input->getSource())` | out 的生产者改为 input 的生产者 | + +**第 3 步:从图中移除冗余对象**(`removeOperator(trans/pred)`、`removeTensor(mid)`), +**删除后的图结构**: + +```text +[input] ──────────────────────────────────► [succ1] [succ2] + source:null(图输入不变) targets:[succ1,succ2] +``` + +几点说明: + +1. 中间 tensor `mid`(t1)一定可以删;`out`(t2)只有当它**原来有消费者** + (已被重连到 input)时才删——如果 `out` 是图的输出(本来就没有消费者), + 必须保留,否则图的输出会丢失。 +2. 删除前必须用 `mid->getTargets().size() == 1` 确认 `mid` 只被 `trans` 消费, + 否则 `pred` 不能删。 +3. `source/targets`、`predecessors/successors` 存的是 `weak_ptr`,**任何一侧 + 残留指向被删算子的引用都会变成失效的 weak_ptr**,打印图时直接段错误或抛 + `bad_weak_ptr`——这正是第 1、2 步必须"同步维护双向关系"的原因。 + +`while (changed)` 循环保证链式冗余(如三个以上的 transpose 链)也能被消除: +每轮删除一对后重新扫描,直到找不到为止。 + +**规则 2 的融合流程** + +matmul 的两个输入分别处理:若输入 `in` 的 `source` 是 transpose 且 +`isSwapLastTwo(perm)` 成立,则: + +**融合的本质是"语义等价改写"**:matmul 的 `transA`/`transB` 属性语义就是 +"参与乘法前交换最后两个维度",与"只交换最后两维的 transpose"完全等价: + +```text +Matmul( T(A), B ) ≡ Matmul( A, B, transA=true ) +Matmul( A, T(B) ) ≡ Matmul( A, B, transB=true ) +``` + +**融合前的图结构**(以测例图的 B 输入为例,实线为数据流,括号内为 +`source` / `targets`): + +```text +[i2] ──(T10: perm={0,1,3,2})──► [t3] ──────► Matmul(A=i1, B=t3) ──► [o] + source:null source:T10 source:Matmul + targets:[T10] targets:[Matmul] targets:[] +``` + +**三个前置条件(缺一不可)**: + +1. `in->getSource()` 存在且是 Transpose——输入确实由 transpose 产生; +2. `in->getTargets().size() == 1`——该 transpose 只被本 matmul 消费, + 否则删除 transpose 会让其他消费者输入悬空; +3. `isSwapLastTwo(perm)`——`transA`/`transB` 只能表达"交换最后两维" + 这一种转置,其他 permute 模式无法等价表达。 + +**融合的四个动作**(设置属性 → 数据流改道 → 同步关系 → 删除): + +```cpp +matmul->setTransB(true); // ① 属性置位(处理 A 时用 setTransA) +matmul->replaceInput(t3, i2); // ② 数据流改道 +removeOperator(trans); // ③ 删除 transpose +removeTensor(t3); // ④ 删除中间 tensor +``` + +```text + ┌──────────────── 旧路径(T10 已删除)────────────┐ + ▼ │ +[i2] ──(T10)──► [t3] ──────► Matmul(A=i1, B=t3) ──► [o] + └──────────── 新路径(replaceInput)────────────► ▲ +``` + +① 属性置位后,matmul 计算时自行交换 `i2` 的最后两维——原来由 T10 做的事 +改由 matmul 内部完成,`m/n/k` 与输出形状均不变。 + +**同步维护双向关系**(与规则 1 相同的清单,防止残留失效的 `weak_ptr`): + +| 操作 | 作用 | +| --- | --- | +| `in->removeTarget(matmul)` | t3 的消费者列表移除 matmul | +| `newIn->addTarget(matmul)` | i2 的消费者列表新增 matmul | +| `newIn->removeTarget(trans)` | i2 的消费者列表移除 T10(**易漏!**) | +| `matmul->removePredecessors(trans)` | matmul 的前驱移除 T10 | +| `trans->removeSuccessors(matmul)` | T10 的后继移除 matmul | +| `in->setSource(nullptr)` | t3 的生产者清空(随后删除) | + +**融合后的图结构**: + +```text +[i2] ──────────────────────────────► Matmul(A=i1, B=i2, transB=true) ──► [o] + source:null(图输入不变) source:Matmul + targets:[Matmul] targets:[] +``` + +**为什么必须放在规则 1 之后**:若先做规则 2,matmul 的 A 输入 `t2` 的 source +是 `T9`(互逆对的一员),会被误融合成 `transA=true`;随后规则 1 删掉互逆对时 +`transA` 残留为 true,而期望值是 `false`。先做规则 1 后,matmul 的 A 直接变成 +图输入 `i1`(无 source 可融合),B 只剩独立的 T10 可融合, +`transA=false, transB=true` 才正确。 + +**为什么规则 2 不需要 while 循环**:融合发生在 matmul 的输入上,每融合一个就 +删除一个 transpose,不会产生新的可融合模式,单遍遍历即可。 + +### 8.5 测例逐步演算 + +初始图(guid 顺序:graph=1,i1=2,i2=3,t1=4,t2=5,t3=6,o=7): + +```text +T8: i1 -> t1, perm={0,1,3,2} +T9: t1 -> t2, perm={0,1,3,2} +T10: i2 -> t3, perm={0,1,3,2} +M11: Matmul(t2, t3) -> o +``` + +- **规则 1**:找到 `T9`(trans),`t1` 的 source 是 `T8`(pred),两者 permute + 相同故互逆,`t1` 只被 T9 消费 → 删除 T8、T9。`t2` 的唯一消费者 M11 的输入 + 从 `t2` 改为 `i1`。删除中间 tensor `t1`、`t2`。图变为: + ```text + T10: i2 -> t3 + M11: Matmul(i1, t3) -> o + ``` + 第二轮扫描:`t3` 的 source 是 T10,而 `i2` 没有 source(图输入), + `pred` 不存在 → 无冗余对,退出循环。 +- **规则 2**:M11 的输入 A=`i1`(无 source,跳过);输入 B=`t3`,其 source 是 + T10 且 perm `{0,1,3,2}` 是 swap-last-two → `setTransB(true)`,输入换成 `i2`, + 删除 T10 和 `t3`。 +- **结果**:`Matmul(i1, i2, o, false, true)`,1 个算子、3 个 tensor,全部断言通过。 + +--- + +## 9. 自测与常见问题 + +### 9.1 如何自测 + +```bash +make build # 编译 +make test-cpp # 跑全部 11 个测例 +``` + +也可以单独跑某个测例(定位问题更快): + +```bash +cd build/Release && ./test_allocator # 或 ./test_graph / ./test_matmul ... +``` + +用 Debug 模式(`make TYPE=Debug build`)编译可以获得更清晰的调试信息; +用 gdb 加 `catch throw` 可以捕获测例里抛出的异常。 + +### 9.2 常见问题排查清单 + +| 现象 | 原因 | 对策 | +| --- | --- | --- | +| 多个测例抛空描述异常(`bad_alloc`) | matmul 里 m/n/k 推导写反,`Shape` 构造出巨大量 | 对照 7.1 的表格逐项检查 trans 与 m/k 的对应关系 | +| `testAllocWithEndFreeBlock` 的 offsetD != offsetC | alloc 缺少"末尾空闲块扩展"逻辑 | 补上 1.3 中的末尾扩展分支 | +| 二次 `alloc` 断言 `this->ptr == nullptr` 失败 | dataMalloc 边 alloc 边调 `getPtr()` | 改为两阶段:先规划偏移量,最后统一 `getPtr()` 绑 Blob | +| nativecpu 测例数据算错(尤其是 concat) | 算子的输出复用了本算子输入的内存 | 调整顺序:先分配输出,再回收输入 | +| `test_graph` 段错误 / `bad_weak_ptr` | 删除算子/重连时没有同步维护 `targets`、`predecessors/successors` | 按 8.4 的清单补齐双向关系维护 | +| `test_graph` 的 `transA` 断言失败 | 规则 1、规则 2 执行顺序颠倒 | 必须先消除互逆对,再融合 matmul | +| cast 测例的 `getOutDType()` 不对 | `inferDataType` 没重写(返回了输入类型) | 返回 `{getOutputDataType()}` | +| 编译报 `std::reverse` 等未定义 | 缺头文件 | `operator_utils.cc` 需要 `#include ` | + +### 9.3 进阶思考 + +- **分配策略**:first-fit 之外还有 best-fit(找最接近 size 的块)、worst-fit 等, + 各有优劣;真实框架(如 InfiniTensor 的 CUDA 后端)还会考虑对齐、跨设备等。 +- **内存复用**:`dataMalloc` 里的引用计数复用是简化版的"生命周期分析", + 真实编译器会对整个图做全局的活跃区间(liveness)分析再统一着色。 +- **图优化**:规则 2 只是"算子融合"的一个例子,工业级实现还有常量折叠、 + 算子重排、kernel 融合(fuse)、死代码消除等。 diff --git a/include/core/allocator.h b/include/core/allocator.h index 002601d2..59a84ec2 100644 --- a/include/core/allocator.h +++ b/include/core/allocator.h @@ -27,7 +27,14 @@ namespace infini { // TODO:可能需要设计一个数据结构来存储free block,以便于管理和合并 // HINT: 可以使用一个 map 来存储 free block,key 为 block 的起始/结尾地址,value 为 block 的大小 // =================================== 作业 =================================== - + // 踩坑(详见 docs/作业完成说明.md 作业一): + // - alloc/free 只是"模拟"分配(函数开头有 IT_ASSERT(ptr == nullptr)), + // 真实内存必须在全部规划完成之后通过 getPtr() 一次性分配; + // - alloc 需要支持"末尾空闲块扩展"(地址最大的空闲块延伸到 peak 时, + // 可以从该块起始地址继续向外扩展),否则 test_allocator 的 + // testAllocWithEndFreeBlock 无法通过; + // - free 时记得与前一块、后一块做合并(先向前、再向后),避免碎片。 + std::map freeBlocks; public: Allocator(Runtime runtime); diff --git a/src/core/allocator.cc b/src/core/allocator.cc index ff593aef..18c75554 100644 --- a/src/core/allocator.cc +++ b/src/core/allocator.cc @@ -1,4 +1,7 @@ #include "core/allocator.h" +#include +#include +#include #include namespace infini @@ -32,8 +35,42 @@ namespace infini // =================================== 作业 =================================== // TODO: 设计一个算法来分配内存,返回起始地址偏移量 // =================================== 作业 =================================== + // - 推荐 first-fit:从低地址开始扫描 free list,找到第一个足够大的块; + // - 块比需要的大时,把剩余部分切回 free list; + // - 找不到合适块时,在 peak 处追加;若地址最大的空闲块恰好延伸到 + // peak(first + second == peak),从它的起始地址向外扩展(见头文件踩坑); + // - 分配成功记得更新 used、peak(peak = max(peak, used))。 + for(auto& it : freeBlocks) { + if(it.second >= size) { + size_t addr = it.first; + if(it.second > size) { + freeBlocks[addr + size] = it.second - size; + } + freeBlocks.erase(it.first); + used += size; + peak = std::max(peak, used); + return addr; + } + } + // 如果地址最大的空闲块紧贴着内存末尾 + // 为了复用内存,就从该内存块开始向后拓展 + if(freeBlocks.empty() != true) { + auto last = std::prev(freeBlocks.end()); + if(last->first + last->second == peak) { + last->second += size; + size_t addr = last->first; + used += size; + peak = addr + size; + freeBlocks.erase(last); + return addr; + } + } + + size_t addr = peak; + used += size; + peak += size; - return 0; + return addr; } void Allocator::free(size_t addr, size_t size) @@ -44,6 +81,25 @@ namespace infini // =================================== 作业 =================================== // TODO: 设计一个算法来回收内存 // =================================== 作业 =================================== + // - 把 [addr, addr + size) 放回 free list(used 相应减少); + // - 先与前一块合并(prev->first + prev->second == addr), + // 再与后一块合并(it->first + it->second == next->first),顺序不能反。 + auto it = freeBlocks.emplace(addr, size).first; + used -= size; + + if(it != freeBlocks.begin()) { + auto prev = std::prev(it); + if(prev->first + prev->second == addr) { + prev->second += size; + freeBlocks.erase(it); + it = prev; + } + } + auto next = std::next(it); + if(next != freeBlocks.end() && it->first + it->second == next->first) { + it->second += next->second; + freeBlocks.erase(next); + } } void *Allocator::getPtr() diff --git a/src/core/graph.cc b/src/core/graph.cc index 3a906370..54a1af1d 100644 --- a/src/core/graph.cc +++ b/src/core/graph.cc @@ -1,7 +1,17 @@ #include "core/graph.h" +#include "core/blob.h" +#include "core/ref.h" +#include "core/runtime.h" +#include "operators/matmul.h" +#include "operators/transpose.h" #include +#include +#include +#include #include #include +#include +#include namespace infini { @@ -106,6 +116,136 @@ namespace infini // 1. 去除冗余的算子(例如,两个相邻的算子都是 transpose 算子,且做的是相反的操作,可以将其全部删除) // 2. 合并算子(例如,矩阵乘算子中含有属性transA、transB,如果其输入存在transpose,且对最后两个维度做交换,就可以将transpose融入到矩阵乘算子的属性中去) // =================================== 作业 =================================== + // 踩坑(详见 docs/作业完成说明.md 作业八): + // - 执行顺序:必须先做规则 1(消除互逆 transpose 对),再做规则 2 + // (融合进 matmul),否则本应被抵消的 transpose 会被错误融合成 transA; + // - 删除算子/重连输入时,必须同步维护双向关系(tensor 的 source/targets + // 与 op 的 predecessors/successors),否则会残留失效的 weak_ptr, + // 打印图时崩溃(段错误 / bad_weak_ptr); + // - 两个 permute 互逆 ⇔ 复合为恒等置换:p2[p1[i]] == i; + // - 只交换最后两维 ⇔ 前 rank-2 维不动,最后两维互换; + // - 删除中间 tensor 前检查它是否还被其他算子消费(targets 非空则保留)。 + auto isInverse = [](const std::vector &p1, const std::vector &p2) { + if(p1.size() != p2.size()) { + return false; + } + for(size_t i = 0; i < p1.size(); i++) { + if(p2[(size_t)p1[i]] != (int)i) { + return false; + } + } + return true; + }; + auto isSwapLastTwo = [](const std::vector &perm) { + size_t r = perm.size(); + if (r < 2) + return false; + for (size_t i = 0; i < r; ++i) + { + int expect = (int)i; // 默认保持原位 + if (i == r - 2) // 倒数第二维映射到最后一位 + expect = (int)(r - 1); + else if (i == r - 1) // 最后一位映射到倒数第二维 + expect = (int)(r - 2); + if (perm[i] != expect) + return false; + } + return true; + }; + // ==================== 规则 1:去除冗余的互逆 transpose 对 ==================== + bool changed = true; + while (changed){ + changed = false; + for (auto &op : ops){ + if (op->getOpType() != OpType::Transpose) { + continue; + } + auto trans = as(op); // mid -> out + auto mid = trans->getInputs(0); + auto pred = mid->getSource(); // input -> mid 获取mid的生产者 + if (!pred || pred->getOpType() != OpType::Transpose){ + continue; + } + // 安全条件:mid 只被 trans 这一个算子消费,否则不能删除 pred + if (mid->getTargets().size() != 1) { + continue; + } + // 如果两个permute不互为逆置换,continue + if (!isInverse(as(pred)->getPermute(), + trans->getPermute())) { + continue; + } + + auto input = pred->getInputs(0); + auto out = trans->getOutput(0); + // 先记住 out 是否有消费者(决定它是否还能删除) + bool outHasConsumers = !out->getTargets().empty(); + // 把 out 的所有消费者(后继算子)的输入从 out 换成 input + for (auto &succ : out->getTargets()) { + succ->replaceInput(out, input); + out->removeTarget(succ); + input->addTarget(succ); + succ->removePredecessors(trans); + trans->removeSuccessors(succ); + } + input->removeTarget(pred); + mid->removeTarget(trans); + trans->removePredecessors(pred); + pred->removeSuccessors(trans); + + removeOperator(trans); + removeOperator(pred); + removeTensor(mid); + + // out 原本有消费者且已全部改接到 input,可以一并删除; + // 若 out 是图的输出(本来就没有消费者),则予以保留。 + if (outHasConsumers) { + removeTensor(out); + } + changed = true; + break; // 重新扫描 + } + } + // ============ 规则 2:把输入上的 transpose 融合进 matmul 的 trans 属性 ============ + for (auto &op : ops) + { + if (op->getOpType() != OpType::MatMul) { + continue; + } + auto matmul = as(op); + for (int i = 0; i < 2; ++i) + { + auto in = matmul->getInputs(i); + auto src = in->getSource(); + if (!src || src->getOpType() != OpType::Transpose) { + continue; + } + // 安全条件:该 transpose 只被 matmul 一个算子消费 + if (in->getTargets().size() != 1) { + continue; + } + if (!isSwapLastTwo(as(src)->getPermute())) { + continue; + } + auto trans = as(src); + auto newIn = trans->getInputs(0); + if (i == 0) { + matmul->setTransA(true); + } + else{ + matmul->setTransB(true); + } + matmul->replaceInput(in, newIn); + in->removeTarget(matmul); + newIn->addTarget(matmul); + newIn->removeTarget(trans); + matmul->removePredecessors(trans); + trans->removeSuccessors(matmul); + in->setSource(nullptr); + removeOperator(trans); + removeTensor(in); + } + } } Tensor GraphObj::getTensor(int fuid) const @@ -152,7 +292,57 @@ namespace infini // TODO:利用 allocator 给计算图分配内存 // HINT: 获取分配好的内存指针后,可以调用 tensor 的 setDataBlob 函数给 tensor 绑定内存 // =================================== 作业 =================================== + // 踩坑(详见 docs/作业完成说明.md 作业一 step3): + // - 必须分两阶段:先对每个 tensor 做"模拟"分配(alloc/free,只算偏移量), + // 最后统一调用 allocator.getPtr() 拿真实内存基址再绑定 Blob。 + // 不能边 alloc 边 getPtr()(alloc 开头有 IT_ASSERT(ptr == nullptr)); + // - 建议用引用计数做内存复用:记录每个 tensor 剩余消费者个数(targets 数), + // 某个 op 规划完后其输入计数减一,归零即 free,供后面算子复用; + // - 每个 tensor 只分配一次(用一个集合记录已分配的 tensor,避免重复分配); + // - 重要:算子的"输出"必须先于"输入回收"来分配, + // 否则输出会复用本算子输入的内存,而 kernel 执行时边读输入边写输出, + // 两者重叠会导致结果错误; + // - 绑定方式:make_ref(runtime, (char *)base + offset)。 + std::map refCount; // 每个 Tensor 的消费者总数 + std::map offsetMap; // 每个 Tensor 的偏移 + std::unordered_set allocated; // 已分配的 Tensor + for(auto &t: tensors) { + refCount[t] = t->getTargets().size(); + } + // 阶段一:模拟分配,规划每个 tensor 的偏移量 + for(auto& op : ops) { + // 为算子的输入分配内存(每个 tensor 只规划一次) + for(auto& t : op->getInputs()) { + if(allocated.find(t) == allocated.end()) { + offsetMap[t] = allocator.alloc(t->getBytes()); + allocated.insert(t); + } + } + + // 为算子的输出分配内存(先于输入回收,避免与输入重叠) + for(auto& t : op->getOutputs()) { + if(allocated.find(t) == allocated.end()) { + offsetMap[t] = allocator.alloc(t->getBytes()); + allocated.insert(t); + } + } + // 本算子的输入在本算子执行完后不再被它使用: + // 引用计数减一,归零的输入(最后一个消费者已完成)立即回收, + // 供后面的算子复用,从而降低峰值内存。 + for(auto& t : op->getInputs()) { + --refCount[t]; + if(refCount[t] == 0) { + allocator.free(offsetMap[t], t->getBytes()); + } + } + } + // 阶段二:真正分配内存,并按偏移量给每个 tensor 绑定 Blob + auto base = allocator.getPtr(); + for(auto &[t, offset] : offsetMap) { + t->setDataBlob(make_ref(runtime, (char*)base + offset)); + } + allocator.info(); } diff --git a/src/operators/concat.cc b/src/operators/concat.cc index d1963308..58023f16 100644 --- a/src/operators/concat.cc +++ b/src/operators/concat.cc @@ -1,5 +1,6 @@ #include "operators/concat.h" #include "utils/operator_utils.h" +#include namespace infini { ConcatObj::ConcatObj(GraphObj *graph, TensorVec inputs, Tensor output, int _dim) @@ -17,6 +18,25 @@ optional> ConcatObj::inferShape(const TensorVec &inputs) { // TODO:修改 dims,返回正确的 concat 后的 shape // REF: https://onnx.ai/onnx/operators/onnx__Concat.html#concat-13 // =================================== 作业 =================================== + // 除 dim 维外其它维度保持不变,dim 维大小为所有输入在该维大小之和; + // 构造函数已把 dim 归一化到 [0, rank),实现里再用 get_real_axis(dim, rank) + // 防御一次负轴更稳妥; + // 注意先 dims[dim] = 0 再累加,且所有输入的 rank 必须一致。 + // 踩坑:除 dim 维外,其它维度也必须逐一断言相等(ONNX 要求所有输入除 + // concat 维外形状相同),只检查 rank 是不够的。 + // 注意:上面 auto rank 推导出来的类型是 size_t 即unsigned long + size_t concatDim = get_real_axis(dim, rank); + dims[dim] = 0; + for(auto& input : inputs) { + IT_ASSERT(input->getRank() == rank); + for (size_t i = 0; i < rank; ++i) { + if (i != concatDim) { // 除拼接维外,其余维度必须相同 + IT_ASSERT(input->getDims()[i] == dims[i], + "Concat: mismatch on dim " + std::to_string(i)); + } + } + dims[concatDim] += (input->getDims())[concatDim]; + } return {{dims}}; } diff --git a/src/operators/matmul.cc b/src/operators/matmul.cc index 7a16ca27..875d0373 100644 --- a/src/operators/matmul.cc +++ b/src/operators/matmul.cc @@ -1,4 +1,7 @@ #include "operators/matmul.h" +#include "core/common.h" +#include "core/tensor.h" +#include "utils/operator_utils.h" namespace infini { @@ -27,7 +30,39 @@ namespace infini // TODO:返回经过 matmul 操作后的 shape // REF: https://github.com/onnx/onnx/blob/main/docs/Operators.md#gemm // =================================== 作业 =================================== - return std::nullopt; + // 踩坑(详见 docs/作业完成说明.md 作业七): + // - m/n/k 的取值最容易写反!记 A 转置前为 [..., m, k], + // B 转置前为 [..., k, n]: + // transA=false:m=dimsA[rankA-2],k=dimsA[rankA-1] + // transA=true :m=dimsA[rankA-1],k=dimsA[rankA-2] + // transB=false:n=dimsB[rankB-1],k=dimsB[rankB-2] + // transB=true :n=dimsB[rankB-2],k=dimsB[rankB-1] + // (trans 时 m/k 的来源正好对调) + // - 校验两边的 k 相等; + // - 输出 = 批量维(A/B 去掉最后两维后做双向广播,复用 + // utils/operator_utils.h 的 infer_broadcast)拼接 [m, n]; + // - m/n/k 是成员变量,这里顺便赋值,供 toString() 使用。 + const auto A = inputs[0]; + const auto B = inputs[1]; + auto dimsA = A->getDims(); + auto dimsB = B->getDims(); + auto rankA = A->getRank(); + auto rankB = B->getRank(); + + m = transA ? dimsA[rankA - 1] : dimsA[rankA - 2]; + k = transA ? dimsA[rankA - 2] : dimsA[rankA - 1]; + n = transB ? dimsB[rankB - 2] : dimsB[rankB - 1]; + IT_ASSERT(k == (transB ? dimsB[rankB - 1] : dimsB[rankB - 2]), + "Matmul: inner dimensions mismatch"); + + Shape batchA(dimsA.begin(), dimsA.end() - 2); + Shape batchB(dimsB.begin(), dimsB.end() - 2); + auto batch = infer_broadcast(batchA, batchB); + + auto dimsC = batch; + dimsC.emplace_back(m); + dimsC.emplace_back(n); + return {{dimsC}}; } } // namespace infini \ No newline at end of file diff --git a/src/operators/transpose.cc b/src/operators/transpose.cc index faab2b69..f7947fa9 100644 --- a/src/operators/transpose.cc +++ b/src/operators/transpose.cc @@ -33,8 +33,13 @@ namespace infini // TODO:修改 output_dim,返回正确的 transpose 后的 shape // REF: https://onnx.ai/onnx/operators/onnx__Transpose.html#transpose-21 // =================================== 作业 =================================== - - return std::nullopt; + // permute 的含义是"输出的第 i 维来自输入的第 permute[i] 维", + // 即 output_dim[i] = input_dim[transposePermute[i]]; + // 返回类型是 optional>,返回 {{output_dim}} 即可。 + for(int i = 0; i < rank; i++) { + output_dim[i] = input_dim[transposePermute[i]]; + } + return {{output_dim}}; } std::string TransposeObj::toString() const diff --git a/src/operators/unary.cc b/src/operators/unary.cc index 3daad361..12d581c0 100644 --- a/src/operators/unary.cc +++ b/src/operators/unary.cc @@ -39,7 +39,9 @@ namespace infini // TODO:返回经过 clip 操作后的 shape // REF: https://onnx.ai/onnx/operators/onnx__Clip.html#clip-13 // =================================== 作业 =================================== - return std::nullopt; + // clip 按元素截断数值,不改变形状,输出形状与输入一致; + // 返回类型是 optional>,返回 {{inputs[0]->getDims()}}。 + return {{inputs[0]->getDims()}}; } std::string ClipObj::toString() const @@ -66,7 +68,11 @@ namespace infini // REF_FILE: src/core/operator.cc // REF: https://onnx.ai/onnx/operators/onnx__Cast.html#cast-21 // =================================== 作业 =================================== - return {}; + // cast 只有一个输出,其数据类型由 castType 决定; + // 现成的 getOutputDataType() 已实现 CastType -> DataType 的映射, + // 这里直接 return {getOutputDataType()} 即可(否则会继承默认实现 + // "输出类型 = 输入类型",导致测例里 getOutDType() 断言失败)。 + return {getOutputDataType()}; } optional> CastObj::inferShape(const TensorVec &inputs) @@ -75,7 +81,8 @@ namespace infini // TODO:返回经过 cast 操作后的 shape // REF: https://onnx.ai/onnx/operators/onnx__Cast.html#cast-21 // =================================== 作业 =================================== - return std::nullopt; + // cast 只改变数据类型,形状与输入一致,返回 {{inputs[0]->getDims()}}。 + return {{inputs[0]->getDims()}}; } std::string CastObj::toString() const diff --git a/src/utils/operator_utils.cc b/src/utils/operator_utils.cc index edbd2c82..29846805 100644 --- a/src/utils/operator_utils.cc +++ b/src/utils/operator_utils.cc @@ -1,5 +1,7 @@ #include "utils/operator_utils.h" #include "core/runtime.h" +#include "core/tensor.h" +#include namespace infini { @@ -9,8 +11,24 @@ Shape infer_broadcast(const Shape &A, const Shape &B) { // TODO:对 A 和 B 进行双向广播,返回广播后的形状。 // REF: https://github.com/onnx/onnx/blob/main/docs/Broadcasting.md // =================================== 作业 =================================== - - return {}; + // - 从后往前对齐两个 shape(可用反向迭代器 rbegin/rend), + // 较短的 shape 缺失的维度视为 1; + // - 每维规则:两值相等、或其一为 1 时可广播,结果取较大者; + // 否则断言失败; + // - 因为是从后往前生成的,记得 std::reverse 回来 + // (需要 #include )。 + Shape output_shape; + auto itA = A.rbegin(); + auto itB = B.rbegin(); + while(itA != A.rend() || itB != B.rend()) { + int dimA = (itA != A.rend()) ? *itA++ : 1; + int dimB = (itB != B.rend()) ? *itB++ : 1; + IT_ASSERT(dimA == dimB || dimA == 1 || dimB == 1, + "Broadcast failed: " + vecToString(A) + " vs " + vecToString(B)); + output_shape.emplace_back(std::max(dimA, dimB)); + } + std::reverse(output_shape.begin(), output_shape.end()); + return output_shape; } int get_real_axis(const int &axis, const int &rank) { From 14c0b8758d504848824c811fbf9c5cbb92e3fe24 Mon Sep 17 00:00:00 2001 From: NiseAzaka Date: Sun, 16 Aug 2026 23:41:15 +0800 Subject: [PATCH 2/4] init git submodules automatically on build Add a submodules prerequisite to the build target so that 3rd-party/googletest and other git submodules are fetched automatically on first build, avoiding the empty-directory CMake error after a fresh clone. Update the deployment docs with submodule initialization instructions. --- Makefile | 8 ++++++-- .../\351\241\271\347\233\256\351\203\250\347\275\262.md" | 6 +++++- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/Makefile b/Makefile index 35ef7efd..91105c70 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -.PHONY : build clean format install-python test-cpp test-onnx +.PHONY : build clean format install-python test-cpp test-onnx submodules TYPE ?= Release TEST ?= ON @@ -6,7 +6,11 @@ TEST ?= ON CMAKE_OPT = -DCMAKE_BUILD_TYPE=$(TYPE) CMAKE_OPT += -DBUILD_TEST=$(TEST) -build: +# 初始化 git submodule(googletest 等第三方依赖,clone 后首次构建必须执行) +submodules: + git submodule update --init --recursive + +build: submodules mkdir -p build/$(TYPE) cd build/$(TYPE) && cmake $(CMAKE_OPT) ../.. && make -j8 diff --git "a/docs/\351\241\271\347\233\256\351\203\250\347\275\262.md" "b/docs/\351\241\271\347\233\256\351\203\250\347\275\262.md" index 5690349b..2cb9c9a9 100644 --- "a/docs/\351\241\271\347\233\256\351\203\250\347\275\262.md" +++ "b/docs/\351\241\271\347\233\256\351\203\250\347\275\262.md" @@ -27,9 +27,13 @@ sudo apt install make # mac 使用Homebrew安装 brew install make ``` - ### 构建命令 + 配置好上述环境后,进入项目目录后可以通过以下命令进行构建。 +> 注意:`3rd-party/googletest` 是 git submodule,`make build` 会自动执行 +> `git submodule update --init --recursive` 初始化;若网络不佳导致子模块 +> 拉取失败,可手动执行该命令后重试。 + - `make`/`make build`: 构建整个项目; - `make test-cpp`: 构建项目后执行测例; - `make clean`:清理生成文件 \ No newline at end of file From b9fe7c83686cc79aefb16e4132df87554952fada Mon Sep 17 00:00:00 2001 From: NiseAzaka Date: Sun, 16 Aug 2026 23:50:15 +0800 Subject: [PATCH 3/4] "init git submodules automatically on build" -m "Add a submodules prerequisite to the build target so that 3rd-party/googletest and other git submodules are fetched automatically on first build, avoiding the empty-directory CMake error after a fresh clone. Keep build as the default make target. Update the deployment docs with submodule initialization instructions." --- Makefile | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/Makefile b/Makefile index 91105c70..f05cb98e 100644 --- a/Makefile +++ b/Makefile @@ -6,14 +6,15 @@ TEST ?= ON CMAKE_OPT = -DCMAKE_BUILD_TYPE=$(TYPE) CMAKE_OPT += -DBUILD_TEST=$(TEST) -# 初始化 git submodule(googletest 等第三方依赖,clone 后首次构建必须执行) -submodules: - git submodule update --init --recursive - +# 注意:build 必须是第一个目标,否则 `make` 的默认目标会变成 submodules build: submodules mkdir -p build/$(TYPE) cd build/$(TYPE) && cmake $(CMAKE_OPT) ../.. && make -j8 +# 初始化 git submodule(googletest 等第三方依赖,clone 后首次构建必须执行) +submodules: + git submodule update --init --recursive + clean: rm -rf build From 6f3e49ae246f92ac8deeb3c586d3b8fd9570d011 Mon Sep 17 00:00:00 2001 From: NiseAzaka Date: Mon, 17 Aug 2026 00:09:14 +0800 Subject: [PATCH 4/4] =?UTF-8?q?Create=20=E9=80=9A=E8=BF=87=E6=88=AA?= =?UTF-8?q?=E5=9B=BE.pnd?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...32\350\277\207\346\210\252\345\233\276.png" | Bin 0 -> 346779 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 "docs/\351\200\232\350\277\207\346\210\252\345\233\276.png" diff --git "a/docs/\351\200\232\350\277\207\346\210\252\345\233\276.png" "b/docs/\351\200\232\350\277\207\346\210\252\345\233\276.png" new file mode 100644 index 0000000000000000000000000000000000000000..f9e5fea2844b71c65f5affccf599ad3409db2803 GIT binary patch literal 346779 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�U|Rtl6RR9T@9=Gnzh+a=KuNwEHw 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%0D&>M`u{ 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

|xvF-xa8~Api0%QoJ&!E>>Lewl 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 f_EXs{i0wEmNi6 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%0A|(q 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 z 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