在计算机设计的早期,为了满足更高的计算性能需求,Single-CPU系统发展成为Multi-CPU系统。最近,在系统设计中类似的趋势是在一个芯片上放置多个计算核心。每个内核作为一个单独的CPU出现在操作系统(第1.3.2节)。无论内核是出现在CPU芯片上还是在CPU芯片中,我们都称这些系统为多核系统。多线程编程提供了一种机制,可以更有效地使用这多个计算核心并改进并发性。考虑一个具有四个线程的应用程序。在具有单个计算核心的系统上,并发性仅仅意味着线程的执行将会随着时间的推移而交叉(图4.3),因为处理器核心能够一次只执行一个线程。然而,在具有多个核心的系统上,并发意味着线程可以并行运行,因为系统可以为每个核心分配一个单独的线程(图4.4)。

一定要区分并行(parallelism)并发(concurrency)的区别。

当一个系统可以同时的执行多个任务的话,那么这个系统就是并行的。

作为对照,并发系统支持允许所有任务都取得进展。因此,并发的系统可以不具有并行性。在SMP和多核架构出现之前,大多数计算机系统只有一个处理器。CPU调度程序的设计目的是通过在系统中的进程之间快速切换来提供并行性的假象,从而允许每个进程取得进展。这样的进程是并发运行的,但不是并行的。

随着系统从数十个线程扩展到数千个线程,CPU设计人员通过添加硬件来提高线程性能,从而改进了系统性能。现代的Intel CPU经常支持每个核心两个线程,而Oracle T4 CPU支持每个核心8个线程。这种支持意味着可以将多个线程加载到内核中以进行快速切换。多核计算机无疑将继续增加核心数和硬件线程支持。

AMDAHL’准则:

Amdahl定律是在具有串行(即非并行)和并行组件的应用程序中添加额外的计算核心,识别潜在的性能增益的公式。如果S是应用程序的一部分,必须在具有N个处理核心的系统上连续执行,则该公式如下:

speedup  ≤ 1 / (S + (1 - S) / N )

例如,假设我们的应用程序有75%是并行的,25%是串行的。如果我们在一个有两个处理器核心的系统上运行这个应用程序,我们可以得到1.6倍的加速。如果我们添加两个额外的核心(总共4个),加速率是2.28倍。

关于Amdahl定律的一个有趣的事实是当N趋于无穷时,speedup收敛到1/S。例如,如果40%的应用程序是串行执行的,那么最大加速2.5倍,无论我们添加多少处理器核心数量。这是基本原理Amdahl法则:应用程序的串行部分应可以对我们通过添加额外的处理器核心来提升性能产生一个不成比例的影响。

一些人认为,Amdahl的法律没有考虑到现代多核系统设计中使用的硬件性能的增强。这些论证表明,随着现代计算机系统的处理核心数量不断增加,Amdahl的法律可能不再适用。

results matching ""

    No results matching ""