可并行性的理论上限是多少?

What are the theoretical upper limits on parallelizability?

我想知道计算并行化的理论上限。

假设我们有一个进程需要 T 时间才能用 1 个核心完成。

理论上,是否有任何 "super-parallelizable" 计算工作负载需要 少于 T/K 秒才能用 K 个核心完成?换句话说,当有更多内核可用时,实际需要更少总计时间的工作负载。在这种情况下,实际上最好将最后一种情况下的每个作业与 N 个进程并行化。

是的,这是一个大而重要的 class 问题:I/O 绑定的问题。

假设您有 10,000 个进程实例,每个实例大约需要 I/O 9 秒和 CPU/processing 1 秒。现在假设你有一千个处理器。如果您只是将 10,000 个问题实例分布到 1,000 个处理器上,则完工时间(完成所有处理器上所有工作的总时间)大约需要 100 秒(每个处理器上有 10 个进程,每个进程 10 秒,每个处理器 100 秒)。如果您改为 运行 所有 10,000 个并行进程,您会看到接近 10 秒的完工时间。

这在进程内也有效。想象一个有 10 个阶段的过程,这些阶段都是 I/O 绑定且完全独立的。如果每个阶段需要 10 秒,那么 运行 一个核心上的进程的总时间是 100 秒。如果将其并行化到 10 个内核,则时间将接近 10 秒。这可能是您的 "super-parallelizable" 进程的一个很好的候选者,它不仅可以从将进程分布到不同的机器中获益,还可以并行化各个进程。

因此,一种情况是您有大量作业,每个作业执行大量不相关的 I/O 绑定操作。如果您 运行 按顺序执行所有操作,那么您将花费绝大部分时间等待 I/O,即使只考虑单个进程也是如此。