本目录包含一系列 BangC 算子实现的初学者教程,每个教程都包含最小实现、优化实现、运行脚本和详细说明。
| 算子 | 状态 | 说明 | 教程链接 |
|---|---|---|---|
| VecAdd | ✅ 完成 | 向量加法:最小实现 + Tiling 实现 | tutorial.md |
| ReLU | ✅ 完成 | ReLU 激活函数:最小实现 + Tiling 实现 | tutorial.md |
| Softmax | ✅ 完成 | Softmax 归一化:最小实现 + Tiling 实现 | tutorial.md |
| MaxPooling | ✅ 完成 | MaxPool2d 最大池化:最小实现 + Tiling 实现 | tutorial.md |
| MatMul | ✅ 完成 | 矩阵乘法:多种实现 | tutorial.md |
| Conv | ✅ 完成 | 卷积操作:最小实现 + 分组卷积实现 | tutorial.md |
| TorchMLU | ✅ 完成 | PyTorch MLU 集成 | tutorial.md |
| TorchInline | ✅ 完成 | PyTorch Inline 扩展 | tutorial.md |
Experiments/
├── README.md # 本文件
├── TUTORIAL_WORKFLOW.md # 教程编写工作流程
├── utils.h # 公共工具函数
├── 01_vecadd/ # VecAdd 教程(已完成)
│ ├── tutorial.md # 教程文档
│ ├── vecadd_minimal.mlu # 最小实现
│ ├── vecadd.mlu # Tiling 实现
│ └── build_eval.sh # 运行脚本
├── 02_relu/ # ReLU 教程(已完成)
│ ├── tutorial.md # 教程文档
│ ├── relu_minimal.mlu # 最小实现
│ ├── relu.mlu # Tiling 实现
│ └── build_eval.sh # 运行脚本
├── 03_softmax/ # Softmax 教程(已完成)
│ ├── tutorial.md # 教程文档
│ ├── softmax_minimal.mlu # 最小实现
│ ├── softmax.mlu # Tiling 实现
│ └── build_eval.sh # 运行脚本
├── 04_maxpooling/ # MaxPooling 教程(已完成)
│ ├── tutorial.md # 教程文档
│ ├── maxpooling_dilation.mlu # Dilation 实现(支持 dilation)
│ ├── maxpooling.mlu # Tiling 实现
│ └── build_eval.sh # 运行脚本
├── 05_matmul/ # MatMul 教程(已完成)
│ ├── tutorial.md # 教程文档
│ ├── matmul_00.mlu # 基础实现
│ ├── matmul_01.mlu # 多线程实现
│ ├── matmul_02.mlu # Tiling 实现
│ ├── matmul_03.mlu # 优化实现
│ ├── matmul_04.mlu # Conv 调试实现
│ ├── matmul_conv.mlu # Conv 完整实现
│ └── build_eval.sh # 运行脚本
├── 06_conv/ # Conv 教程(已完成)
│ ├── tutorial.md # 教程文档
│ ├── conv_minmal.mlu # 最小实现
│ └── build_eval.sh # 运行脚本
├── 07_torchmlu/ # PyTorch MLU 教程(已完成)
│ ├── tutorial.md # 教程文档
│ ├── matmul.py # 矩阵乘法实现
│ └── test_matmul.py # 测试脚本
└── 08_torchinline/ # PyTorch Inline 扩展教程(已完成)
├── tutorial.md # 教程文档
└── vec_add_inline.py # 向量加法 Inline 实现
- 选择一个教程:从教程列表中选择一个算子
- 阅读教程:打开对应的
tutorial.md文件 - 运行示例:使用运行脚本编译和运行代码
cd 01_vecadd ./build_eval.sh vecadd_minimal.mlu ./build_eval.sh vecadd.mlu - 进行探索:按照教程中的探索任务进行实验
- 参数调优:尝试不同的参数配置,观察性能变化
欢迎贡献新的算子教程!请遵循以下原则:
- 遵循工作流程:参考 TUTORIAL_WORKFLOW.md
- 保持一致性:代码风格、文档格式与现有教程保持一致
- 注重质量:确保代码可以编译运行,文档清晰完整
- 添加探索任务:提供引导性的探索任务,促进主动学习