Matmul x86性能优化笔记

类似设计方案:block 3x32 4x24 6x16 12x8

原始方案:6x16对输入进行重排,导致耗时很长
新方案好处:整体的IO次数降低,会有cache miss严重,input不重排,weight利用率更好(空间局部性和时间局部性)
使用小shape测试,性能提升1/4,但是未进行数据预取和指令流水线展开,还有优化空间。

使用模型测试,未提升1/4 分析:未进行数据预取和循环展开,以及未对L1进行分析。

3x32 和L1cache分析:

原始没有提升的shape是[8, 2048]X[2048, 512]这么大shape,cahce miss很严重,远超过了L1 ,cache冲突严重,omg!!

对2048进行分片!

尽可能占用L1 cache:设分片长度是y
总计cache使用量:(3*x + 32 * x) * 4 、 1024 <= 32kb ==》 x<=234

故取:x = 234 、 16 * 16 = 224 (真开心cache miss最低了,利用率最高)(分片带来的问题是不断加载dst!!)

写代码测试:
纳尼:224 192 160 128 96 最好的是128时候,omg L1cache确实咩有用完啊!!

为毛cache使用更高了,导致了严重的cache miss问题

可能还是冲突了,我们预计左矩阵分块一直常驻内存么。

左右矩阵的思考:谁大谁在先常驻内存!! 这样L2到L1 IO最低
x86:右矩阵常驻内存
arm:左矩阵常驻内存

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值