课题28:完善后端指令选择

难度:中

概述:为RISC-V后端增加对更多ONNX/DSL算子的支持,并添加新数据类型(如float64),扩展编译器的适用场景。

详细任务: 1. 分析当前instruction_select.py中已有的算子映射(如add → add,mul → mul等)。 2. 识别缺失的常用算子:如div(除法)、mod(取模)、sqrt、min/max等。 3. 为缺失算子实现RISC-V指令映射(注意RISC-V整数除法需要div/rem,浮点需要扩展指令集)。 4. 添加float64(双精度浮点)支持:增加新的寄存器类、加载存储指令(fld/fsd)、算术指令(fadd.d等)。 5. 更新类型系统,在IR中区分f64和f32。 6. 编写测试用例验证新算子和新类型。

交付产物: - 更新后的instruction_select.py和type_system.py - 新增的测试程序(使用除法和双精度浮点) - 文档:支持的操作列表、数据类型说明

12周每周目标: - W1:学习项目当前指令选择模块,列出已支持的算子和类型。 - W2:识别缺失的常用整数算子(除法、取模),查阅RISC-V手册中div/rem指令。 - W3:实现整数除法和取模的指令选择,编写简单DSL测试(a / b)。 - W4:测试除法和取模的正确性,处理除零错误(可忽略或插入陷阱)。 - W5:学习RISC-V浮点扩展(F/D扩展),了解fld/fsd和fadd.d等指令。 - W6:在IR中添加float64类型,修改类型解析器。 - W7:实现float64的加载和存储指令选择。 - W8:实现float64算术指令(加、减、乘、除)。 - W9:实现float64比较指令(feq.d, flt.d等)和条件分支。 - W10:编写测试用例:双精度浮点求和、点积等。验证模拟器支持。 - W11:为sqrt、min/max等添加指令选择(可使用库调用或硬件指令)。 - W12:更新文档,撰写新算子、新类型的使用指南。

相关文档