【发布时间】:2017-09-23 16:15:30
【问题描述】:
我正在优化一个函数,我想摆脱缓慢的 for 循环。我正在寻找一种更快的方法来将矩阵的每一行乘以一个向量。
我不是在寻找“经典”乘法。
例如。我有一个包含 1024 列和 20 行的矩阵和一个长度为 1024 的向量。因此,我想要矩阵 1024 x 20,每行乘以向量。
我现在正在做的事情是在 for 循环中遍历矩阵行并使用 mkl v?Mul 执行当前矩阵行和向量的逐个元素乘法。有什么想法可以改进吗?
问题是 Multiply rows of matrix by vector? 的副本,但对于具有可能低级优化和 MKL 的 C++,而不是 R
【问题讨论】:
-
我假设你的意思是 1024 行和 20 列? 20 是固定的(还是在编译时已知并保证是 4 的倍数)?你的矩阵存储的是rowmajor还是columnmajor?
-
@chtz 1024 列 - 这些是特征。在另一种情况下,52 列。两者都是固定的,是 4 的倍数。20 是批量大小。我选择了它,但它不能很大。而且有很多这样的乘法迭代。
-
我可能误解了你想要做什么。如果您想对每一行进行逐个元素的乘法运算,那么您的矩阵的列数应该与向量的元素数一样多,不是吗? (如果不是你想要的,请写一些伪代码,或者你现在使用的代码)
-
@chtz 对不起我的复制粘贴错误。我已经纠正了这个问题。如果我们有 1024 列矩阵,则向量大小应为 1024。
-
这是内存带宽限制,所以我认为除了使用明显的解决方案和启用矢量化进行编译(即更多的努力是过早的优化)之外,您没有太多收获。
标签: c++ optimization 64-bit intel-mkl avx2