科学计算中是否存在无法通过并行化加速的著名问题/算法


27

科学计算中是否存在无法通过并行化加速的著名问题/算法?在我看来,在CUDA上读书时,大多数事情都是可以做到的。


即使考虑内存层次结构,也无法加快二进制搜索的速度(重要的是,由于某种原因)。


3
@Anycorn不,左眼的古典Gram-Schmidt和右眼的改良Gram-Schmidt可以并行工作。还有许多其他并行QR算法,包括最近流行的TSQR。
杰德·布朗

@Raphael:我认为ist可以通过log(n),n =#processors来加速二进制搜索。而是o将搜索间隔分为几部分并检查要从哪里继续,将间隔分为n部分。我不知道,也许有更有效的方法。
miracle173

Answers:


32

中心问题是相对于计算总量的关键路径的长度。如果与成正比,那么并行性最多可提供恒定的加速。如果渐近地小于,则随着问题大小的增加,还有更多并行性的余地。对于输入大小为是多项式的算法,最好的情况是因为在少于对数时间的情况下很少能计算有用量。Ť Ç Ť Ç Ť Ť Ñ Ç 日志ŤCTCTCTTNClogT

例子

  • C=T对于使用标准算法的三对角线求解,。每个操作都取决于先前的操作完成,因此没有机会进行并行处理。三对角线问题可以在对数时间内在并行计算机上使用嵌套解剖直接求解,多级域分解或具有使用谐波扩展构造的基函数的多重网格来解决(这三种算法在多个维度上是不同的,但在一维中可以完全重合)。
  • 具有矩阵的密集下三角求解具有,但关键路径仅为,因此一些并行性可能是有益的。T = N = Om 2C = m = m×mT=N=O(m2)C=m=T
  • 多重网格和FMM均具有,具有长度的关键路径。C = 对数TT=NC=logT
  • 在域的规则网格上的时间上的显式波传播需要时间步长(因此稳定性)关键路径至少为。总功为。处理器的最大可用数量为,剩余因子无法通过提高并行度来恢复。0 1 d ķ = τ / Δ τ Ñ 1 / d ç = ķ Ť = ķ Ñ = τ Ñ d + 1 / d P = Ť / C ^ = Ñ Ñ 1 / dτ(0,1)dk=τ/ΔtτN1/dC=kT=kN=τN(d+1)/dP=T/C=NN1/d

形式上的复杂性

NC复杂类表征能够有效地并联来解决(即,在时间polylogarithmic)这些问题。未知是否,但是广泛假设它是错误的。如果确实如此,则P-complete表征那些“固有地顺序”的问题,并且不能通过并行性显着加速。NC=P


13

NCO(logcn)O(nk)P=NCPPPPNCPNCP=NC

PP


9

首先要了解阿姆达尔定律。基本上,具有大量串行步骤的所有内容都将从并行性中受益匪浅。一些示例包括解析,正则表达式和大多数高比率压缩。

除此之外,关键问题通常是内存带宽的瓶颈。特别是在大多数GPU上,理论上的触发器大大超过了ALU可以得到的浮点数,因为这种算术强度低的算法(触发器/高速缓存丢失)将花费大量时间等待RAM。

最后,任何时候只要一段代码需要分支,就不可能获得良好的性能,因为ALU通常比逻辑要多。

总而言之,一个很难从GPU上获得速度提升的东西的一个非常简单的例子就是简单地计算整数数组中的零个数,因为您可能不得不经常分支,最多执行1次操作(递增1)。一个),如果您发现一个零,并且每个操作至少获取一个内存。

一个没有分支问题的例子是计算一个向量,该向量是另一个向量的累加和。([1,2,1]-> [1,3,4])

我不知道这些是否算是“著名的”,但是肯定存在大量并行计算无法帮助您的问题。


3
您提供的“免费分支示例”是前缀总和,实际上它有一个很好的并行算法:http.developer.nvidia.com/GPUGems3/gpugems3_ch39.html 由于相似的原因,计算零的数量应该是有效的。不过,无法绕开算术强度……
Max Hutchinson 2014年

凉。我对那一个更正。
meawoppl 2014年

8

不能通过并行化加快求解Eikonal方程的(著名的)快速行进方法。还有其他方法(例如快速扫描方法)可以更容易地并行化Eikonal方程,但是即使在这里,(并行)加速的潜力也受到了限制。

Eikonal方程的问题在于信息流取决于解本身。松散地说,信息沿着特性(即光学中的光线)流动,但是特性取决于解决方案本身。离散的Eikonal方程的信息流甚至更糟,如果需要并行加速,则需要附加的近似值(例如快速扫描方法中隐含的近似值)。

要了解并行化的困难,请想象一个不错的迷宫,就像Sethian网页上的一些示例中那样。通过迷宫的最短路径上的像元数目(可能)是解决相应问题的任何(并行)算法的最小步数/迭代次数的下限。

(我之所以写“(可能)是”,是因为众所周知,下界很难证明,并且通常需要对算法使用的运算进行一些合理的假设。)


很好的例子,但我不相信您声称的下限。特别地,可以使用多重网格方法来求解本征方程。与用于高频亥姆霍兹的多重网格一样,挑战主要在于设计合适的粗糙空间。在迷宫的情况下,图聚合策略应该是有效的,其粗略表示是通过解决迷宫各部分的局部(因此独立)问题来确定的。
杰德·布朗

通常,当多网格方法运行良好时,这意味着问题的粒度要比去除问题的粒度低,并且过程解决步骤中会出现不成比例的“正确答案数量”。只是一个观察,但这种事情的下限很棘手!
meawoppl

@JedBrown从实际的角度来看,高频亥姆霍兹的多电网非常具有挑战性,与您的评论似乎暗示的相反。至少可以说,将多重网格用于eikonal方程是“罕见的”。但是我看到了您对建议的下限的“理论”异议:迷宫内部各个点的时间偏移可以在已知到达这些点的时间之前进行计算,并在缺少信息可用后并行添加。但是在实践中,如果通用并行本机求解器实际上接近边界,它们将很高兴。
Thomas Klimpel,2012年

我并不是要暗示这很容易,因为波状的粗糙空间确实是非常技术性的。但是,我认为我们同意开放区域中已经存在并行化的机会,而在狭窄的“迷宫”中(使用标准方法几乎看不到并行性),升级问题更容易解决。
杰德·布朗

@JedBrown幻灯片的39 www2.ts.ctw.utwente.nl/venner/PRESENTATIONS/MSc_Verburg.pdf(2010年)说,比如像“扩展从2D求解器3D”和“适应方法的问题强烈变化的波数”。因此,波浪射线多重网格可能是有前途的,但是“不成熟”似乎比“非常技术性”更适合描述当前问题。它并不是真正的高频亥姆霍兹求解器(因为它是“全波”求解器)。还有其他一些“足够成熟”的多重网格亥姆霍兹求解器(“全波”求解器),但是即使这些仍然是“活跃的研究”。
Thomas Klimpel '02

1

在实践中很难并行化的另一类问题是对舍入错误敏感的问题,其中通过序列化可以实现数值稳定性。

考虑例如Gram–Schmidt过程及其串行修改。该算法适用于矢量,因此您可以使用并行矢量运算,但伸缩性不佳。如果向量的数量大且向量的大小小,则使用并行经典Gram–Schmidt和重新正交化可能比单个修改的Gram–Schmidt稳定且速度更快,尽管这需要进行数倍的工作。

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.