繁体   English   中英

高效的SSE NxN矩阵乘法

[英]Efficient SSE NxN matrix multiplication

我正在尝试通过矩阵乘法实现SSE版本的大矩阵。 我正在寻找一种基于SIMD实现的高效算法。

我想要的方法如下所示:

A(n x m) * B(m x k) = C(n x k)

并且所有矩阵都被认为是16字节对齐的float数组。

我在网上搜索,发现一些描述8x8乘法甚至更小的乘法的文章。 我真的需要尽可能高效,并且我不想使用Eigen库或类似的库。 (只有SSE3更具体)。

因此,如果有人能帮助我找到一些有关如何开始实施此方法的文章或资源,我将不胜感激。

实现任意大小的矩阵矩阵乘法的主要挑战不是使用SIMD,而是重用缓存的数据。 如果要实现缓存友好的矩阵矩阵乘法,必须阅读Goto和Van de Geijn撰写的《高性能矩阵乘法剖析》一书,它还讨论了对SIMD友好的内核的选择。 阅读本文后,经过两周的努力,期望在矩阵矩阵乘法上达到50%的机器峰值。

但是,如果这项工作的目的不是纯粹的学习,我强烈建议使用高度优化的库。 在x86上,最好的选择是OpenBLAS (BSD许可,支持动态CPU调度), BLIS (BSD许可,可轻松移植到新处理器)和Intel MKL (商业,支持Intel处理器上的动态CPU调度)。 出于性能原因,最好避免使用ATLAS,除非您针对的是非常奇怪的体系结构,而其他库不支持该体系结构。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM