1、结合硬件的发展史,谈谈你对高性能计算机发展的看法。

 

    针对高端计算机系统的发展提出规模限定系统,防止规模过大的扩张。比如可以为系统的功耗、成本、占用空间设定一个限定值,形成一个行业标准。让企业真正实现通过技术创新达到性能的提高,而不是盲目的扩大面积,增加机器。规模限定也意味着设计和实现手段的约束。

  高端计算机系统一个很重要的方面就是系统功耗,钱德沛表示系统功耗是制约高端计算机性能提升和工程实现的主要因素,我们不能靠无限制地扩大系统规模来提高系统性能,因为扩大后系统的耗电量将是企业一个沉重的负担。除了系统机器本身的耗能外,运行环境空调功耗也是一个不小的数目。尽管目前采用水冷机柜等一些比较高效的制冷技术,但是冷却效率仍有待提高。

    目前我国高端计算机发展主要有四个方面的挑战:功耗壁垒、存储器壁垒、大规模并行壁垒、可靠性壁垒。面对这么多技术壁垒,究竟我国高性能计算机该如何实现规模限定系统?钱德沛提出必须依靠体系结构创新、发明革命性器件、软硬件协同三个方面来实现。

   在系统结构创新上,需要通过计算机系统结构的创新,客服技术壁垒。目前大部分的计算机还是遵循冯.诺依曼结构,系统结构发展缓慢,要客服技术壁垒就必须从系统角度解决问题,发展新一代高性能计算机系统。报告中提出了三种新的计算机结构:可重构系统、混合体系结构系统、新型众核处理器系统结构。

    可重构系统的特点是可以根据运行的程序改变系统部件自身的功能和相互间的关系。可重构性可以分为动态可重构和静态可重构。

2Amdahl定理,该定理在多核时代有怎样的影响?

 

    阿姆达尔定律是计算机系统设计的重要定量原理之一,于1967年由IBM360系列机的主要设计者阿姆达尔首先提出。该定律是指:系统中对某一部件采用更快执行方式所能获得的系统性能改进程度,取决于这种执行方式被使用的频率,或所占总执行时间的比例。阿姆达尔定律实际上定义了采取增强(加速)某部分功能处理的措施后可获得的性能改进或执行时间的加速比。简单来说是通过更快的处理器来获得加速是由慢的系统组件所限制。 

    阿姆达尔曾致力于并行处理系统的研究。对于固定负载情况下描述并行处理效果的加速比s,阿姆达尔经过深入研究给出了如下公式:

S=1/(a+(1-a)/n)

    其中,a为串行计算部分所占比例,n为并行处理结点个数。这样,当a=0时,最大加速比s=n;当a=1时,最小加速比s=1;当n→∞时,极限加速比s→ 1/a,这也就是加速比的上限。例如,若串行代码占整个代码的25%,则并行处理的总体性能不可能超过4。这一公式已被学术界所接受,并被称做阿姆达尔定律”(Amdahl law)

阿姆达尔定律角度评价多核的发展趋势

在过去的很多年里,软件性能的提升很大程度上源自处理器速度的增长。软件工程师面对客户抱怨说软件运行得太慢的通常回答是:升级你的系统。

然而现在由于处理器速度逐渐逼近物理极限,继续提高处理器的时钟速度会导致发热量显著增加,甚至核心熔化。江郎才尽的硬件工程师想出了一个能保住自己饭碗的办法:既然不能提高单个核心的速度,那就在一个处理器里面封装多个核心。于是我们进入了多核处理器的时代。

今天,随着多核处理器的发展,计算领域正在发生具有革命性影响的转变。

二、阿姆达尔定律指示的限制因素

现在犯难的就是软件工程师了:没有了处理器速度不断提升的免费便车,接下来不得不面对的问题就是如何有效地利用处理器里面的多个核,也就是并行计算。

然而多核面对一个似乎无法回避的难题:阿姆达尔定律(Amdahl's Law)。

阿姆达尔定律告诉我们:系统中某一部件由于采用某种更快的执行方式后整个系统性能的提高与这种执行方式使用频率占总执行时间的比例有关。由于采用特殊的方法所能获得的加速比为:

 

在多核处理器中加速比是衡量并行程序性能的一个重要参数,定义为Speedup=使用单处理器执行时间/使用多处理器执行时间。根据阿姆达尔定律: 

 

其中,s是系统中串行执行部分占整个系统的比例,n是多核处理器中核的数目。当s=5%时,8核的加速比为5.93倍,16核的加速比为9.14倍,与理想状态的8倍、16倍有不小的差距。当s=30%时,8核的加速比仅有2.58倍,16核的加速比仅有2.91倍,完全没有发挥多核的优势。更加糟糕的是,实际情况往往比Amdahl定律给出的结果更差。考虑到核间交互带来的额外开销,核间同步影响整个系统的并发处理,设计糟糕的系统在多核下甚至比单核下的性能还要低得多。 

n趋近于无穷大时(即假设我们有无穷多个核心),速度提升的上限是 1/s,即速度提升的上限取决于程序不能被并行计算的部分。

这个定律的结果就是,即便我们能够有效地并行计算一个程序的95%,剩下 5%只能串行计算的部分限制了这个程序的运行速度最多能提升1/5%=20倍。而现有的程序中很少能够做到95%以上部分的并行计算。

而且,如果你想在一个并行、线程化的应用中使用不只一个内核,就需要某种通信/同步,而且,对于一个固定的工作负载,通信/同步开销是作业所用 CPU 内核数量的单调递增函数。由此,我们需要对阿姆达尔定律做些简单修改:

 

其中,T为解决某计算问题所需的总时间,Ts是完成串行工作所需的时间,Tp 是完成所有并行工作所需的时间,N是并行工作中所使用的处理器数量,To是每颗处理器的通信与同步开销。T正是传统阿姆达尔定律公式中所没有的——随着处理器的增多,总开销也会增加。

在没有引入通信/同步开销的传统标准模型中,总时间T就是处理器数N的一个单调递减函数,会逐渐接近于Ts。而在修改后的公式中,我们很清楚地看到,由于存在通信开销,随着处理器数N的增加,在达到某一临界点后,总时间T就会开始增加。因此,对于一个完全并行的应用 (Ts=0)来说,其所需处理器的最优数量是:

 

因此,能否有效降低串行执行比例和降低交互开销决定了能否充分发挥多核的性能,其中的关键在于:合理划分任务、减少核间通信。这正是当今多核处理器的发展趋势。

三、多核的发展趋势

根据阿姆达尔定律,我们知道为了提升多核处理器的性能,合理划分任务和减少核间通信是关键点。

1.合理划分任务

整个系统任务可以按数据、功能等多个维度划分为若干子任务,分别由不同的核来执行这些子任务。 

数据分解,把不同的数据报文交给不同的核处理。比如,可以按照接收数据报文的接口来划分任务,不同接口的数据报文由不同的核处理,可以避免不同网段的流量竞争处理器资源,也可以用来保障核心业务。另一种可能的方案是按协议类型来区分,由一到多个核处理HTTP协议,其它核处理其它协议。 

功能分解,把不同的功能交给不同的核处理。比如,其中一个核专门负责加解密报文处理,另一个核专门负责病毒扫描等。 

静态调度,相同的核永远处理相同的任务。静态调度算法不涉及到任务切换,因此系统开销较小,但存在任务分配不公平的情况。 

动态调度,同一个核可能处理不同的任务。采用动态调度算法的系统可以根据每个核的实际负载情况动态分配任务,这样可以最大限度的利用每个核的处理能力。 

合理的任务分解方案使得不同任务相对独立,既降低了串行执行比例,也减少了核间通信的需求。

2.减少核间通信

减少核间通信的技术主要包括异步并行、无锁编程等技术。 

异步并行技术与同步并行技术相对应。后者是同步处理的一般模式,指的是一个核执行任务到某个时刻必须与其它核进行数据交换,然后才能继续进行;前者是对同步处理的优化,数据交换不必严格在某个时刻进行,可以集中进行数据交换,从而减少交互的次数和时间。 

无锁编程是减少核间通信的另一个思路,通过精心设计的数据结构,两个核可以完全不进行任务同步,同时又能协同进行工作。

多核处理器思路的出现源自CPU主频和功率等的物理极限。通过阿姆达尔定律可以十分清楚地知道多核处理器的性能受到那些因素的限制,即串行执行比例和交互开销。所以多核处理器的发展趋势是合理划分任务、减少核间通信以及加强程序的并行性。这几个方面都已经有一些成果,但总体上还处于探索之中。