有效的SSE NXN矩阵乘法

Efficient SSE NxN matrix multiplication

本文关键字:NXN SSE 有效      更新时间:2023-10-16

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

我所需的方法看起来像:

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

,所有矩阵都被认为是16字节对齐的浮子阵列。

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

因此,我很感激是否有人可以帮助我找到一些有关如何开始实施此问题的文章或资源。

实现任意大小矩阵矩阵乘法的主要挑战不是使用SIMD,而是重复使用缓存数据。如果您想实现对缓存友好的矩阵乘积,则必须通过Goto和van de geijn进行高性能矩阵乘法的论文解剖结构,这是必读的,它还讨论了要对SIMD友好友好的内核的选择。阅读本文后,预计在两周的努力后,在基质矩阵乘法上实现了50%的机器峰值。

但是,如果这项工作的目的不是纯学习,我强烈建议使用高度优化的库。在X86上,您的最佳选择是OpenBlas(BSD许可,支持动态CPU调度),BLIS(BSD许可,易于移植到新处理器)和Intel MKL(商业支持,支持在Intel处理器上进行动态CPU调度)。出于绩效原因,最好避免Atlas,除非您针对其他图书馆不支持的非常异国情调的建筑。