多处理器响应时间

一个多处理器只能将一个独立程序的执行时间改进到让该程序可以多线程方式运行的程度。

有几种方法可以让一个单独程序的某些部分实现并行执行:

  • 显式调用 libpthreads.a 子例程(或者,在较老的程序中:调用 fork() 子例程)以创建多个同时运行的线程。
  • 用一个并行化的编译器或者预处理器处理程序,该编译器或预处理器会检测到可同时执行的代码序列,并生成多个线程来并行运行这些代码。
  • 使用一个本身是多线程的软件包。

除非使用这些技术的一种或多种,程序在一个多处理器系统中不会比在一个相当的单处理器中运行得快。 事实上,由于程序会经历更多的锁定开销和在不同时间分派到不同处理器而产生的延迟,它有可能会更慢。

即使所有可用的技术都用到了,最大限度的改进也受到一个称为“Amdahl 定律”规则的限制。

  • 如果程序在单处理器中的执行时间 tx 分之一只能进行顺序处理,与相当的单处理器的执行时间相比,n 路多处理器中的执行时间的改进 (speed-up) 由以下等式给出:
图 1。 阿姆达尔定律。 Amdahl 定律说明,speed-up 等于单处理器时间除以序列时间加上多处理器时间,或者是 1 除以 x 加上(x 除以 n)的和。 Lim speed-up 等于 1 除以 x,n 等于无穷大。
Amdahl 定律

举例来说,如果一个程序的 50% 的处理必须顺序执行,50% 可以并行执行,那么最大的响应时间改进小于因子 2(在另一个闲置的 4 路多处理器中,该值至多为 1.6)。