考慮一個矩陣尺寸48x16的浮子的和浮子b尺寸1X48型的的向量。快速單精度矩陣乘以向量積
請建議計算b×甲儘可能快地對常見的桌面處理器(的i5/I7)的一種方式。
背景。 上述產品處於緊密環路中,因此其快速計算至關重要。目前,我有以下天真的算法工作:
inline void Critical(const float A[48][16], const float b[48], float x[16]) const {
for (int u = 0; u < 48; ++u) {
for (int i = 0; i < 16; ++i) {
x[i] += A[u][i] * b[u];
}
}
}
我試圖卸載乘法MKL的SGEMV後來到SGEMM但無濟於事。在i7 4800MQ上,天真的實現仍然可以更快地工作。
EDIT1。
具有靜態分配的特徵與原始算法近似一樣快。
我已經嘗試GCC5,ICC和VC2015U3優化打開(/ O3,快速數學,mtune =本地等)。 ICC似乎在Linux和Windows上生成最快的代碼。
EDIT2。
的甲的元素是小的,MAX(| 甲 _ui |)= 256同樣MAX(| b _U |)= 1.0。只要算法比天真的算法更快,合理的近似解決方案也是可以接受的。
您可以查看我的[_Matrix_](https://github.com/ForceBru/Matrix)庫,瞭解如何使用矩陣進行操作。 – ForceBru
@ForceBru我只看非GPU解決方案。 – tovugike
@Angew MKL是由英特爾提供的一項優化的BLAS實施。 – tovugike