目录

PreSpeed DSL 编译器

编译原理(大三上)课程大项目:一门用于描述并行程序最优并行度预测任务的 YAML 声明式 DSL,配套完整编译器与深度学习预测流水线。

任务背景

高性能计算场景下,准确预测并行程序的最优并行度依赖深度学习模型,但使用门槛高,需要手工做特征工程、模型调用与数据融合。本项目设计并实现 PreSpeedDSL:用户只需在 YAML 中声明”分析什么程序(Program)、在什么平台上(Platform)、要做什么(Task)”,编译器即可完成词法/句法解析、编译期语义验证(类型检查、搜索范围逻辑一致性、平台配置完整性)、基于平台知识库的上下文参数推断,最终翻译为一个可直接执行的 Python 推理脚本。

语言支持两种任务语义:PREDICT(在指定搜索范围内预测最优并行度)与 ANALYZE(输出指定并行度下的中间特征向量);支持用 --- 分隔的多任务批处理聚合编译。整体流水线分五阶段:输入验证、汇编特征提取(参考 asm2vec 思路)、数据转换、样本生成、目标脚本生成。

内容结构

路径 说明
prespeed_dsl/ DSL 核心包:parser(YAML 解析)、pipeline(五阶段编排)、processors(汇编特征/CSV 转换/样本生成)、compiler(目标脚本生成)、knowledge(平台知识库与推理规则)、backend(预测引擎 API)
prespeed_dsl_compiler.py 编译器入口,用法 python prespeed_dsl_compiler.py <dsl.yaml> <asm文件>
test_cg_task1/2/3.yaml 三个测试用 DSL 源文件(性能预测/特征分析/并行度推断)
cg_test_output/、test_cg_*_compiled/ 编译产物示例:生成的推理脚本、样本 csv、矩阵与结果
all.py 双模型(聚合时间生成器 + MTPIP 模型)训练脚本,产出 .pth 权重与 scaler
model1_prediction.py、model2_prediction.py 两个预测模型的独立推理脚本
combine_features.py、utils.py 特征合并与数据路径工具
test_validation.py、test_validation_detailed.py DSL 配置验证测试
mod1in/、mod1out/ 模块一输入/合并后的特征数据(csv)
environment.yml conda 环境 prespeed 完整依赖清单
AGENTS.md、CLAUDE.md、Usage.txt、projdevplam.txt 项目说明、运行提示与开发计划书

运行方法

依赖(见 environment.yml):Python 3.8、PyTorch 2.4、NumPy、Pandas、Scikit-learn、PyYAML、joblib 等。

# 1. 创建并激活环境
conda env create -f environment.yml
conda activate prespeed

# 2. 编译并执行 DSL(三个测试任选)
python prespeed_dsl_compiler.py test_cg_task1.yaml ./asm2vec/NPB_s/CG.s
python prespeed_dsl_compiler.py test_cg_task2.yaml ./asm2vec/NPB_s/CG.s
python prespeed_dsl_compiler.py test_cg_task3.yaml ./asm2vec/NPB_s/CG.s

# 3. 重训模型(可选)
python all.py

注意:运行前需自备 ./asm2vec/NPB_s/CG.s 等汇编输入文件;两个预训练权重 best_agg_time_generator.pth、best_full_mtpip_model.pth 与 processed_data/ 下的 scaler(pkl)体积较大,未随仓库分发,可由 all.py 重新训练生成。asm2vec 包不可用时流水线会退化为 dummy 特征矩阵。

来源声明

  • 本仓库为编译原理课程大项目的自研部分:DSL 文法与语义定义、编译器前端/后端、五阶段流水线、训练与预测脚本均为本人及小组自研;课程仅提供项目任务书与验收规范。
  • 汇编特征提取参考 asm2vec 论文(SP’19)及开源 asm2vec-pytorch 实现的思路;该第三方代码库 clone 与 NPB 汇编语料未包含在本仓库中,仓库中的 prespeed_dsl/processors/asm_processor.py 通过 PYTHONPATH 调用它,缺失时自动降级。
  • test_cg_*_compiled/、cg_test_output/ 为本仓库代码生成的产物示例;mod1in/、mod1out/ 为课程实验提供/派生的特征数据。
关于

编译原理大项目:自研 DSL 编译器与预测模型流水线(parser/pipeline/backend/processors)

1.1 MB
邀请码
    Gitlink(确实开源)
  • 加入我们
  • 官网邮箱:gitlink@ccf.org.cn
  • QQ群
  • QQ群
  • 公众号
  • 公众号

版权所有:中国计算机学会技术支持:开源发展技术委员会
京ICP备13000930号-9 京公网安备 11010802047560号