科技简章049-为什么CPU比十年前快了100倍,软件运行还是没觉得快

现下CPU的运行速度每秒计算50亿次起,但无论是用电脑还是用手机运行软件,并没有觉得比十年前快得飞起的感觉,为什么?这是一个很好的问题。

我们都知道摩尔定律统治着整个IT行业的发展,即每十八个月计算机、手机之类的产品性能会翻一番,或者换句话说,这些东西每十八个月应该降价一半。

正是因为摩尔定律的存在,无论你是搞CPU、GPU、闪存等等,都必须不断投入研发以提升芯片的性能,否则一旦没有性能更强劲的新产品就会被淘汰。这是一件很残酷的事情,对于任何一个这个行业的公司来说,如果想躺平,那就只有十八个月的生命。

正是由于硬件性能的不断进步,我们能够享受到更烧计算资源的软件,比如大型3D游戏、高清视频、实时美颜滤镜等等。

看到这里大家是不是有点感觉了,对,我们提升的硬件性能被更吃资源的软件拿走了。这个在业界被称为安迪—比尔定律,安迪·格鲁夫是原英特尔的CEO,比尔就是微软的比尔盖茨了。这个定律的意思就是,安迪所代表的硬件性能,被比尔盖茨所代表的的操作系统、应用软件吃掉。

那么软件为什么越来越吃计算资源呢?

第一、更多图形应用比如游戏、充满图像元素的用户界面、应用中的图片展示等等,这些天然就是很吃计算的。而我们现在对游戏品质的要求也越来越高、对图像清晰度的要求也如此,自然也就越来越烧资源。

第二、由于操作系统和软件的复杂度越来越高,它们也越来越大。一个软件动则几十万甚至上千万行代码,已经不是靠少数几个编程天才就能凭一己之力搞定的了,需要上百甚至上千的程序员一起协作完成,于是就诞生了“软件工程”,将工程方法用于软件编写项目。

工程协作就意味着,一个人编写的部分代码可能会被别人查看、修改,或者就是基于别人的代码继续写,这就要求代码具备更高的可读性。早期大家使用汇编语言,这种编程语言的执行效率比较高,但是人肉可读性非常差,不符合软件工程的要求。

于是,为了提高代码可读性、节省代码编写时间等,编程语言必须变得越来越人性化、好用。但同时,却以牺牲执行效率为代价。比如现在常用的java就比C++的执行效率要低,python的执行效率又更低了。因此,即使同样功能的软件,今天也比以前更占硬件资源。

此外对于软件厂商来说,软件能无bug上线是最大目标,而优化成更小、不卡顿这种费时费力的事情,基本不在绩效考核的范围内。换句话说,能用就不错了,还要什么自行车。

典型的比如微信,最早的版本我印象中是不超过1M,而最新的苹果版本要420M,增加的“体积”和增加的功能其实并不成正比。所以,软件的复杂化不仅仅吃计算资源,还越来越大,占更多的存储空间。总之,你新买的手机资源早晚都会被软件吃掉。

作为用户,我们当然不喜欢软件将硬件提升所带来的好处全部杀光,但是在IT行业,硬件厂商反而正是靠不断烧资源的软件促使用户更新换代的,以赚钱生存的。如果用户没有更新硬件的需求,那么这些硬件公司的销售业绩就会受极大影响。

以微软,或者说操作系统为首的软件公司通过吃掉硬件性能,迫使用户换新机,而新机厂商又向上游的芯片厂商定购性能更强劲的产品。如此,整个产业链才被带动了起来。

于是,针对这一现象,早年人们将计算机产业的这一现象称为WinTel,即Window+Intel。同样,这个模式被复制到了手机领域,成为Android+ARM。

从硬件层面,造成没觉得软件运行快还有一个原因,即不是CPU的锅。

传统的计算机以冯诺依曼结构为基础,包括我们今天的智能手机也是类似结构,即计算和存储分开。CPU在运算的时候只存储少量数据,有需要的时候要从内存或者硬盘、闪存中读取和写入。但CPU的速度是远大于数据在内存、硬盘中传输的速度的,换句话说,CPU有不少时间是在等数据传过来,对于用户来说就是感觉运行慢了。

数据传过来慢有两个原因,一来是存储器本身的响应时间慢,二来是各个设备之间的I/O接口传输速度慢。I/O接口的速度提升主要依靠带宽的增加,带宽就是单位时间内能传输的数据量,就跟高度公路一样,路越宽通行能力越强。

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2021年5月15日
下一篇 2021年5月15日

相关推荐