可并行性的理论上限是多少?
What are the theoretical upper limits on parallelizability?
我想知道计算并行化的理论上限。
假设我们有一个进程需要 T
时间才能用 1 个核心完成。
- 如果进程由于串行瓶颈(通常是从磁盘读取)而完全无法并行化,则无论我们使用多少核,都将需要
T
秒。
- 如果进程是 perfectly parallelizable,我们可以使用
K
个核心在 T/K
秒内完成它。
- 如果我们有
N
个等效流程要完成,其中 N
>> K
,那么我们应该 运行 并行处理多个流程,而不是并行化任何给定流程.在任何一种情况下,完全可并行化的进程都将花费 NT/K
时间,但包含串行瓶颈的作业最多可能需要 NT
时间。
理论上,是否有任何 "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,即使只考虑单个进程也是如此。
我想知道计算并行化的理论上限。
假设我们有一个进程需要 T
时间才能用 1 个核心完成。
- 如果进程由于串行瓶颈(通常是从磁盘读取)而完全无法并行化,则无论我们使用多少核,都将需要
T
秒。 - 如果进程是 perfectly parallelizable,我们可以使用
K
个核心在T/K
秒内完成它。 - 如果我们有
N
个等效流程要完成,其中N
>>K
,那么我们应该 运行 并行处理多个流程,而不是并行化任何给定流程.在任何一种情况下,完全可并行化的进程都将花费NT/K
时间,但包含串行瓶颈的作业最多可能需要NT
时间。
理论上,是否有任何 "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,即使只考虑单个进程也是如此。