提高求解耦合矩阵方程的效率

时间:2019-09-02 20:38:42

标签: performance matrix-multiplication equation

当前,我正在解决一个以F_i作为解的耦合矩阵方程。它们的计算如下:

F_0 = F_0 + A_0*F_0 + F_0*B_0 + C_0*F_1 + F_1*D_0 + E_0*F_2 + F_2*G_0
F_1 = F_1 + A_1*F_1 + F_1*B_1 + C_1*F_0 + F_0*D_1
F_2 = F_2 + A_2*F_2 + F_2*B_2 + C_2*F_0 + F_0*D_2

其中所有变量都是相同维的平方矩阵。尺寸约为100-200。从而,*表示矩阵乘法。我需要执行矩阵乘法/求和数千次,问题是性能非常差。因此,我使用Intel MKL的gemm对矩阵进行乘法/求和。由于矩阵很小,因此即使使用许多内核也不足以实现加速。您知道如何提高性能吗?

我有两个想法,我认为我可以增加它。也许您可以对此发表评论。一种想法是使用Intel MKL的批处理gemm。但是,根据(https://software.intel.com/en-us/articles/introducing-batch-gemm-operations,只能执行独立的矩阵矩阵乘法,因此,我一次只能执行三个矩阵矩阵乘法。因此,我认为提升效果有点小。

另一个想法是将其转换为块矩阵乘法。但是,问题在于,左边的乘法(矩阵B,D,G)不适合该方案。原则上,这可以通过执行以下乘法来实现:

{F_0,F_1,F_2}*{{B_0,D_1,D_2},{D_0,B_1,0},{G_0,0,B_2}}

但是我需要总结

{F_0,F_1,F_2} with {F_0,F_1,F_2}^T

从矩阵左边的块乘法开始,它变得有些复杂。然后,我还需要在每个步骤都需要更新所有解决方案矩阵副本的解决方案。

如果您能以某种方式对我的问题发表评论,那就太好了。你有更好的主意吗?

预先感谢

0 个答案:

没有答案