updated pptx and speech pdf
This commit is contained in:
@@ -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">
|
||||
|
||||
@@ -745,7 +745,28 @@ style: |
|
||||
|
||||
</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>
|
||||
|
||||
|
||||
Binary file not shown.
Binary file not shown.
File diff suppressed because it is too large
Load Diff
@@ -53,7 +53,7 @@
|
||||
|
||||
#block(width: 100%, breakable: true)[
|
||||
== 第 1 页:封面页(~10 秒)
|
||||
*【逐字演讲稿】* 各位老师、同学们,下午好!我是程景愉。今天代表我们小组——程景愉、舒钰权、杨力嘉,汇报 SysY 编译器课程实验成果。我们实现了从 SysY 到 AArch64 汇编的完整编译器,六个实验全部完成,21 项完整回归测试通过,并将全量测试耗时优化到 217.293 秒。 \
|
||||
*【逐字演讲稿】* 各位老师、同学们,下午好!我是舒钰权。今天代表我们小组——程景愉、舒钰权、杨力嘉,汇报 SysY 编译器课程实验成果。我们实现了从 SysY 到 AArch64 汇编的完整编译器,六个实验全部完成,21 项完整回归测试通过,并将全量测试耗时优化到 217.293 秒。 \
|
||||
*【演讲技巧】* 站姿挺拔,声音洪亮。一句话自我介绍 + 一句话项目概括。
|
||||
]
|
||||
|
||||
@@ -71,13 +71,13 @@
|
||||
|
||||
#block(width: 100%, breakable: true)[
|
||||
== 第 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)[
|
||||
== 第 5 页:Lab2 中间表示生成 — IR 语义全覆盖(~45 秒)
|
||||
*【逐字演讲稿】* Lab2 工作量最大,由我负责。扩展了 IR 类型系统和指令集,实现了短路求值、控制流、函数调用与多维数组的 IR 翻译。
|
||||
*【逐字演讲稿】* Lab2 工作量最大,由程景愉负责。扩展了 IR 类型系统和指令集,实现了短路求值、控制流、函数调用与多维数组的 IR 翻译。
|
||||
|
||||
讲两个最核心的难点。第一,"编译期/运行期路径混用"——原 EvalConstExpr 内部调用了需要插入点的 IRBuilder,全局初始化时直接崩溃。解决方案:彻底分离,常量路径只返回 ConstantInt/ConstantFloat,绝不碰 IRBuilder。这是编译器设计的基本原则,但初学者极易违反。
|
||||
|
||||
@@ -87,13 +87,13 @@
|
||||
|
||||
#block(width: 100%, breakable: true)[
|
||||
== 第 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)[
|
||||
== 第 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-Sweep,CFGSimplify 合并线性块。
|
||||
|
||||
@@ -109,7 +109,7 @@
|
||||
|
||||
#block(width: 100%, breakable: true)[
|
||||
== 第 9 页:Lab6 并行与循环优化 — LICM(~25 秒)
|
||||
*【逐字演讲稿】* Lab6 由我负责,实现循环不变式外提。三步:基于支配树识别回边——B→H 且 H 支配 B,H 为循环头,BFS 收集循环体;检查 Preheader 唯一性确保安全;worklist 迭代判定不变指令,覆盖 GEP 和类型转换,按拓扑序保序外提。
|
||||
*【逐字演讲稿】* Lab6 由程景愉负责,实现循环不变式外提。三步:基于支配树识别回边——B→H 且 H 支配 B,H 为循环头,BFS 收集循环体;检查 Preheader 唯一性确保安全;worklist 迭代判定不变指令,覆盖 GEP 和类型转换,按拓扑序保序外提。
|
||||
|
||||
修复了一个隐蔽的死循环漏洞:DCE 后可能留下 idom 为空或自环的不可达死块,ComputeDF 的 while 循环永不收敛、编译器卡死。定位两三小时,修复只需两行阻断代码。 \
|
||||
*【演讲技巧】* 死循环漏洞是精彩的调试故事。
|
||||
@@ -153,7 +153,7 @@
|
||||
|
||||
#block(width: 100%, breakable: true)[
|
||||
== 第 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 完成协作。 \
|
||||
*【演讲技巧】* 真诚肯定组员贡献。
|
||||
]
|
||||
|
||||
|
||||
Reference in New Issue
Block a user