求实数矩阵的幂(正整数)是一个。有许多有效的矩阵乘法算法(例如,一些并行算法是Cannon's,DNS),但是有没有专门用于发现矩阵幂且比顺序执行矩阵乘法更有效的算法?我对并行算法特别感兴趣。
求实数矩阵的幂(正整数)是一个。有许多有效的矩阵乘法算法(例如,一些并行算法是Cannon's,DNS),但是有没有专门用于发现矩阵幂且比顺序执行矩阵乘法更有效的算法?我对并行算法特别感兴趣。
Answers:
如果您有多个可以并行工作的处理器,则可以以k为步长计算功率(2 ^ k)以内的任何功率。例如:要计算,请计算:
阶段1:计算
阶段2:计算和M 4 = M 2 * M 2
阶段3:计算和M 8 = M 4 * M 4
阶段4:计算
这比在三个乘法中计算并在另一个两个乘法中将M 5提升至三次方要大得多,但是如果您有两个处理器,则应该更快。对于任意大功率,您将需要更多处理器。
如果对乘法使用蛮力算法(逐行乘以乘法),则可以通过计算乘积的一行,然后立即将该行用于下一个乘积来节省一些时间。这将有助于在计算,我们可以开始计算中号3尽快的第一行中号2已经计算; 因为我们需要M 2的行和列,所以对M 4并不是那么有用。对于大功率,您可能可以安排要计算的功率。
发布之后,很明显,您可以非常轻松地使用多个处理器:首先计算的第一行。当您拥有该行时,便拥有了计算M 3 = M 2 ∗ M的第一行所需的所有信息,因此您可以并行计算M 2的第二行和M 3的第一行。然后就可以计算出的第三行中号2,第二行中号3,并且第一行中号4并联等。
这将执行比所需更多的操作(例如,对 14个矩阵乘法,而不是四阶段方法的最小5或6)。如果与处理器数量相比功率不大,这将仍然更快。但是使用这种方法用四个处理器计算M 1000效率很低;以最佳方式执行此操作将是一个有趣的问题。
组合方法:例如,使用四个处理器,您可以一次计算一行产品,几乎可以并行计算AB,ABC,ABCD和ABCDE。这样一来,使用一个处理器的一个产品就可以同时使用四个处理器来计算至M 5的全部四个。
给定这四个结果和原始M,您可以再次同时计算矩阵至M 25中的四个,前提是矩阵之间的功率最多为5个幂。因此,高达M 25的每个功率的计算时间约为单个处理器矩阵乘积的两倍。
通过计算这些矩阵,如果有四个处理器,则可以用单个矩阵乘积的三倍的时间来计算所有到M 108以及更多的M到M 125。如果使用k个处理器,则该功率至少应达到k (k + 1 )2的幂。
您可以通过矩阵乘幂分析两个级别的并行加速:决定要相乘的矩阵的“宏算法”级别,以及可以通过并行度自己加速乘法的“微算法”级别。
对于后者,维基百科表明用于乘以通过Ñ矩阵,就可以实现一个复杂Ô (日志2(Ñ ))理论上有一个无限数量的处理器,或ø (ñ )具有更真实的并行算法。
(注意:Wikipedia页面用于常规矩阵计算。我不确定是否可以使用我们对矩阵求平方的信息来进一步并行化。)
对于前者,问题变成对于某些矩阵A,要计算需要几轮矩阵乘法?(我说回合,因为给定回合中的所有乘法都可以并行进行)。
如其他答案所述,击败的顺序算法是平方求幂。这使您可以计算在Ø (日志(ķ ))乘法。
问题是:我们可以用并行性击败它吗?我声称答案是否定的。
简单的原因是,平方的求幂本质上是一种动态编程算法。它使您可以通过重用子结果来跳过所有工作,但这反过来又创建了数据依赖关系,不允许并行处理。如果我们摆脱了对数据的依赖,那么我们也将大大增加我们要做的工作量。
为了更好地说明这一点,让我们看一下如果不进行幂运算,将如何并行化矩阵乘法。假设您要并行化乘以独立的平方矩阵:
并行处理此问题的自然方法是显而易见的,您应该滥用关联性来执行第一轮有 2个乘法:
由此,我们可以在O (log (k ))轮乘法中清楚地乘以矩阵,因为我们每轮将问题大小减小一半。
但是,如果我们要以这种方式执行幂运算,则将如下所示: