考虑一个矩阵尺寸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