科技行者摩尔定律即将终结,软件性能工程能否成为新的答案?

摩尔定律即将终结,软件性能工程能否成为新的答案?

摩尔定律即将终结,软件性能工程能否成为新的答案?

摩尔定律即将终结,软件性能工程能否成为新的答案?

2020年6月9日 15:01:54 科技行者
  • 分享文章到微信

    扫一扫
    分享文章到微信

  • 关注官方公众号-科技行者

    扫一扫
    关注官方公众号
    科技行者

提升代码执行效率能够带来诸多收益。

来源:科技行者 2020年6月9日 15:01:54

关键字:摩尔定律

在航空业发展早期,人们已经意识到未来的飞机一定会越来越快。事实也确实如此——从1903年莱特兄弟打造现代飞机雏形时的每小时50公里,到六十年代波音707的每小时约1000公里,飞机时速一直被不断打破。从那以后,商用飞机的速度开始停滞不前,这是因为进一步提高速度已经完全不符合成本效益。

如今的计算机也遇到了类似的问题。几十年以来,我们一直在推动计算元件的小型化,这也让我们每两年左右就将硅芯片上的晶体管数量增加一倍。这种现象被称为摩尔定律(以英特尔公司联合创始人戈登·摩尔的名字命名)。经过多年发展,计算资源的经济性与强大性已经得到无数次证明。但从现在起,我们正迈入小型化的极限区域,计算性能也因此开始停滞不前。

这当然是个大问题。如果摩尔定律在20年前就到达终点,那么如今计算机处理器的性能将仅为真实水平的约千分之一,意味着我们将永远见识不到iPhone、Alexa或者流媒体电影的风采。同样的,如果不能继续提高计算性能,我们在20年之后又会错过哪些惊人的创新?

近年来,不少研究人员一直在探索接下来的发展方向。有人认为新技术才是答案,例如量子计算、碳纳米管或者光子计算。但在与麻省理工学院的其他专家进行了数年联合研究之后,我个人认为这些解决方案的不确定性太强,而且还需要多年实践。在此期间,我们最好不要贸然改造计算机芯片,而应对运行其上的软件进行重新编码。

多年以来,程序员之所以不需要为计算速度而分神,是因为摩尔定律一直在为他们提供更强大的计算资源。所以,他们开始“偷懒”,将注意力集中在如何快速编写出代码身上——计算机的过剩性能足以消解其中的优化不足问题。

例如,不少开发人员会使用“减材”之类的技术:首先找到能够解决问题A的代码,而后使用其解决问题B——即使这并不是解决问题B的最优方式。假设我们需要构建一套类似于Siri的系统以识别语音命令,那么相较于构建自定义程序,最好的办法当然是直接使用能够识别各类单词的现成程序,并以此为基础调整相应结果以提高这些程序的准确度。

好消息是,这种方法确实能够极大提升代码编写速度。坏消息是,有时会造成严重的执行效率低下的难题。这种效率低下还会相互叠加:如果单一“减材”调整会带来20%的性能损失,那么如果一款程序中包含20项“减材”调整,则代码效率将仅为原始版本的百分之一。

这绝不只是思想实验。如今,要想在机器学习、机器人技术以及虚拟现实等领域取得一点点进步,我们都需要大量计算能力。如果想要充分发掘这些技术的潜力,我们必须做出改变。虽然我们当然可以在开发新算法以及简化计算机硬件方面做出尝试,但对大多数企业而言,快速提升计算性能的可行方法仍然是通过软件性能工程提高软件执行效率。

其中一种性能工程策略,名为代码“并行化”。大多数现有软件都是使用数十年前的模式设计而成,这些模式会假定处理器每次只能执行一项操作。这会极大拉低效率,因为现代处理器完全能够通过芯片上的多个核心同时执行多项运算,且每个内核本身也拥有并行处理能力。并行计算等策略完全能够极大提升某些复杂任务的执行速度,同时带来更高的能源使用效率。

尽管软件性能工程有望指明新的道路,但其实现过程同样布满坎坷。更新现有程序以提升其运行速度是一项艰难的任务,对编码人员的并行编程水平与性能工程策略经验要求极高。此外,既然领导者有意调整,也需要克服企业中习惯势力带来的巨大阻碍。

谷歌与亚马逊等敏捷科技巨头早已意识到这种趋势的出现。他们的数据中心规模庞大,因此哪怕一丁点软件性能提升,也足以带来巨大的财务回报。而有他们作为带头人,其他机构自然也会迅速跟上。对应用程序开发人员们来说,在后续推出新功能时,执行效率也将成为重要的评估指标。而在企业方面,这可能意味着替换掉一切没有未来发展可言的传统软件系统。

软件性能工程的不确定性比摩尔定律强得多。在投入大量时间与精力之前,企业往往无法断定这方面努力具体能够带来怎样的收益。性能提升可能非常有限、差异巨大且不可预测。但随着我们逐渐迎来微处理器的物理极限,依靠软件性能工程优化执行效率恐怕将成为大多数程序员从同一台计算机中获得更强性能的最佳选择。

当然,摩尔定律的终结并不代表着我们的计算设备也将停止迭代。但如果我们希望在人工智能与机器人技术等真正重要的领域再次大踏步前进,就必须着力培养自身创造力、并投入时间对软件认真进行性能设计。