【问题标题】:What are the theoretical upper limits on parallelizability?可并行性的理论上限是多少?
【发布时间】:2020-05-01 13:29:52
【问题描述】:
我想知道计算并行化的理论上限。
假设我们有一个进程需要时间T 才能完成 1 个内核。
- 如果由于串行瓶颈(通常是从磁盘读取)而导致进程完全不可并行,那么无论我们使用多少内核,都需要
T 秒。
- 如果进程是perfectly parallelizable,我们可以使用
K 核心在T/K 秒内完成。
- 如果我们要完成
N 等效进程,其中N >> K,那么我们应该并行运行多个进程,而不是并行化任何给定进程。在任何一种情况下,完全可并行化的流程都需要 NT/K 时间,但包含串行瓶颈的作业可能需要高达 NT 时间。
理论上,是否有任何“超级可并行化”的计算工作负载需要少于 T/K 秒来完成K 内核?换句话说,当更多内核可用时,实际需要更少总时间的工作负载。在这种情况下,实际上最好将最后一种情况下的每个作业与N 进程并行化。
【问题讨论】:
标签:
parallel-processing
computation-theory
【解决方案1】:
是的,这是一类重要且重要的问题:受 I/O 限制的问题。
假设您有 10,000 个进程实例,每个实例大约需要 9 秒的 I/O 和 1 秒的 CPU/处理时间。现在假设您有一千个处理器。如果您只是将 10,000 个问题实例分布在 1,000 个处理器上,则制造时间(在所有处理器上完成所有工作的总时间)将需要大约 100 秒(每个处理器上有 10 个进程,每个进程 10 秒,每个处理器 100 秒)。如果您改为并行运行所有 10,000 个进程,您会看到接近 10 秒的制造时间。
这也适用于进程内。想象一个具有 10 个阶段的进程,这些阶段都是 I/O 绑定且完全独立的。如果每个阶段需要 10 秒,那么在一个内核上运行该进程的总时间为 100 秒。如果你在 10 个内核上并行处理,那么时间将接近 10 秒。这可能是您的“超级可并行化”进程的一个很好的候选者,它不仅可以从将进程分配到不同的机器中受益,而且还可以并行化各个进程。
因此,一种情况是您有大量作业,每个作业都执行大量不相关的 I/O 绑定操作。如果您按顺序运行所有内容,那么您将花费大量时间等待 I/O,即使只考虑单个进程也是如此。