Stanford CS149 -- Assignment 4: NanoGPT149
作业描述及代码参见:cs149gpt
Warm-Up:访问张量
张量/数组都是按行存储的,四维数组可以看作元素为三维数组的数组,元素大小即为三维数组内元素总数,以此类推。
第 1 部分:简单(但不太高效)的注意力机制实现
主要实现两个矩阵乘法和一个 softmax 运算。
第 2 部分:块矩阵乘法和 Unfused Softmax
通过对矩阵进行分块,有效提高缓存的利用率,减少 miss。
N=1024 时,块大小设为 float
类型的大小为
第 3 部分:Fused Attention
Fused Attention 使得
注释掉 #pragma omp ...
语句后,时间为
与第 1 部分相比,由于使用 Fused Attention,可并行化的循环变成了
第 4 部分:Flash Attention
第 4 部分的内存使用最少。Flash Attention 是对 Fused Attention 的改进,在减少内存使用的同时,通过分块,提高了对缓存的利用。第 4 部分的性能比之前各部分要慢,但比单线程的 Fused Attention 稍快。
目前的 Flash Attention 可以通过使用多线程、使用 CPU 向量化硬件单元等方式提高性能。
ISPC加速
使用 ISPC 对各部分加速效果如下:
- part1:运行时间在
左右 - part2:运行时间在
左右 - part3:运行时间大致在
- part4:运行时间在
左右
主要使用 ISPC 加速了矩阵乘法,实现主要参考 ISPC Examples。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
· 上周热点回顾(2.17-2.23)