是否有比顺序乘法更有效的并行矩阵求幂算法?


11

求实数矩阵的幂(正整数)是一个。有许多有效的矩阵乘法算法(例如,一些并行算法是Cannon's,DNS),但是有没有专门用于发现矩阵幂且比顺序执行矩阵乘法更有效的算法?我对并行算法特别感兴趣。


1
你尝试了什么?你在哪里被困?你做了什么研究?除了标题,问题在哪里?对于问题的决策版本(来自标题),答案是“是”,但您已经知道了,对吗?
Evil

2
@TomR 这个问题可能是您感兴趣的
adrianN

1
也许是这样的吗?还是您在寻找其他东西?您的应用程序的大小和功能是什么?
Evil

1
当n≥4时,您可以用少于n-1个乘法来计算n次方。对于大型矩阵,通常应该找到尽可能小的乘法数(例如,有一种简单的方法可以计算n ^ 15乘以6乘法,但可以用5)完成。然后,您可以应用相同的原理来找到最小数量的顺序乘法,这将变得更加困难。
gnasher729

1
您还应该考虑可用的并行度。“平行主义”是指开发原本不会使用的资源。如果矩阵乘法的实现已经可以有效地利用所有可用资源,则没有其他可用于计算矩阵幂的资源。
gnasher729

Answers:


5

如果您有多个可以并行工作的处理器,则可以以k为步长计算功率(2 ^ k)以内的任何功率。例如:要计算,请计算:中号15

阶段1:计算中号2

阶段2:计算M 4 = M 2 * M 2中号3=中号2中号中号4=中号2中号2

阶段3:计算M 8 = M 4 * M 4中号7=中号4中号3中号8=中号4中号4

阶段4:计算中号15=中号8中号7

这比在三个乘法中计算并在另一个两个乘法中将M 5提升至三次方要大得多,但是如果您有两个处理器,则应该更快。对于任意大功率,您将需要更多处理器。中号5中号5

如果对乘法使用蛮力算法(逐行乘以乘法),则可以通过计算乘积的一行,然后立即将该行用于下一个乘积来节省一些时间。这将有助于在计算,我们可以开始计算中号3尽快的第一行中号2已经计算; 因为我们需要M 2的行和列,所以对M 4并不是那么有用。对于大功率,您可能可以安排要计算的功率。中号3中号3中号2中号4中号2

发布之后,很明显,您可以非常轻松地使用多个处理器:首先计算的第一行。当您拥有该行时,便拥有了计算M 3 = M 2M的第一行所需的所有信息,因此您可以并行计算M 2的第二行和M 3的第一行。然后就可以计算出的第三行中号2,第二行中号3,并且第一行中号4并联等。中号2=中号中号中号3=中号2中号中号2中号3中号2中号3中号4

这将执行比所需更多的操作(例如,对 14个矩阵乘法,而不是四阶段方法的最小5或6)。如果与处理器数量相比功率不大,这将仍然更快。但是使用这种方法用四个处理器计算M 1000效率很低;以最佳方式执行此操作将是一个有趣的问题。中号15中号1000

组合方法:例如,使用四个处理器,您可以一次计算一行产品,几乎可以并行计算AB,ABC,ABCD和ABCDE。这样一来,使用一个处理器的一个产品就可以同时使用四个处理器来计算M 5的全部四个。中号2中号5

给定这四个结果和原始M,您可以再次同时计算矩阵M 25中的四个,前提是矩阵之间的功率最多为5个幂。因此,高达M 25的每个功率的计算时间约为单个处理器矩阵乘积的两倍。中号6中号25中号25

通过计算这些矩阵,如果有四个处理器,则可以用单个矩阵乘积的三倍的时间来计算所有M 108以及更多的MM 125。如果使用k个处理器,则该功率至少应达到k k + 1 2的幂。中号108中号125ķķ+1个2


4

您可以通过矩阵乘幂分析两个级别的并行加速:决定要相乘的矩阵的“宏算法”级别,以及可以通过并行度自己加速乘法的“微算法”级别。

对于后者,维基百科表明用于乘以通过Ñ矩阵,就可以实现一个复杂Ô 日志2Ñ 理论上有一个无限数量的处理器,或ø ñ 具有更真实的并行算法。ññØ日志2ñØñ

(注意:Wikipedia页面用于常规矩阵计算。我不确定是否可以使用我们对矩阵求平方的信息来进一步并行化。)

对于前者,问题变成对于某些矩阵A,要计算需要几轮矩阵乘法?(我说回合,因为给定回合中的所有乘法都可以并行进行)。一种一种

如其他答案所述,击败的顺序算法是平方。这使您可以计算Ø 日志ķ 乘法。一种ķØ日志ķ

问题是:我们可以用并行性击败它吗?我声称答案是否定的。

简单的原因是,平方的求幂本质上是一种动态编程算法。它使您可以通过重用子结果来跳过所有工作,但这反过来又创建了数据依赖关系,不允许并行处理。如果我们摆脱了对数据的依赖,那么我们也将大大增加我们要做的工作量。

为了更好地说明这一点,让我们看一下如果不进行幂运算,将如何并行化矩阵乘法。假设您要并行化乘以独立的平方矩阵:ķ

一种1个一种2一种3一种4一种5一种ķ

并行处理此问题的自然方法是显而易见的,您应该滥用关联性来执行第一轮有 2个乘法:ķ2

一种1个一种2一种3一种4一种5一种6一种ķ-1个一种ķ

由此,我们可以在O log k 轮乘法中清楚地乘以矩阵,因为我们每轮将问题大小减小一半。ķØ日志ķ

但是,如果我们要以这种方式执行幂运算,则将如下所示:

一种一种一种一种一种一种一种一种

一种2

一种ķññ一种Ø日志2ñ日志ķØñ日志ķ


3

日志2

一种=小号Λ小号-1个一种=小号Λ小号-1个
Ø1个
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.