updated pptx and speech pdf

This commit is contained in:
2026-06-30 11:51:38 +08:00
parent d9d36e017f
commit a8b5d9c864
5 changed files with 1569 additions and 1244 deletions

View File

@@ -404,7 +404,7 @@ style: |
小组成员:**程景愉** · **舒钰权** · **杨力嘉** 小组成员:**程景愉** · **舒钰权** · **杨力嘉**
<p>仓库地址:<strong>https://bdgit.educoder.net/pw7hgk2xf/nudt-compiler-cpp</strong></p> <p>仓库地址:<strong>https://git.nudt.space/CompileThreeMaggot/nudt-compiler-cpp.git</strong></p>
--- ---
@@ -725,7 +725,7 @@ style: |
--- ---
# 测试验证结果 # 功能测试验证结果
<div class="table-wrapper"> <div class="table-wrapper">
@@ -745,7 +745,28 @@ style: |
</div> </div>
<p class="lead" style="text-align:center;">全部 <strong>11 项功能测试用例</strong> 与 <strong>10 项性能测试用例</strong>(共 21 项)在<strong>优化开启</strong>条件下通过 <code>./scripts/run_all_tests_verbose.sh</code> 验证;当前无硬编码优化版本总耗时 <strong>217.293 秒</strong>,输出与退出码 <strong>100% 匹配</strong>预期。</p> ---
# 功能测试验证结果
<div class="table-wrapper">
| 序号 | 测试用例 | 测试内容 | 结果 |
|:---:|:---|:---|:---:|
| 12 | `01_mm2.sy` | 矩阵乘法(性能) | ✅ |
| 13 | `02_mv3.sy` | 矩阵向量乘法(性能) | ✅ |
| 14 | `03_sort1.sy` | 排序算法(性能) | ✅ |
| 15 | `2025-MYO-20.sy` | 综合性能测试(循环/数组) | ✅ |
| 16 | `fft0.sy` | 快速傅里叶变换(性能) | ✅ |
| 17 | `gameoflife-oscillator.sy` | 生命游戏振荡器(性能) | ✅ |
| 18 | `if-combine3.sy` | 条件组合与分支密集(性能) | ✅ |
| 19 | `large_loop_array_2.sy` | 大循环数组访问(性能) | ✅ |
| 20 | `transpose0.sy` | 矩阵转置(性能) | ✅ |
| 21 | `vector_mul3.sy` | 向量乘法(性能) | ✅ |
</div>
<!-- <p class="lead" style="text-align:center;">全部 <strong>11 项功能测试用例</strong> 与 <strong>10 项性能测试用例</strong>(共 21 项)在<strong>优化开启</strong>条件下通过 <code>./scripts/run_all_tests_verbose.sh</code> 验证;当前无硬编码优化版本总耗时 <strong>217.293 秒</strong>,输出与退出码 <strong>100% 匹配</strong>预期。</p> -->
<p class="mini" style="text-align:center;">验证链路SysY 源码 → IR 生成 → 标量优化 → 循环优化 → 指令选择 → 寄存器分配 → 窥孔优化 → AArch64 汇编 → QEMU 模拟运行 → 输出比对</p> <p class="mini" style="text-align:center;">验证链路SysY 源码 → IR 生成 → 标量优化 → 循环优化 → 指令选择 → 寄存器分配 → 窥孔优化 → AArch64 汇编 → QEMU 模拟运行 → 输出比对</p>

Binary file not shown.

Binary file not shown.

File diff suppressed because it is too large Load Diff

View File

@@ -53,7 +53,7 @@
#block(width: 100%, breakable: true)[ #block(width: 100%, breakable: true)[
== 第 1 页:封面页(~10 秒) == 第 1 页:封面页(~10 秒)
*【逐字演讲稿】* 各位老师、同学们,下午好!我是程景愉。今天代表我们小组——程景愉、舒钰权、杨力嘉,汇报 SysY 编译器课程实验成果。我们实现了从 SysY AArch64 汇编的完整编译器六个实验全部完成21 项完整回归测试通过,并将全量测试耗时优化到 217.293 秒。 \ *【逐字演讲稿】* 各位老师、同学们,下午好!我是舒钰权。今天代表我们小组——程景愉、舒钰权、杨力嘉,汇报 SysY 编译器课程实验成果。我们实现了从 SysY AArch64 汇编的完整编译器六个实验全部完成21 项完整回归测试通过,并将全量测试耗时优化到 217.293 秒。 \
*【演讲技巧】* 站姿挺拔,声音洪亮。一句话自我介绍 + 一句话项目概括。 *【演讲技巧】* 站姿挺拔,声音洪亮。一句话自我介绍 + 一句话项目概括。
] ]
@@ -71,13 +71,13 @@
#block(width: 100%, breakable: true)[ #block(width: 100%, breakable: true)[
== 第 4 页Lab1 语法树构建 — 前端基石(~20 秒) == 第 4 页Lab1 语法树构建 — 前端基石(~20 秒)
*【逐字演讲稿】* Lab1 舒钰权负责。核心是扩展 ANTLR4 文法,覆盖完整 SysY——控制流、表达式、浮点、数组、函数参数。关键认知ANTLR 文法的 rule 命名直接决定生成 C++ 类的类型名——意味着 sem irgen 所有 visit\* 函数必须与文法精确匹配。文法一变,下游全部同步适配。这是前端工程"牵一发而动全身"的典型体现。 \ *【逐字演讲稿】* Lab1 负责。核心是扩展 ANTLR4 文法,覆盖完整 SysY——控制流、表达式、浮点、数组、函数参数。关键认知ANTLR 文法的 rule 命名直接决定生成 C++ 类的类型名——意味着 sem irgen 所有 visit\* 函数必须与文法精确匹配。文法一变,下游全部同步适配。这是前端工程"牵一发而动全身"的典型体现。 \
*【演讲技巧】* 强调文法与下游耦合关系。快速带过,不展开细节。 *【演讲技巧】* 强调文法与下游耦合关系。快速带过,不展开细节。
] ]
#block(width: 100%, breakable: true)[ #block(width: 100%, breakable: true)[
== 第 5 页Lab2 中间表示生成 — IR 语义全覆盖(~45 秒) == 第 5 页Lab2 中间表示生成 — IR 语义全覆盖(~45 秒)
*【逐字演讲稿】* Lab2 工作量最大,由负责。扩展了 IR 类型系统和指令集,实现了短路求值、控制流、函数调用与多维数组的 IR 翻译。 *【逐字演讲稿】* Lab2 工作量最大,由程景愉负责。扩展了 IR 类型系统和指令集,实现了短路求值、控制流、函数调用与多维数组的 IR 翻译。
讲两个最核心的难点。第一,"编译期/运行期路径混用"——原 EvalConstExpr 内部调用了需要插入点的 IRBuilder全局初始化时直接崩溃。解决方案彻底分离常量路径只返回 ConstantInt/ConstantFloat绝不碰 IRBuilder。这是编译器设计的基本原则但初学者极易违反。 讲两个最核心的难点。第一,"编译期/运行期路径混用"——原 EvalConstExpr 内部调用了需要插入点的 IRBuilder全局初始化时直接崩溃。解决方案彻底分离常量路径只返回 ConstantInt/ConstantFloat绝不碰 IRBuilder。这是编译器设计的基本原则但初学者极易违反。
@@ -87,13 +87,13 @@
#block(width: 100%, breakable: true)[ #block(width: 100%, breakable: true)[
== 第 6 页Lab3 指令选择与汇编生成 — AArch64 后端(~30 秒) == 第 6 页Lab3 指令选择与汇编生成 — AArch64 后端(~30 秒)
*【逐字演讲稿】* Lab3 由舒钰权负责。采用高可靠栈槽模型——每个 IR Value 分配专属栈槽100% 保证变量活跃期正确性。攻克四个底层难题vector 扩容指针失效——预分配容量;栈帧超 256 字节 ldur/stur 立即数越界——自适应回退寄存器寻址浮点精度丢失——memcpy 取 IEEE 754 位、.word 原样输出,全链路位精确;重写 sylib.c 补齐 I/O。 \ *【逐字演讲稿】* Lab3 由负责。采用高可靠栈槽模型——每个 IR Value 分配专属栈槽100% 保证变量活跃期正确性。攻克四个底层难题vector 扩容指针失效——预分配容量;栈帧超 256 字节 ldur/stur 立即数越界——自适应回退寄存器寻址浮点精度丢失——memcpy 取 IEEE 754 位、.word 原样输出,全链路位精确;重写 sylib.c 补齐 I/O。 \
*【演讲技巧】* "浮点位精确"和"大栈帧自适应寻址"最体现工程严谨性。 *【演讲技巧】* "浮点位精确"和"大栈帧自适应寻址"最体现工程严谨性。
] ]
#block(width: 100%, breakable: true)[ #block(width: 100%, breakable: true)[
== 第 7 页Lab4 基本标量优化 — SSA 中端核心(~45 秒) == 第 7 页Lab4 基本标量优化 — SSA 中端核心(~45 秒)
*【逐字演讲稿】* Lab4 理论深度最高,由负责。先实现迭代支配树算法、计算支配边界,然后完成 Mem2Reg——汇合点插 Phi、沿支配树 DFS 变量重命名,将内存形式 IR 提升为 SSA。 *【逐字演讲稿】* Lab4 理论深度最高,由程景愉负责。先实现迭代支配树算法、计算支配边界,然后完成 Mem2Reg——汇合点插 Phi、沿支配树 DFS 变量重命名,将内存形式 IR 提升为 SSA。
在此基础上实现五个优化 Pass。ConstFold 做编译期计算与代数简化。ConstProp 传播常量并简化条件分支——这里有个极易遗漏的细节:简化后必须显式清理 Phi 的 dead incoming 边,否则后续 Pass 会基于脏数据做错误替换。CSE 做块内公共子表达式消除DCE 用 Mark-and-SweepCFGSimplify 合并线性块。 在此基础上实现五个优化 Pass。ConstFold 做编译期计算与代数简化。ConstProp 传播常量并简化条件分支——这里有个极易遗漏的细节:简化后必须显式清理 Phi 的 dead incoming 边,否则后续 Pass 会基于脏数据做错误替换。CSE 做块内公共子表达式消除DCE 用 Mark-and-SweepCFGSimplify 合并线性块。
@@ -109,7 +109,7 @@
#block(width: 100%, breakable: true)[ #block(width: 100%, breakable: true)[
== 第 9 页Lab6 并行与循环优化 — LICM~25 秒) == 第 9 页Lab6 并行与循环优化 — LICM~25 秒)
*【逐字演讲稿】* Lab6 由负责实现循环不变式外提。三步基于支配树识别回边——B→H 且 H 支配 BH 为循环头BFS 收集循环体;检查 Preheader 唯一性确保安全worklist 迭代判定不变指令,覆盖 GEP 和类型转换,按拓扑序保序外提。 *【逐字演讲稿】* Lab6 由程景愉负责实现循环不变式外提。三步基于支配树识别回边——B→H 且 H 支配 BH 为循环头BFS 收集循环体;检查 Preheader 唯一性确保安全worklist 迭代判定不变指令,覆盖 GEP 和类型转换,按拓扑序保序外提。
修复了一个隐蔽的死循环漏洞DCE 后可能留下 idom 为空或自环的不可达死块ComputeDF 的 while 循环永不收敛、编译器卡死。定位两三小时,修复只需两行阻断代码。 \ 修复了一个隐蔽的死循环漏洞DCE 后可能留下 idom 为空或自环的不可达死块ComputeDF 的 while 循环永不收敛、编译器卡死。定位两三小时,修复只需两行阻断代码。 \
*【演讲技巧】* 死循环漏洞是精彩的调试故事。 *【演讲技巧】* 死循环漏洞是精彩的调试故事。
@@ -153,7 +153,7 @@
#block(width: 100%, breakable: true)[ #block(width: 100%, breakable: true)[
== 第 13 页:人员分工(~15 秒) == 第 13 页:人员分工(~15 秒)
*【逐字演讲稿】* 三人分工。负责中端优化——Lab2 IR 生成、Lab4 支配树与全部 Pass、Lab6 LICM。舒钰权负责 Lab1 文法扩展和 Lab3 AArch64 后端,攻克了浮点位精确等底层难题。杨力嘉负责 Lab5 窥孔优化与全量测试回归,在寄存器别名感知方面做出关键贡献。通过 Git 分支 + MR + Code Review 完成协作。 \ *【逐字演讲稿】* 三人分工。程景愉负责中端优化——Lab2 IR 生成、Lab4 支配树与全部 Pass、Lab6 LICM。负责 Lab1 文法扩展和 Lab3 AArch64 后端,攻克了浮点位精确等底层难题。杨力嘉负责 Lab5 窥孔优化与全量测试回归,在寄存器别名感知方面做出关键贡献。通过 Git 分支 + MR + Code Review 完成协作。 \
*【演讲技巧】* 真诚肯定组员贡献。 *【演讲技巧】* 真诚肯定组员贡献。
] ]