diff --git a/SUMMARY.md b/SUMMARY.md index 04b0b2c64..fe13a73eb 100644 --- a/SUMMARY.md +++ b/SUMMARY.md @@ -101,13 +101,14 @@ ## 大实验参考文档 -* 大实验(文档正在编写中) - * [大实验简介](docs/contest/intro.md) - * [中端设计](docs/contest/midend/midend.md) - * [静态单赋值](docs/contest/midend/ssa.md) - * [复写传播](docs/contest/midend/rp.md) - * [常量传播](docs/contest/midend/cp.md) - * [死代码消除](docs/contest/midend/dce.md) +* [大实验简介](docs/contest/intro.md) +* [前端设计](docs/contest/frontend.md) +* [中端设计](docs/contest/midend/midend.md) + * [静态单赋值](docs/contest/midend/ssa.md) + * [复写传播](docs/contest/midend/rp.md) + * [常量传播](docs/contest/midend/cp.md) + * [死代码消除](docs/contest/midend/dce.md) +* [后端设计](docs/contest/backend.md) ## 参考资料 diff --git a/docs/contest/intro.md b/docs/contest/intro.md index 2edb2addf..826455667 100644 --- a/docs/contest/intro.md +++ b/docs/contest/intro.md @@ -15,3 +15,29 @@ ## 评分方法 +评分有两个选项: + +- 选项一 完成竞赛第二阶段的优化编译器,替代期末考试 + + 成绩占比 90%,剩余 10% 为书面作业和日常成绩。 + + 你需要通过 stage 1 - 6 的所有测试样例以及附加测试的测试样例,这样你可以获得50%的正确性得分。剩下的40%的得分将根据你的编译器的性能进行评分。 + + 性能评分方案: + 附加测试中`performance`部分测试样例,以gcc打开`-O2`优化的性能的 60% 为满分,按照比例折算。如果一个程序gcc编译后运行时间为12s,如果你的程序执行时间为20s即为满分。 + + 你的单个测试点的得分为: + + $$ + \min\{100, 100 * GCC编译程序运行时间 * 1.25/你的程序运行时间\} + $$ + + 所有测试点取**几何平均值**,最后结果 * 40% 作为你的最终性能测试成绩。 + +- 选项二 仅完成竞赛第一阶段(达到课程基础实验的要求) + + 实验部分占比与基础实验一致,你不需要完成思考题,但是需要简单介绍你的编译器是怎么完成每一个 step 的。根据通过测试样例情况评分。 + + - 完成 stage 1 - 5 实验成绩 35% ,书面作业和日常成绩10% ,期末成绩 55%。 + - 完成 stage 1 - 6 实验成绩 42% ,书面作业和日常成绩10% ,期末成绩 48%。 + - 完成 stage 1 - 7 实验成绩 50% ,书面作业和日常成绩10% ,期末成绩 40%。 \ No newline at end of file diff --git a/docs/contest/midend/cp.md b/docs/contest/midend/cp.md index 5967c7256..9aeb77911 100644 --- a/docs/contest/midend/cp.md +++ b/docs/contest/midend/cp.md @@ -1,36 +1 @@ # 常量传播 - - - - diff --git a/docs/contest/midend/dce.md b/docs/contest/midend/dce.md index 148c3c559..8a3e03a98 100644 --- a/docs/contest/midend/dce.md +++ b/docs/contest/midend/dce.md @@ -3,28 +3,6 @@ 死代码消除即无用代码消除,死代码和不可达代码是两个概念。前者指的是执行之后没有任何作用的代码(例如:多余的计算),后者指的是永远无法被执行到的代码。 活跃变量分析为每个程序点计算出所有变量的集合的子集,用于表示该点处活跃的变量,所以数据流分析的值集为所有变量的集合的幂集。"活跃"的含义是在程序执行过这一点**之后**,这个变量**当前的值**会被使用到,所以数据流分析是后向的。对于单个语句$S$,传递函数要根据$S$之后活跃的变量计算$S$之前活跃的变量,计算方法为:所有$S$用到的变量在$S$之前都是活跃的,所有$S$之后活跃的变量,如果没有在$S$中被定值,证明未来的那次使用用的还是$S$之前的值,所以也是活跃的。 - 这里讲一下几个常见的需要注意的点: