科学计算中是否存在无法通过并行化加速的著名问题/算法?在我看来,在CUDA上读书时,大多数事情都是可以做到的。
科学计算中是否存在无法通过并行化加速的著名问题/算法?在我看来,在CUDA上读书时,大多数事情都是可以做到的。
Answers:
中心问题是相对于计算总量的关键路径的长度。如果与成正比,那么并行性最多可提供恒定的加速。如果渐近地小于,则随着问题大小的增加,还有更多并行性的余地。对于输入大小为是多项式的算法,最好的情况是因为在少于对数时间的情况下很少能计算有用量。Ť Ç Ť Ç Ť Ť Ñ Ç 〜日志Ť
该NC复杂类表征能够有效地并联来解决(即,在时间polylogarithmic)这些问题。未知是否,但是广泛假设它是错误的。如果确实如此,则P-complete表征那些“固有地顺序”的问题,并且不能通过并行性显着加速。
首先要了解阿姆达尔定律。基本上,具有大量串行步骤的所有内容都将从并行性中受益匪浅。一些示例包括解析,正则表达式和大多数高比率压缩。
除此之外,关键问题通常是内存带宽的瓶颈。特别是在大多数GPU上,理论上的触发器大大超过了ALU可以得到的浮点数,因为这种算术强度低的算法(触发器/高速缓存丢失)将花费大量时间等待RAM。
最后,任何时候只要一段代码需要分支,就不可能获得良好的性能,因为ALU通常比逻辑要多。
总而言之,一个很难从GPU上获得速度提升的东西的一个非常简单的例子就是简单地计算整数数组中的零个数,因为您可能不得不经常分支,最多执行1次操作(递增1)。一个),如果您发现一个零,并且每个操作至少获取一个内存。
一个没有分支问题的例子是计算一个向量,该向量是另一个向量的累加和。([1,2,1]-> [1,3,4])
我不知道这些是否算是“著名的”,但是肯定存在大量并行计算无法帮助您的问题。
不能通过并行化加快求解Eikonal方程的(著名的)快速行进方法。还有其他方法(例如快速扫描方法)可以更容易地并行化Eikonal方程,但是即使在这里,(并行)加速的潜力也受到了限制。
Eikonal方程的问题在于信息流取决于解本身。松散地说,信息沿着特性(即光学中的光线)流动,但是特性取决于解决方案本身。离散的Eikonal方程的信息流甚至更糟,如果需要并行加速,则需要附加的近似值(例如快速扫描方法中隐含的近似值)。
要了解并行化的困难,请想象一个不错的迷宫,就像Sethian网页上的一些示例中那样。通过迷宫的最短路径上的像元数目(可能)是解决相应问题的任何(并行)算法的最小步数/迭代次数的下限。
(我之所以写“(可能)是”,是因为众所周知,下界很难证明,并且通常需要对算法使用的运算进行一些合理的假设。)
在实践中很难并行化的另一类问题是对舍入错误敏感的问题,其中通过序列化可以实现数值稳定性。
考虑例如Gram–Schmidt过程及其串行修改。该算法适用于矢量,因此您可以使用并行矢量运算,但伸缩性不佳。如果向量的数量大且向量的大小小,则使用并行经典Gram–Schmidt和重新正交化可能比单个修改的Gram–Schmidt稳定且速度更快,尽管这需要进行数倍的工作。