如何用计算机求极限,计算机的极限与并行计算

原标题:计算机的极限与并行计算

163328771_722760

在摩尔定律还适用的时候(包括现在), 提高芯片的性能有如下两种方法: 1.在有限面积内加入更多的场效应管, 或者提高时钟。但是这两种办法都会带来功耗的极速增大。

fcfb29bd0985dbed5aa04ed6fd189406.png

由于功耗的非线性增长,很多芯片厂商被迫开发多核芯片,通过多核来解决单核的时钟频率增加所带来的功耗问题。但是此种方案忽略了一个很重要的问题。要讲清楚这个问题,我们先来讲个故事。

从前有个地主,雇了一个长工耕田。这个长工非常能吃苦,随着时间的推移,技术也越来越好,耕田也越来越快。但有一天这个劳工达到了体能极限,不能更快了。于是地主就琢磨着他这块田怎么能再快点耕完。终于有一天地主下了个血本从市场上又买了另外三个技能相当的长工扔到了田里,并满心希望之前一天能耕完的地现在六个小时就能搞定。于是地主六个小时之后去地里一看,瞬间后悔了。因为刚买来的三个长工也不知道自己该做什么,就坐在边上看着原先的那位苦逼工作。

讲到这里,可能有的读者已经发现了多核处理的问题。就是在此之前的绝大多数程序都是按照串行算法开发的,而这些程序还不能很好地在多核芯片上并行执行。因此在大部分时间里,很多核都是空闲着的。

于是学术界和工业开始了又一波对并行化的研究。他们一部分人希望通过设计新的编程语言,让程序员人工提高程序的并行度。另一部分人则希望通过对编译器的优化,让编译器自动识别程序中可并行的部分并生成可并行的二进制码。然而双方的成效都非常有限。可并行的编程语言需要程序员有并行的编程思想,然而这多多少少有违人类本身的逻辑思维方式。同时,并行语言为程序调试带来了很大的挑战。使得大规模的并行程序开发变得相当困难。与此同时,编译器能在程序中找到的可并行部分也相当有限,这也使得自动并行化的效率非常之低。

829a9d7e8daeac9b8fa466cc128e648f.png

这么看来多核芯片真的是一个好的决定吗?程序的并行极限又在哪里呢?要解释这个问题,我们便不得不提到计算机科学界的另一个经验法则——阿姆达尔定律。

阿姆达尔定律于1967年由IBM360系列机的主要设计者吉因恩·阿姆达尔(Gene Amdahl)首先提出。它代表了处理器并行运算之后效率提升的能力。该定律首先将一个程序分成了可并行和不可并行两部分,并指出程序中对某一部份进行并行后所能获得的系统性能改进程度,取决于并行部分被使用的频率,或所占总执行时间的比例。换句话说,在并行计算中用多核处理器对单个程序的加速受限于该程序所需的串行时间百分比。比如一个程序中如果有一半是不能被并行的,那么即便是有无限核数的处理器,该程序能得到的最大加速比也只是两倍。

阿姆达尔定律给出了下面这一个核心公式,speedup=1/(s+(1-s)/n)。该公式计算了一个程序并行化之后所能带来的最大加速比。其中s 为程序串行部分(或不可并行部分)所占比例;1-s 则为程序可并行部分所占比例;n为并行处理节点的个数,可以大致理解为处理器的核数。所以如果一整个程序都是可并行的(s = 0),那么能得到的加速比上限就是n。相反如果一整个程序都是不可并行的(s = 1),那么加速比上限就是1。阿姆达尔定律通过该公式指出了多核的有效利用率和程序的可并行部分所占的百分比是密切相关的。这就像如果地主家的田地是很窄很长的,一次只能通过一个人的,那么就算买来再多的长工也无济于事。

阿姆达尔定律的结论给并行化研究的领域蒙上了一层沮丧的阴影,使得该领域像是一个一眼就能看到天花板的研究。而在阿姆达尔定律中,作者使用了两个设定作为前提。正是这两个设定让我们在1988年看到了对并行化研究不一样的前景。

阿姆达尔定律的第一个假设是固定负载(即计算总量不变)的量化标准。也就是说它没有考虑到硬件发展带动下的软件更新。举个简单的例子,上世纪90年代的时候我们用英特尔奔腾处理器跑 Windows95 的操作系统,而到了如今我们有了i9处理器的同时我相信没谁的电脑里还装着 Windows95 了。换句话说,长工的技能增加的同时,地主的田地也在扩张嘛。到了上世纪80年代,Sandia 国家实验室的科学家们在使用1024个处理器时观察到了3个实际应用程序随着处理器的增加发生线性加速的现象。于是在阿姆达定律的基础上,另一个定律由此诞生——古斯塔夫森定律。

777431f6e914bb84668cff553e5765e8.png

古斯塔夫森指出,阿姆达尔定律的问题出在它的前提过于理想化。硬件性能的提升会直接导致软件规模及复杂度提升。即使算法仍然存在着串行部分,但由于程序规模的不断扩大,算法中串行部分所占比例往往会持续减少。至此,他给出了另外一个公式:Speedup= s +(1-s)n,其中s 是给定任务中不可并行的时间占实际执行时间的百分比,n 代表并行计算节点个数。并指出在许多实际的应用程序中,因处理器核数的持续增加而得到接近线性的加速效果是可能的。

同古斯塔夫森定律一样,阿姆达尔定律的另一个设定是假设程序中可并行的部分在实际情况中可以完全被并行。这种设定作为一个纯数学模型忽略了可并行化在执行的时候所带来的开销。于是,大卫.费舍尔(David. Fisher)于1988年发表论文并提出这样一个理论。如果一个输入大小为n 的程序在串行时需要 T(n) 个步骤来完成,那么该程序被 d 个计算节点(可粗略看作处理器核数)并行之后所需的执行步骤数会以T(n) 的 d+1 次方根增加。这个结论将逻辑门以及铜线连接的延迟考虑进去,打破了古斯塔夫定律中线性加速效果的可能,并将可并行化的加速上限设在了一个更低却更现实的高度。同时,在铜线延迟开始超过逻辑门延迟的如今,信号已然无法在一个时钟周期内被传达到芯片的所有地方。这也同样在并行处理的过程中加入了串行依赖。

科学家们试图以各种新科技突破现有的物理极限不同,在并行化领域里我们现在所能达到的离阿姆达尔提出的极限还很远。当然研究领域里也不乏试图再次突破现有体系所带来的物理极限的尝试。其中最大的项目要数对量子计算机的研究。从底层电路到计算机体系结构,再到上层的算法设计,学术界和工业界都投入了大量的精力进行研究。然而,虽然对于某些应用, 量子计算机确实在理论上会优于传统计算机,但现阶段量子计算机的整个容错系统会带来巨大的开销,从而大大的抵消了其在理论上能够带来的优势。加之量子计算机从本质上来讲也是一个图灵机,其程序本身的复杂程度使得即便是量子计算机也很难超越费舍尔所提出的并行化加速上限。

b7d493223ccb2872a48e63d023ea80a9.png

虽然从阿姆达尔定律提出之后,并行化研究屡遭质疑,多核技术的出现与流行对计算机体系结构,算法及程序设计都带来了重要的影响和挑战。但是多核技术的发展,大大突破了单核运算的极限

163328771_722760

163328771_722760

责任编辑:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值