代码 抽出骨架:一个精简的Openblas api实现


简洁版本的Openblas实现了一个intel x86_64 sgemm,但 保留了 Openblas骨架和精髓

个人觉得Openblas项目中可以借鉴的地方:
1.多线程快速切换(利用job,去更新参数,而不是释放和重新生成新线程)
2.矩阵分块(参考gotoblas的论文),cache利用(尤其在多线程的情况下控制好L3-L1cache的利用程度,最大程度保证cpu不断流)
3.计算单元汇编级优化,但在工程编译、扩展上有要求灵活快速,所以Openblas编译时候对宏的利用发挥到了极致

目前想到可以改进的地方::
1.线程切换时候用到的job可以使用连续物理内存,确保证缓存在cache中;(至少malloc的比数组要慢,还没尝试mmap)
2.针对不同的矩阵维度可以提前生成汇编 ;比如不常见的27*480000这种矩阵,可以用脚本语言生产汇编代码直接在汇编级代码中展开大循环( 尤其在faster rcnn优化上,因为网络模型固定之后,矩阵维度也就固定了,针对固定的维度去做汇编级别的展开(手写几万行的汇编要累死,脚本语言可以轻松完成))

 参考论文《Anatomy of high-performance matrix multiplication》  http://www.cs.utexas.edu/~pingali/CS378/2007sp/handouts/article.pdf

好像不能传代码附件:贴两张使用到文件和编译过程,也可以顺藤摸瓜了解

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值