历史上,算法的评估依据是它们执行的算术运算的数量。这种分析不再足以预测今天机器上的运行时间。在内存层次和处理器之间移动数据比执行计算需要更多的时间(和能量)。硬件趋势表明,这种通信的相对成本只会增加。因此,证明算法通信的下界和找到达到这些边界的算法是基本目标。我们证明了算法的通信代价与其相应计算图的图展开性质密切相关。
矩阵乘法是科学计算和并行计算中最基本的问题之一。将展开分析应用于Strassen等快速矩阵乘法算法,得到了它们通信代价的第一个下界。这些边界表明,当前的顺序算法是最优的,但以前的并行算法通信过多。我们新的并行化的Strassen的算法是通信最优和优于所有以前的矩阵乘法算法。
通信(即移动数据)可以在很大程度上支配算法的代价,无论代价是以运行时间还是总能量来衡量的。这适用于在内存层次之间或通过网络在处理器之间移动数据。每个数据单元的通信时间变化数量级,从10数量级不等<年代up>9年代up>L1缓存引用的顺序为10秒<年代up>2年代up>磁盘访问的秒数。当交流发生在网络或互联网上时,变化可能更大。事实上,技术趋势<年代up>16,17与算术成本相比,通信成本随着时间的推移呈指数增长。摩尔定律使芯片运算能力每年提高约60%,但内存和网络带宽每年仅提高26%和23%。<年代up>16因此,即使在今天沟通不是瓶颈的情况下,未来也可能是。
理想情况下,我们将能够确定重要问题所需通信量的下界,并设计实现这些问题的算法,即通信最优的算法。长期以来,这些双重问题一直吸引着研究人员,其中一个典型的例子是(<我>n我>3.)矩阵乘法(详见下文),并在Hong和Kung中证明了下界<年代up>18和Irony等人。<年代up>20.和许多最优的顺序和并行算法,如Agarwal等。<年代up>1和大炮<年代up>11.
最近,这些下界已经扩展到一大类其他经典线性代数问题,包括线性系统求解、最小二乘和特征值问题、密集和稀疏矩阵、顺序和并行机器。<年代up>9令人惊讶的是,在LAPACK和ScaLAPACK等广泛实现的库中,高度优化的算法<年代up>3.即使在渐近意义上,通常也达不到这些下界。这导致了很多最近的工作,发明了新的、更快的算法;参见巴拉德等人的引文。<年代up>9,10为引用。
在本文中,我们描述了一种新的方法来证明Strassen (<我米g src="https://dl.acm.org/cms/attachment/905dcba9-ff1d-4011-b0bc-b3427a05b7bf/cacm5702_i.gif" border="0" hspace="2" alt="cacm5702_i.gif">)矩阵乘法算法,以及许多类似的快速算法。具体地,我们介绍了算法的计算图的展开分析,并表明这种展开有助于确定通信成本。这些通信成本界限是<我>较低的我>这意味着Strassen的算法不仅减少了计算量,而且为减少通信创造了机会。此外,下界随着可用内存的增加而减少,这表明使用额外的内存也可能允许更快的算法。
事实上,有一种最优的并行算法可以在不同的内存数量下达到我们的下界,它的性能超过了所有其他已知的矩阵乘法实现,经典的或基于strassen的,在一个大型并行机器上,<年代up>6看到图1.在本文的其余部分,我们重点解释我们的新的下界Strassen的算法和他们的含义。
1.1.通信模型
为了分析算法的通信代价,我们考虑了理想化的内存模型和通信模型。在连续的情况下(参见图2)时,我们认为机器具有两层内存层次:快速内存大小<我>米我>字(在这里执行计算)和无限大的缓慢内存。我们假设输入最初驻留在慢速内存中,并且由于太大而无法容纳在快速内存中。我们定义的<我>沟通成本我>序列算法的总字数为在慢速存储器和快速存储器之间传输的字数。
在平行情况下(参见图2),我们认为<我>p我>处理器,每个处理器都有一定大小的本地内存<我>米我>,通过网络连接。在这种情况下,通信成本是处理器之间传输的字数,沿着算法的关键路径计算。也就是说,在不同的处理器对之间同时通信的两个字只计算一次。
1.2.经典的矩阵乘法
为了说明算术重排序对序列计算的通信和运行时间的影响,考虑矩阵乘法的计算问题<我>C我>=<我>一个我>·<我>B我>,其中(<我>我,我我>)<年代up>th年代up>输出元件由经典公式计算<我>C我>ij我>=<年代ub>k年代ub>一个我>本土知识我>·<我>B我>kj我>.经典算法的一种“朴素”的计算顺序可以简单地通过三个嵌套循环来指定(参见算法1)。对于过大而无法在快速内存中容纳的矩阵,这种排序需要对每个标量乘法至少通信一个操作数,导致总通信成本为(<我>n我>3.).一个很自然的问题是:我们能做得更好吗?
答案是肯定的。我们可以通过使用“阻塞”算法(参见算法2)来减少通信<我>A、B我>,<我>C我>分成正方形大小的方块<我>b我>×<我>b我>这样三个块就可以同时放入快速存储器中。我们用这个符号<我>C我>[<我>我,我我>]来参考(<我>我,我我>)<年代up>th年代up>b我>×<我>b我>块的<我>C我>矩阵。当<我>C我>[<我>我,我我>),<我>一个我>[<我>我,K我>),而<我>B我>[<我>J K,我>都在快速内存中,那么算法的内部循环(对应于(<我>b我>3.年代up>(算术运算)可以在没有更多通信的情况下执行。
的最大块大小<我>b我>=<我米g src="https://dl.acm.org/cms/attachment/fdbc668e-562d-4a92-a393-9d1a29960b73/cacm5702_j.gif" border="0" hspace="2" alt="cacm5702_j.gif">,则结果为((<我>n我>/<我米g src="https://dl.acm.org/cms/attachment/70492289-a7d0-4193-a1ca-efe9aafb8fcc/cacm5702_k.gif" border="0" hspace="2" alt="cacm5702_k.gif">)<年代up>3.年代up>)块操作,每个操作需要(<我>米我>)要交流的词语。因此,总通信成本为(<我>n我>3.年代up>/<我米g src="https://dl.acm.org/cms/attachment/70492289-a7d0-4193-a1ca-efe9aafb8fcc/cacm5702_k.gif" border="0" hspace="2" alt="cacm5702_k.gif">),因子为(<我>米我>)优于朴素算法。
在顺序机器上,朴素算法和阻塞算法之间的典型性能差异是一个数量级。采用分块算法,得到的性能接近机器的峰值性能。问题又来了:我们能做得更好吗?我们能否进一步重新排序这些计算以减少通信?
如果我们坚持执行(<我>n我>3.年代up>根据经典公式给出的算术运算,答案是否定的。洪教授和龚<年代up>18证明了通信成本下界为(<我>n我>3.年代up>/<我米g src="https://dl.acm.org/cms/attachment/70492289-a7d0-4193-a1ca-efe9aafb8fcc/cacm5702_k.gif" border="0" hspace="2" alt="cacm5702_k.gif">),表明阻塞算法是通信最优的。但这并不是故事的结束:阻塞算法的通信最优性假设(<我>n我>3.年代up>算术运算。
1.3.Strassen矩阵乘法
虽然矩阵乘法的经典算法已经被优化,以尽可能减少通信成本,一个完全不同的算法方法来解决这个问题是可能的。让我们回顾一下Strassen的算法<年代up>24(参见算法3)。
Strassen的关键思想是用7个标量乘而不是8个矩阵来乘2 × 2矩阵。因为<我>n我>×<我>n我>矩阵可以分为象限,Strassen的想法递归地应用。七象限的每一个乘法都是递归计算的,象限的加减法的计算成本为(<我>n我>2年代up>).因此,触发器计数的递归式为<我>F我>(<我>n我>) = 7<我>F我>(<我>n我>/ 2) + (<我>n我>2年代up>)与基本情况<我>F我>(1) = 1,得到<我>F我>(<我>n我>) = (<我米g src="https://dl.acm.org/cms/attachment/905dcba9-ff1d-4011-b0bc-b3427a05b7bf/cacm5702_i.gif" border="0" hspace="2" alt="cacm5702_i.gif">),其计算量渐近小于经典算法。
下面一节给出的主要结果揭示了一个奇妙的事实:Strassen的算法不仅比经典算法需要更少的计算,而且它需要更少的通信!
在这一节中,我们陈述了我们的主要结果:Strassen矩阵乘法的通信下界。第3节中描述的证明技术允许我们在顺序和并行的情况下声明边界。正如在第1节中提到的,下界比经典算法的下界要低。<年代up>18,20.在顺序和并行的情况下,现在都存在达到下界的通信最优算法。
2.1.连续的情况下
得到下界如下:
定理1。<年代up>10考虑Strassen的算法在一个内存大小为M的顺序机器上实现,那么对于mn我>2年代up>,<我>Strassen算法的通信代价为我>
它适用于任何实现和任何已知的Strassen算法变体,该算法是基于执行2 × 2矩阵乘法和7个标量乘法。这包括Winograd的<我>O我>(<我米g src="https://dl.acm.org/cms/attachment/905dcba9-ff1d-4011-b0bc-b3427a05b7bf/cacm5702_i.gif" border="0" hspace="2" alt="cacm5702_i.gif">)变体使用15次加法而不是18次,这是实践中最常用的快速矩阵乘法算法。
这个下界是紧的,因为它是通过标准的递归顺序实现Strassen的算法。通过递归式给出了递归算法的通信代价<我米g src="https://dl.acm.org/cms/attachment/4461f8d4-d6ca-492a-ad45-e57d4f92a84e/cacm5702_l.gif" border="0" hspace="2" alt="cacm5702_l.gif">.当输入和输出子矩阵适合快速存储器并且矩阵乘法可以在没有进一步通信的情况下执行时,就会发生基本情况。这个收益率
为<我>mn我>2年代up>,与定理1中的下界相匹配。
2.2.平行的情况下
定理1的证明技术可以推广到并行机器,从而得到
推论2。<年代up>10考虑Strassen的算法在一个有p个处理器的并行机器上实现,每个处理器的本地内存大小为m<我米g src="https://dl.acm.org/cms/attachment/ef43cfb5-7e65-4f86-afbb-450ef60000aa/cacm5702_m.gif" border="0" hspace="2" alt="cacm5702_m.gif">, Strassen算法的通信代价为我>
虽然推论2并不适用于所有大小的本地内存(相对于问题的大小和处理器的数量),但可以使用类似的技术证明以下与内存无关的下界<年代up>5并且适用于所有本地内存大小,尽管它需要单独的假设。
定理3。<年代up>5假设一个并行算法执行Strassen矩阵乘法负载平衡计算。则通信成本为我>
注意推论2中的界优于定理3中的界<我>米我>=<我>O我>(<我>n我>2年代up>/<我>p我>2 /日志7年代up>).因此,并行实现Strassen的最紧下界就是这两个边界的最大值。表2而且图3,都改编自Ballard等人,<年代up>5说明两个函数之间的关系。图3特别地,它显示了固定维度的强缩放边界<我>n我>,增加处理器的数量(每个处理器都有本地内存大小)<我>米我>)并不会增加通讯总量。因此,关键路径上的通信成本随时间线性降低<我>p我>.这是因为在这个“完美强缩放范围”中,主导下界包括一个<我>p我>分母;然而,当第二个界限开始占主导地位时,分母包含a<我>p我>2/3年代up>而不是<我>p我>,并增加<我>p我>导致更多的沟通量。如图所示,经典算法也出现了类似的现象,只是参数略有不同。<年代up>5,23
斯特拉森矩阵乘法的最新并行算法<年代up>6沟通成本
在哪里<我>p我>是处理器的数量和<我>米我>是本地内存的大小。注意,这与上面的推论2和定理3的下界相匹配。McColl和Tiskin给出了BSP模型中Strassen矩阵乘法的类似算法。<年代up>22
定理1证明的关键是估计Strassen算法计算图的边展开。下面我们将描述通信成本是如何与这个图的边展开特性密切相关的。图具有递归结构,我们用组合分析的方法展开。高级的参数是基于分段计算的,我们将在3.3节中解释。让我们首先定义两个关键概念:计算图和边展开。参见Ballard等人。<年代up>10为了充分的证据。
3.1.计算图
算法对给定输入所执行的计算可以建模为计算有向无环图(<我>CDAG我>):我们为每个输入、中间和输出参数设置了一个顶点,并根据直接依赖关系(例如,对于二进制算术操作)设置了边<我>x我>: =<我>y + z我>,我们有与操作数对应的顶点的有向边<我>y我>而且<我>z我>对应的顶点<我>x我>).
在顺序的情况下,实现(或调度)决定算术操作的执行顺序,这与CDAG的部分顺序有关。在并行情况下,实现决定哪些算术运算由哪个<我>p我>以及处理器对本地操作的排序。这对应于将CDAG划分为<我>p我>部分。各个部分之间的边交叉对应的是一个处理器拥有但另一个处理器需要的参数,因此与通信有关。
3.2.边缘扩张
展开是一个图论概念<年代up>19它将图的一个给定子集与其边界联系起来。如果一个图有较大的展开,那么顶点的子集就会有较大的边界。例如,每个顶点都有北、南、东、西邻居的2D网格的扩展较小,而一个完整的图的扩展较大。虽然扩展度量有几种变体,但我们感兴趣的是正则图的边展开,定义如下:边展开<我>h我>(<我>G我>)<我>d我>常规的无向图<我>G我>= (<我>V E我>)是
在哪里<我>E我>G我>(<我>A、B我>)是连接不相交顶点集的边的集合<我>一个我>而且<我>B我>.
注意,cdag通常是不规律的。如果一个图<我>G我>= (<我>V E我>)不是规则的,但有一个有界的极大度<我>d我>,然后添加(<<我>d我>)循环到度<的顶点<我>d我>,得到正则图<我>G我>.我们使用的惯例是,一个循环将顶点的度数加1。注意,对于任何<我>年代我>V我>我们有|<我>E我>G我>(<我>年代,V \ S我>)|<我>= | E我>G我>(<我>年代,V我>(S)|,因为添加的循环中没有一个对的边缘扩展有贡献<我>G我>.
对于许多图,小集合比大集合具有更大的展开。让<我>h我>年代我>(<我>G我>)表示的边展开<我>G我>对于大小最多的集合<我>年代我>:
对于许多有趣的图族(包括Strassen的CDAG),<我>h我>年代我>(<我>G我>)不依赖于|<我>V我>(<我>G我>) |<我>年代我>是固定的,尽管它可能在什么时候下降<我>年代我>增加。
3.3.分区参数
高级下界参数的基础是将算法实现的执行划分为多个段。让<我>O我>是尊重CDAG的部分排序的顶点的任何总排序<我>G我>,也就是说,所有边的总顺序都是向上的。这个总排序可以被认为是执行计算的实际顺序。让<我>P我>是<我>V我>成段<我>年代我>1年代ub>,<我>年代我>2年代ub>,……,这a segment<我>年代我>我我>P我>在整个排序中是连续的顶点的子集吗<我>O我>.
让<我>年代我>做一些线段,然后定义<我>R我>年代我>而且<我>W我>年代我>分别为读操作数和写操作数的集合(参见图4),即<我>R我>年代我>顶点的集合在外面吗<我>年代我>有一个边缘进入<我>年代我>,<我>W我>年代我>顶点的集合在里面吗<我>年代我>有一个边缘在外面<我>年代我>.回想一下,<我>米我>是快速内存的大小。然后,由于读取操作数而产生的总通信开销<我>年代我>至少是|<我>R我>年代我>|米我>最多<我>米我>所需的|<我>R我>年代我>当段启动时,|操作数已经在快速内存中。同样的,<我>年代我>导致至少|<我>W我>年代我>|<我>米我>实际的写操作,最多<我>米我>当这个段结束时,其他段需要的操作数会留在快速内存中。因此,总通信成本被限制在以下
3.4.边缘扩展和通信
考虑一个段<我>年代我>以及它的读写操作数<我>R我>年代我>而且<我>W我>年代我>(见图4).如果图<我>G我>包含<我>年代我>有<我>h我>(<我>G我>)边缘扩张,最大程度<我>d我>至少2|<我>年代我>的定义<我>h我>(<我>G我>)),我们有
结合(3),选择划分<我>V我>成|<我>V我>相同大小的|/s段<我>年代我>,我们获得<我>IO我>马克斯<年代ub>年代我>(|<我>V我>| / s)·(<我>h我>(<我>G我>)·<我>年代我>2<我>米我>) = (|<我>V我>| ?<我>h我>(<我>G我>))。在许多情况下,<我>h我>(<我>G我>)太小,无法达到期望的通信成本下限。通常情况下,<我>h我>(<我>G我>)是|的递减函数<我>V我>(<我>G我>) |;也就是说,随着相应算法的输入量和算术运算次数的增加(Strassen的算法就是这样),边的展开会逐渐恶化。在这种情况下,最好考虑扩展<我>G我>仅在小范围内:<我>IO我>马克斯<年代ub>年代我>(|<我>V我>|/<我>年代我>)·(<我>h我>年代我>(<我>G我>)·<我>年代我>2<我>米我>).选择最小的<我>年代我>这
我们获得
值的存在<我>年代我>|<我>V我>满足条件(4)的|/2并不总是保证的。在巴拉德等人的研究中,<年代up>10我们确认这个的存在<我>年代我>对于足够大的|的Strassen的CDAG<我>V我>|。
回想一下矩阵乘法的Strassen算法,并考虑它的计算图。如果我们让<我>H我>我我>为Strassen深度递归算法的计算图<我>我我>,然后<我>H我>对应于输入矩阵大小的计算<我>n我>×<我>n我>.让我们首先考虑<我>H我>1年代ub>所示图5,这对应于2 × 2矩阵的相乘。每个人<我>一个我>而且<我>B我>被“编码”为七对乘法输入,然后与乘法输出相对应的顶点被“解码”以计算输出矩阵<我>C我>.
通用计算图<我>H我>也有类似的结构:
表示由<我>内附我>一个我>的部分<我>H我>这对应于矩阵的编码<我>一个我>.同样的,<我>内附我>B我>,<我>12月我>C我>对应的部分<我>H我>计算的编码<我>B我>而解码<我>C我>,分别。图6展示了高水平的图片<我>H我>.在下一节中,我们将对CDAG进行更详细的描述。
4.1.递归结构
我们构造计算图<我>H我>我我>+1年代ub>通过构造<我>12月我>我我>+1年代ub>C我>从<我>12月我>我我>C我>而且<我>12月我>1年代ub>C我>,类似的构造<我>内附我>我我>+1年代ub>一个我>而且<我>内附我>我我>+1年代ub>B我>,然后将三个部分组合在一起。下面是递归构造的主要思想<我>12月我>我我>+1年代ub>C我>,这一点在图7.
在构建<我>内附我>我我>+1年代ub>一个我>而且<我>内附我>我我>+1年代ub>B我>以类似的方式,我们得到<我>H我>我我>+1年代ub>通过连接从<我>k我>th年代up>输出的顶点<我>内附我>我我>+1年代ub>一个我>而且<我>内附我>我我>+1年代ub>B我>到<我>k我>th年代up>输入的顶点<我>12月我>我我>+1年代ub>C我>,对应于元素级标量乘法。
4.2.Strassen边缘扩张
给定Strassen算法的CDAG的构造,我们现在陈述我们关于解码图的边缘展开的主要引理。证明技术类似于阿隆等人的扩张器分析。<年代up>2完整的证明,见巴拉德等人。<年代up>10
引理5。(主要引理)<我>12月边缘扩张我>k我>C我>是
通过另一个论点(巴拉德等人的证明。<年代up>10),我们就得到了
在哪里<我>年代我>= (7<年代up>k我>).选择<我>年代我>= (<我>米我>),我们满足不等式4并得到不等式5(对于足够大的|<我>V我>|)。这就得到定理1。
本文研究了两种机器模型上Strassen矩阵乘法的下界问题。然而,通过通信最小化改进基本算法的设计空间要大得多。它包括证明下界和开发最优算法;使用经典方法以及快速算法,如Strassen的;执行矩阵乘法,其他矩阵算法,和更一般的计算;尽量减少时间和/或精力;使用最小内存或牺牲额外内存以换取更少的通信;并使用层次、同构或异构的顺序和并行模型。在本节中,我们将讨论这些扩展的一个子集;参见巴拉德等人。<年代up>9, 10年代up>并参考其中的更多细节。
5.1.下界
第3节所描述的证明技术并不是Strassen算法所特有的,它可以被更广泛地应用。在数值线性代数中,划分参数被广泛应用于经典算法中<年代up>8, 20年代up>其中一个几何不等式指定了每段的通信成本,而不是边扩展。进一步,边缘展开技术适用于<我>Strassen-like我>方阵相乘的算法<我>o我>(<我>n我>3.年代up>)算术运算,到其他快速算法的矩形矩阵乘法,以及其他矩阵计算。
Strassen-like算法.类strassen算法是一种基于矩阵相乘方案的递归矩阵乘法算法<我>k我>×<我>k我>矩阵使用<我>问我>一些是标量乘法<我>k我>而且<我>q < k我>3.年代up>(这样算法才能执行<我>O我>(<我米g src="https://dl.acm.org/cms/attachment/f313c074-d40f-4227-a97a-521922da30ce/cacm5702_p.gif" border="0" hspace="2" alt="cacm5702_p.gif">)失败<我>0年代ub>=日志<年代ub>k我>问我>)。有关矩阵乘法运算复杂度的最新边界和对以前边界的引用,请参阅Williams。<年代up>25为了应用我们的下界证明,我们需要strassen类算法的另一个技术标准:解码图必须是连接的。这类算法包括许多(但不是全部)快速矩阵乘法。有关详细信息和示例,请参见Ballard等人。<年代up>7, 10年代up>
对于类strassen算法,通信下界的表述与定理1、推论2和定理3的形式相同:replace log<年代ub>2年代ub>7与<我>0年代ub>到处都看起来!证明技术遵循Strassen的算法。而经典算法的边界具有相同的形式,取代了log<年代ub>2年代ub>7和3,证明的技巧就大不相同了。<年代up>18, 20年代up>
快速矩形矩阵乘法.许多快速算法已经被设计用于矩形矩阵的乘法(见Ballard等人)。<年代up>7查看详细列表)。乘法的快速算法<我>米我>×<我>k我>而且<我>k我>×<我>r我>矩阵中<我>问我><<我>mkr我>标量乘法可以递归地应用于乘法<我>米我>t我>×<我>k我>t我>而且<我>k我>t我>×<我>r我>t我>矩阵中<我>O我>(<我>问我>t我>)失败。对于这类算法,CDAG的结构与Strassen和类Strassen的平方乘法算法非常相似,它由两个编码图和一个解码图组成。假设解码图是连通的,定理1和引理5的证明适用于我们插入的地方<我>先生我>而且<我>问我>4和7。在这种情况下,我们得到了一个类似于定理1的结果,该结果表明,这种算法的通信代价由(<我>问我>t我>/ M我>).如果输出矩阵是三个矩阵中最大的(即,<我>k我><<我>米我>而且<我>k我><<我>r我>),则该下界是由自然递归算法得到的,因此是紧的。下界也可以推广到并行情况,类似于推论2,并可以使用Ballard等人的算法技术得到。<年代up>6
剩下的数值线性代数.快速矩阵乘法算法是线性代数中许多快速算法的基本组成部分,如LU算法,QR算法,特征值和奇异值分解算法。<年代up>13因此,这些算法的通信代价下界可以由快速矩阵乘法算法的下界导出。例如,当LU算法在足够大的子矩阵上调用快速矩阵乘法算法时,LU上的下界(或QR等)就会出现。Demmel等人的算法就是这样,<年代up>13然后我们就可以推导出匹配的下界和上界。<年代up>10
嵌套循环计算.几乎所有证明通信下界的论据都是建立在一组给定数据和可用这些数据进行的有用计算量之间的关系,即所谓的“面体积比”(surface-to-volume)。例如,Hong和Kung<年代up>18利用cdg的显性集和最小集的分析来建立这样的比率。LoomisWhitney几何不等式被用于这个目的,在Ballard等人的三个嵌套循环指定的矩阵计算。<年代up>8和Irony等人。<年代up>20.最近,克里斯特等人。<年代up>12使用了卢米斯·惠特尼不等式(即HölderBrascampLieb不等式)的推广来扩展这一分析,以证明计算的下界,这些计算由任意一组线性访问数组并满足某些其他条件的嵌套循环指定。
5.2.算法
追求通信下界的主要动机是为算法的性能提供目标。事实上,定理1和推论2的猜想和证明,以及序列情况下最优算法的存在,是改进Strassen算法并行实现的主要动机。我们不仅能够设计出一种最优算法,而且还能够通过分布式内存机器的实现展示它在实践中执行得更快。<年代up>621岁年代up>
通信避免平行斯特拉森.在第2.2节中,我们说明了一个新的并行Strassen矩阵乘法算法的通信代价,匹配渐近下界。该算法的细节出现在Ballard等人,<年代up>6Lipshitz等给出了更广泛的实现细节和性能数据。<年代up>21我们证明了新算法比我们已知的任何其他并行矩阵乘法算法,包括基于经典算法的并行矩阵乘法算法和基于Strassen算法的并行矩阵乘法算法都更高效。
图1显示Cray XT4上的性能。有关其他机器上的结果,请参阅Lipshitz等人。<年代up>21例如,在一个有10,000个核的Cray XE6上运行,以解决维度问题<我>n我>= 131712时,我们的新算法对经典矩阵乘法的性能比峰值高出30%,比最佳经典实现高出83%,比Strassen算法之前的最佳实现高出75%。即使是很小的维度问题<我>n我>= 4704,它的性能比最好的经典实现高66%。
进一步的应用.我们并行实现Strassen算法的关键算法思想是对递归树进行仔细的并行遍历。这种想法适用于许多其他递归算法,其中子问题不具有相互依赖关系(在存在依赖关系的某些情况下也适用)。例如,经典的矩形矩阵乘法<年代up>14稀疏矩阵矩阵乘法<年代up>4可以通过这种并行化方式来获得通信的最优化。
同样的技术可以用于在算法层面节省能量(因为通信比计算消耗更多的能量),以及获得能量需求的下限。<年代up>15
总之,我们相信从算法开发到高效实现的理论下界的工作流程是非常有效的:通过在算法级别考虑基础计算,许多应用程序的显著改进是可能的。
我们要感谢Benjamin Lipshitz在这些想法上所做的工作,以及在撰写本文期间所做的有益讨论。
这项工作得到了微软(奖#024263)和英特尔(奖#024894)的资助,并得到了U.C. Discovery(奖#DIG07-10227)的匹配资助;Par Lab子公司国家仪器、NEC、诺基亚、NVIDIA和三星的额外支持也得到了认可。该研究由美国能源部拨款支持,拨款编号为DE-SC0003959、DE-SC0004938、DE-SC0005136、DE-SC0008700、AC02-05CH11231和DE-FC02-06-ER25786, DARPA拨款编号为HR0011-12-2-0016。该研究还得到了亚历山大·冯·洪堡基金会的Sofja Kovalevskaja项目和国家科学基金会DMS-0635607协议的支持,以及ERC启动资金编号239985的支持。
1.Agarwal, r.c., Balle, s.m., Gustavson, f.g., Joshi, M., Palkar, P.平行矩阵乘法的三维方法。<我>IBM J. Res. Dev我>, 5(1995), 575582。
2.阿隆,N.,施瓦茨,O.,夏皮拉,A.恒度扩张器的基本构造。<我>选择符。Probab。第一版。17我>, 3(2008), 319327。
3.Anderson, E., Bai, Z., Bischof, C., Demmel, J., Dongarra, J., Croz, J.D., Greenbaum, A., Hammarling, S., McKenney, A., Ostrouchov, S., Sorensen, D. LAPACK的用户指南,工业和应用数学协会,费城,宾夕法尼亚州,美国,1992。也可以从http://www.netlib.org/lapack/.
4.巴拉德,G., Buluç, A., Demmel, J., Grigori, L., Lipshitz, B., Schwartz, O., Toledo, S.稀疏随机矩阵的通信最优并行乘法。在<我>第25届美国计算机学会并行算法与体系结构研讨会论文集我>, (2013), ACM,纽约,纽约,美国。
5.Ballard, G., Demmel, J., Holtz, O., Lipshitz, B., Schwartz, O.简短声明:矩阵乘法算法的强缩放和与内存无关的通信下界。在<我>第24届美国计算机学会并行算法与体系结构研讨会论文集我>, (2012), ACM,纽约,纽约,美国,7779。
6.Ballard, G., Demmel, J., Holtz, O., Lipshitz, B., Schwartz, O.用于Strassen矩阵乘法的通信最优并行算法。在<我>第24届美国计算机学会并行算法与体系结构研讨会论文集我>, SPAA '12 (2012), ACM,纽约,纽约,美国,193204。
7.Ballard, G., Demmel, J., Holtz, O., Lipshitz, B., Schwartz, O.矩形矩阵快速乘法通信代价的图展开分析。在<我>算法设计与分析我>.G. Even和D. Rawitz,编辑。,第7659卷<我>计算机科学课堂讲稿我>(2012),施普林格,柏林-海德堡,1336。
8.巴拉德,德梅尔,J.,霍兹,O.,施瓦茨,O.图展开和矩阵快速乘法的通信成本。在<我>第23届ACM并行算法与体系结构年会论文集我>(2011), ACM,纽约,纽约,美国,112。
9.Ballard, G., Demmel, J., Holtz, O., Schwartz, O.最小化数值线性代数中的通信。<我>矩阵肛门。: 32。我>, 3(2011), 866901。
10.巴拉德,德梅尔,J.,霍兹,O.,施瓦茨,O.图展开和矩阵快速乘法的通信成本。<我>j . ACM我>(2012年12月)<我>59我>6 32:132:23。
11.大炮,L。<我>用蜂窝计算机实现了卡尔曼滤波算法我>.博士论文,蒙大拿州立大学,博兹曼,蒙大拿州(1969)。
12.Christ, M., Demmel, J., Knight, N., Scanlon, T., Yelick, K.通信下界和最优算法,程序引用数组第一部分,手稿,2013。
13.Demmel, I. Dumitriu, I. Holtz, O.快速线性代数是稳定的。<我>号码。108年数学。我>, 1(2007), 5991。
14.Demmel, J., Eliahu, D., Fox, A., Kamil, S., Lipshitz, B., Schwartz, O., Spillinger, O.通信-最优并行递归矩形矩阵乘法。在<我>第27届IEEE国际并行与分布式处理研讨会论文集我>(<我>IPDPS我>)(2013年),IEEE。
15.Demmel, J., Gearhart, A., Lipshitz, B., Schwartz, O.完美的强缩放不需要额外的能量。在<我>第27届IEEE国际并行与分布式处理研讨会论文集我>, ipdps '13 (2013), ieee;
16.富勒,s.h.,米莱特,l.i.,编辑。<我>计算性能的未来:游戏结束还是下一个阶段?我>国家科学院出版社,华盛顿特区,2011年,200页,http://www.nap.edu.
17.格雷厄姆,s.l.,斯尼尔,M,帕特森,c.a.编辑。<我>《赶上速度:超级计算的未来我>.国家科学院国家研究委员会报告。国家科学院出版社,华盛顿特区,2004年,289页,http://www.nap.edu.
18.Hong, j.w., Kung, H.T. I/O复杂性:红蓝鹅卵石游戏。在<我>第13届ACM计算理论年会论文集我>(1981), ACM,纽约,美国,326333。
19.Hoory, S., Linial, N., Wigderson A.。<我>公牛。AMS 43我>(4),(2006), 439561。
20.反语,D.,托莱多,S.,提斯金,A.分布式存储矩阵乘法的通信下界。<我>j . Distrib平行。64年第一版。我>, 9,(2004), 10171026。
21.利普希茨,B.,巴拉德,G.,德梅尔,J.,施瓦兹,O.。在<我>高性能计算、网络、存储和分析国际会议论文集我>, (2012), IEEE计算机学会出版社,Los Alamitos, CA, USA, 101:1101:11。
22.王志强,王志强,王志强,等。BSP模型中的内存效率矩阵乘法。<我>Algorithmica 24我>(1999), 287297。
23.李志强,李志强,李志强。通信最优并行2.5D矩阵乘法和LU因子分解算法。在<我>第十七届欧洲并行与分布式计算国际会议论文集我>(2011),施普林格。
24.高斯消去不是最优的。<我>号码。数学。13我>(1969), 354356。
25.做矩阵乘法的速度比Coppersmith-Winograd快。在<我>第44届计算理论研讨会论文集我>, STOC '12 (2012), ACM,纽约,纽约,美国,887898。
图1。Cray XT4上并行矩阵乘法算法的强尺度性能比较。<年代up>6年代up>所有数据都对应于一个固定的维度<我>n我>= 94080。的<我>x我>-axis表示处理器数量<我>p我>在对数尺度上<我>y我>-轴衡量有效的表现,或2<我>n我>3.年代up>/(<我>p我>·时间)。新算法优于所有其他已知算法,并超过了与经典触发器计数有关的机器的峰值性能。对于这个问题规模,新算法比之前最好的strassen算法快24184%,比最好的经典算法快5184%。
图3。沟通成本和矩阵乘法的强扩展性:经典vs. Strassen。<年代up>5年代up>纵轴对应于<我>p我>乘以通信成本,所以水平线对应完美的强缩放。的数量<我>p我>最小值年代ub>是存储输入输出矩阵所需的最小处理器数量(即<我>p我>最小值年代ub>= 3<我>n我>2年代up>/<我>米我>在哪里<我>n我>矩阵维数是和吗<我>米我>是本地内存大小)。
图4。一个子集(段)<我>年代我>和它对应的读操作数<我>R我>年代我>和写操作数<我>W我>年代我>.
图5。Strassen 2 × 2矩阵相乘算法的计算图(<我>H我>1年代ub>).的编码<我>一个我>而且<我>B我>对应算法3第410行加减法,以及对7次乘法的解码计算<我>C我>对应于第1114行。带两个指标的顶点<我>ij我>对应于(<我>我,我我>)<年代up>th年代up>矩阵的一个项和一个标为一个下标的顶点<我>k我>对应于<我>k我>th年代up>中间的乘法。
图6。对Strassen的CDAG的高层观点<我>n我>×<我>n我>矩阵。该图由两个编码子图和一个解码子图组成;子图之间的连接没有显示。
图7。译码子图的递归构造的示例。构建<我>12月我>我我>+1年代ub>C, 12月我>我我>C我>被复制了4次<我>12月我>1年代ub>C我>复制7<年代up>我我>确定时间和适当的顶点。
表1。序列矩阵乘法的渐近通信代价下界,其中<我>n我>矩阵维数是和吗<我>米我>是快速内存大小。注意,虽然古典和Strassen的表达式是相似的,但证明技术是相当不同的
表2。并行矩阵乘法的渐近通信代价下界,其中<我>n我>矩阵维数,<我>米我>是本地内存大小,和<我>p我>是处理器的数量吗
©2014 0001 - 0782/14/02 ACM
如果您不是为了盈利或商业利益而制作或分发本作品的部分或全部,并在第一页注明本通知和完整引用,则允许您免费制作本作品的部分或全部数字或纸质副本,供个人或课堂使用。本作品的组成部分必须由ACM以外的其他人享有版权。信用文摘是允许的。以其他方式复制、重新发布、在服务器上发布或重新分发到列表,需要事先获得特定的许可和/或费用。请求发布的权限permissions@acm.org或传真(212)869-0481。
数字图书馆是由计算机协会出版的。版权所有©2014 ACM股份有限公司
没有发现记录