美文网首页
软件工程师应该了解的硬件现状

软件工程师应该了解的硬件现状

作者: 约翰伍德 | 来源:发表于2019-07-01 08:53 被阅读0次

    最近和一位做硬件的朋友聊了很多,因此了解到不少硬件相关的知识,再加上之前在公司做的项目经常需要估计资源使用量,所以也接触过软件如何利用硬件的常识。这篇文章会讨论两个方面,一个是软件如何依赖于硬件,一个是硬件发展的现状。

    首先我们需要知道一个事实,软件的发展是离不开硬件的,其中最直接相关的是cpu和内存。举个例子,如果cpu计算速度够快的话,我们就可以不用存任何中间状态,只保留最开始的源数据,每一次都按需要重新计算结果。反之,如果内存足够便宜的话,我们则可以保留所有的中间状态来加快计算速度。举个例子,假如我们要写一段代码求1到n之和,如果cpu够快,那么每次给我一个n我就重新算一次1到n之和;假如内存足够便宜,我可以提前算好n=1到10000的所有结果,放到内存里,这样每来一个请求我就可以直接从内存中调用结果,几乎用不到cpu去做任何计算。所以究竟是内存剩比较多还是cpu剩比较多会决定我们应该用哪种方法去编程,是用时间换空间还是用空间换时间。

    再聊聊网速对软件的影响。如果网速不够快,我们在写软件的时候必须得在客户端提前下载好可能需要的内容。举个例子,chrome浏览器大家都用过,一开始发布的时候其使用体验远超ie等传统浏览器,它非常快,超越你网速的快。其中有一个非常重要的原因,就是它会提前去load你可能会打开的网页。比如你搜菜谱,在搜索结果出来之后它可能会提前去load第一页的所有结果,所以当你点进一个搜索结果的时候,它可能已经load完2/3,那你只需要等1/3的时间就能打开这个页面了。所以用户会觉得chrome快,但会占很多内存,这其实同样是以空间换时间。不管是网速真的慢,还是服务器端需要一些时间来返回结果,这在用户角度来看都是网速慢,所以chrome这一招很多时候时候也会用在我们自己写的客户端里面,我们经常管它叫prefetch。

    所以程序员写软件,大部分时间都是在做妥协。一段效率不太高的算法,如果没利用好cpu,那就想办法改写算法让剩余的cpu为我们所用,加快速度;如果没利用好memory,那就想办法改写算法让更多的中间结果存到剩余的memory里,加快速度。所以即使是同一段算法我们也会有多种写法,要么以时间换空间,要么以空间换时间。

    接下来聊聊硬件发展的现状吧。过去这几十年之所以科技发展如此之快,是因为算力和存储以摩尔定律(当价格不变时,集成电路上可容纳的元器件的数目,约每隔18-24个月便会增加一倍,性能也将提升一倍。 换言之,每一美元所能买到的电脑性能,将每隔18-24个月翻一倍以上)的方式爆发式地发展。我们看的视频分辨率越来越高,是因为我们的电脑性能越来越高。我们玩的游戏越来越精致,同样是因为我们的电脑性能越来越高。机器学习之所以能快速学习,一样是因为我们的电脑性能越来越高。但现在硬件发展进入了瓶颈,这几年intel有了一个戏称,叫牙膏厂。意思是每发布一款新的芯片就都只能看到一点点改进,像挤牙膏一样一点一点往外挤。因此摩尔定律已经在cpu上失效了。这是非常要命的,因为我们现在大部分计算都放在cpu上面,如果算力得不到提升,那很多需要大量算力的事情就做不了,科技也会停滞发展。

    事实上情况并没有这么糟,因为内存还在发展,硬盘还在发展,网速还在发展,其它运算器件也还在发展(如gpu)。其它的都不说,我们来说说最后一个类别(其它运算器件)。为什么cpu已经发展到头了,其它运算器件还能继续发展,因为cpu是最重要的元件,它发展的最快,而我们现有的制造技术已经无法让它继续发展了,但其它元器件还没有到达这个地步。虽然最终它们都会陷入发展瓶颈,但我们可以开发更多类型的运算元件,把更多软件代码放到硬件里,针对软件对硬件进行优化。就像google的tpu,nvidia的rtx,都是优化过的硬件。他们可能在大部分计算上和其它运算元件差不多(甚至更差),但在某些计算上远超其它运算元件。

    通过这篇文章的分析,我们非常清楚地看到软件对硬件的依赖非常之深。虽然我们进入了摩尔定律失效的时代,但硬件的发展并不会因此停滞。只不过我们的科技应该不会再像之前那样爆发式增长了,就像我们的gdp,已经发展到了一定的阶段,接下来只能慢一点了。

    相关文章

      网友评论

          本文标题:软件工程师应该了解的硬件现状

          本文链接:https://www.haomeiwen.com/subject/etcwzqtx.html