簡體   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