事实上,精确的操作总数很少被用作计算成本的衡量标准。相反,您会经常看到计算顺序(即O(n3))。这个“大 O”符号大致意味着操作的数量与n3并告诉您操作总数如何随着未知数的变化而扩展。这是计算复杂性的一个非常有用的度量,因为它可以在您扩大问题规模时为您提供相对成本的估计。
考虑一个简单的例子:求解线性方程组
高斯消元法是O(n3)因此,如果您将未知数增加一倍,则需要23=8倍。如果您正在执行 3D 计算和一半的网格间距,您将拥有23=8网格点数(未知数)的倍数,需要做83=512解决您的线性系统的工作量要多倍。
代数多重网格(AMG) 求解线性系统O(n)时间。尽管使用 AMG 求解一个小型方程组可能需要更长的时间,但随着您增加未知数的数量,工作的扩展速度会慢得多。在这种情况下,未知数的 8 倍意味着工作量的 8 倍。
上述讨论完全独立于并行与串行执行。一般来说,并行性能是根据并行效率来讨论的。并行效率通常取决于问题大小和进程数量,定义为
Efficiency(n,p)=T1(n)p⋅Tp(n,p)
在哪里n是未知数的数量,p是进程数,并且Tp是运行时使用p过程。例如,具有 50% 并行效率的算法在 10 核上的运行速度是单核的 5 倍(而不是 10 核上的 10 倍)。
请注意,并行效率不会影响计算顺序,反之亦然。计算复杂度反映了必须执行的浮点运算的数量,它不依赖于使用的进程数量。另一方面,并行效率很大程度上取决于算法的通信要求,因为它与通信带宽和延迟密切相关。如果每个进程都必须始终相互通信,那么并行效率将非常低。另一方面,不需要进程之间通信的算法被称为“令人尴尬的并行”,并且可以实现近 100% 的并行效率。这是典型的蒙特卡洛算法。
尽管在大型计算之外它可能没有被广泛讨论,但由于许多核心计算机的普及,并行效率正迅速变得几乎与计算顺序一样重要。