























Folder · 2024 年 11 月 23 日 · 5894 次点击
这是一个创建于 568 天前的主题,其中的信息可能已经有所发展或是发生改变。
最近在用 C 手写模型推理, 其中 gemm 可以说是核心计算, 于是决定以学习为目的自己尝试优化一下.
用 3 个 for 循环可以实现最基本的矩阵乘法, 在我用 simd, blocking, 并行计算这些方法之后, 速度比 naive 版本的快了很多, 但还是会比 openblas 慢不少. 接下来该怎么做有点没头绪了. 我想知道有没有办法能进一步提升? 谢谢
1 nagisaushio 2024 年 11 月 23 日函数签名改成这样试试 void matmul(const float * restrict A, const float * restrict B, float * restrict C, |
2 elfive 2024 年 11 月 23 日 via iPhone如果是 intel 平台,可以考虑使用 Intel Intrinsics Library ,会比 OpenBLAS 快不少。 |
6 Folder 2024 年 11 月 23 日@nagisaushio 这个确实有一些帮助, 不过只能提升一点点大概 0.1GFLOPS 吧, 还是和 openblas, blis 这些有断档的差距. 感觉更多还是算法设计方面的问题, 这部分不知道该怎么做了. |
7 Folder 2024 年 11 月 23 日@AirCrusher 谢谢分享, 这个有点猛汇编都用上了, 我回头看下. 其实后面我看过类似的就是 flame 的教程, 基本上里面的技术都应用到了已经. |
8 Donaldo 2024 年 11 月 23 日歪个楼,请问你 README 的矩阵图是用什么画的? |
11 WonderfulRush 2024 年 11 月 23 日可以看看这篇文章 里面讲了 cpu 矩阵乘的优化 https://justine.lol/matmul/ |
12 Folder 2024 年 11 月 23 日@WonderfulRush |
14 tankeco 2024 年 11 月 23 日我感觉你取 index 就做了不少乘法,不确定编译器能不能帮你优化掉,你自己把 index 改成累加的方式试试 |
16 Folder 2024 年 11 月 23 日@tankeco |
18 foool 2024 年 11 月 23 日对比 openblas 中 cblas_sgemm 也是 4 并行度的吗? |
19 foool 2024 年 11 月 23 日几个小建议和疑问: |
21 Folder 2024 年 11 月 23 日@foool #19 |
22 Folder 2024 年 11 月 23 日@dingyaguang117 |
23 dingyaguang117 2024 年 11 月 23 日@Avafly 不确定 openblas 是否用到了 Strassen/Winograd 算法,感觉想要追求更显著突破可能是需要换算法的 |
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。