天天看点

《高性能科学与工程计算》——1.4 多核处理器

本节书摘来自华章计算机《高性能科学与工程计算》一书中的第1章,第1.4节,作者:(德)georg hager gerhard wellein 更多章节内容可以访问云栖社区“华章计算机”公众号查看。

近年来并且至少在接下来的十年,虽然摩尔定律依然成立,但标准的微处理器开始遇到散热问题:数百万个晶体管芯片的开关和漏电功耗如此之大,使散热成为一个工程和商业主要关注的问题。另一方面,由于硬件架构方面的改进和cache尺寸的增加,促进了时钟频率不断提高,但已不足以获得符合摩尔定律1比1的性能提升。处理器厂商们正在寻找一种突破这种能耗性能瓶颈的新方法——多核设计。

对于半导体处理技术,cpu的功耗和时钟频率fc的三次方成比例(实际上是fc和电源电压vcc的二次方的乘积,但是fc与vcc成比例),所以降低频率和电压就可以明显地降低功耗,这是多核技术背后的动机。假设有一个单核时钟频率是fc,性能是p,功耗是w,时钟频率的微小变化(εf = ?fc/fc)会引起性能方面的变化(εp=?p/p),在所有其他条件一样的条件下,|εf|是|εp|的上限,这也要考虑具体的应用。功率消耗为:

《高性能科学与工程计算》——1.4 多核处理器

https://yqfile.alicdn.com/91d6f2e5b62ab1455065311bedb34e8d54311622.png

" >

从式(1-7)中可看出,在保证功耗不变的前提下,降低时钟频率创造了将多个cpu核放在同一个晶片(更一般地为同一个组件)上的可能性。而对于m个“慢”核,这个条件表示为:

《高性能科学与工程计算》——1.4 多核处理器

这些核和速度更快的核有相同的晶体管数量,但是根据摩尔定律,增加晶管的数量并不增加成本。图1-14显示了频率与处理器核的数量关系。所有多核芯片的总性能表示为:

《高性能科学与工程计算》——1.4 多核处理器

而多核芯片的总性能必须大于单核的性能:

《高性能科学与工程计算》——1.4 多核处理器

当然,由于现在的制造技术,增加cpu晶片是不难的。因此,实现多核最简单的方法就是将各个cpu晶片放在一个共同的组件内。比如更小的结构长度等制造工艺方面的改进,将能够在一个晶片上安置更多的核。但是相比前一代产品,多核芯片上的单核性能可能会有所下降,否则芯片上晶体管的数量和时钟频率都会下降。有些公司甚至不惜以可能会带来新的编程模型为代价,而采用更为激进的方法,即设计更简单的核。

1.9节中过于乐观的假设是m个核会表现m个单核性能总和的假设仅在极少数情况下才成立。然而到目前为止,多核结构已经被所有主要的处理器制造商采用。我们将同时使用核,cpu和处理器的概念,避免产生误解。插槽(socket)指的是封装了多个核(有时可能是多个芯片)的物理单元,通常配备引脚来使其成为可更换的部件。传统的台式电脑,只有一个插槽,但是标准的服务器有两个或者四个,它们共享相同内存。4.2节将详细介绍共享存储的并行计算机体系结构。

片上和插槽上的核组织结构有显著的差别:

一个晶片上的核有各自的cache或者共享特定层次的cache(图1-16~图1-18)。在后面提到时,我们称共享了特定cache层次的一组核为cache组(cache group)。例如,图1-17中的六核cpu分成了6个l1组,3个双核l2组和一个包含整个插槽的l3组。

《高性能科学与工程计算》——1.4 多核处理器

共享cache使得核与核间的通信不通过主存,可以非常明显地降低延迟并以指数级增加带宽;而其负面影响可能是带宽瓶颈。共享或独立cache对性能的影响高度依赖于代码和系统。接下来的章节会更多地讨论这个问题。

最新的多核设计集成了一个内存控制器,内存控制器可以直接连接内存模块,而不使用独立的逻辑电路(芯片)。这减少了内存延迟,也使像超传输(hypertransport,ht)和快速通道(quickpath,qpi)等互联网络快速增加。

在cache之间可以存在快速数据通路,使得高效cache一致性通信成为可能。

多核的出现得到的一个最重要结论就是在并行编程时需要尽可能大地利用这些并行资源,而不是只依靠单核的性能。因为单核性能提高的空间不大了,仅根据摩尔定律改进cpu来提高处理速度可能不太现实。第5章将描述并行编程的限制和规则。在4.2节中将呈现更多关于双核和多核的设计细节,如共享内存体系结构等。第6章和第9章给出了当前工程和科研领域使用的主流并行编程范例。

多核结构带来的另一个挑战是每个单核可用的主存带宽和cache容量在减少。虽然生产厂商通过使用更大容量的cache来弥补,但是一些算法性能总是受到主存带宽限制,由于存在总线竞争,使共享内存总线的多个核性能下降。在编程中,减少访存次数和有效使用带宽成为了使用摩尔定律进行有效编码主要考虑的问题。第3章介绍了在这种情况下一些有效的技术。

最后,在多核芯片上,共享存储与非共享存储有着不同的复杂结构(见图1-17、图1-18),使得不同核之间的通信也非常不同:如果存在一个共享的cache,它们可以通过cache中的一个变量来进行同步,而不必通过内存总线来交换信息(参见7.2节与10.5节中的实际交换),这样两个核可以更快地交换信息。在写这本书时,几乎还没有多核的编程技术能够利用这种特征来提高并行代码性能。

因此,根据运行应用程序的通信特征和带宽要求,多线程或进程在多核中(也可能是多插槽)的运行环境非常重要。对于怎样在硬件和程序(线程、进程)中建立紧密联系,附录a中会详细描述。本书经常提到性能与并行程序之间紧密关系的重要性,例如6.2节、第7章、第8章和10.5节。