BLISlab dgemm优化
BLISlab dgemm优化
参考资料:
Git地址:https://github.com/flame/blislab
视频教程:https://www.bilibili.com/video/BV1c94y117Uw?vd_source=3ae32e36058f58c5b85935fca9b77797【澎峰科技-张先轶老师】
阅读:tutorial.pdf【位于代码包中】
Step0
1.克隆项目到本地
1 |
|
2.代码结构
3.编译环境
4.运行环境配置脚本
1 |
|
5.Makefile
1 |
|
6.make.gnu.inc
7.ref参考实现是否调用BLAS
8.my_dgemm.c
9.相关数据变量含义
10.代码采用列主元
11.dgemm使用脚本测试
Test目录下
1 |
|
1 |
|
12.dgemm手动指定参数测试
Test目录下
1 |
|
1 |
|
这里要注意哪个代表m,n,k?
1 |
|
13.计时区域
1 |
|
14.正确性检验
Test目录下Test_bl_gemm.c
结果比较:通过比较你的优化计算结果和参考计算结果对比
Gflops的计算
- 有效浮点次数 = 2*m*n*k
- Gflops = 有效浮点次数 / 时间
1 |
|
15.课后作业
perf工具的用法:
perf-系统级性能分析工具 - Amicoyuan (xingyuanjie.top)
分析不同的j,p,i循环顺序的性能:
原因cache miss造成的差异
Step1
1.与Step0比较
左边是Step1右边是Step0
2.基本分块
3.反汇编
1 |
|
1 |
|
4.反汇编(-fPIC引入的差异)
1 |
|
5.Gcc生成汇编
1 |
|
6.Step0与Step1比较
7.分块,修改MR, NR为4×4
8.分块(2×2)
1 |
|
9.AddDot_2x2汇编代码
10.AddDot_2x2最内层循环展开
1 |
|
11.AddDot_2x2汇编代码【最内层循环展开】
Step2
1.与Step1的性能比较
2.优化kernel/bl_dgemm_ukr.c
3.优化后性能对比
4.下降原因分析
5.如何进行分块
6.Dgemm代码
7.Dgemm macro kenrel代码
8.Gemm汇总
9.拓展
10.双缓冲优化
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!