随着工艺的进步,现在手机芯片是越来越强大了,我们可以看到,苹果最新的soc里的晶体管数,已经将近100亿,这已经比台式机里英特尔的CPU的晶体管数要多了,如果看它的性能的话,用一些测试性能的软件,像geekbench,那么它的分数已经比很多中低端的PC性能要高了。而这仅仅是现在苹果在使用台积电的7纳米的工艺制造的soc,台积电的5纳米的技术已经比较成熟了,今年也就是2020年我们就可以看到5纳米的芯片,5nm提供了更高的晶体管密度,更低的功耗,性能还有进一步的提升空间。

这几年intel的工艺似乎是停滞了,这是导致桌面PC性能一直原地踏步的一个原因吧。我们都说intel是牙膏厂,出个新cpu性能甚至只有1%的提升,这也不能仅仅只怪罪于intel的设计部门。提升CPU每个时钟周期性能也就是ipc已经很难了。现在的大部分架构,指令都已经能做到在一个时钟周期内完成,甚至加上一些超标量的技术,在一些循环内部,甚至IPC会小于一,如果继续压榨,仅仅靠架构来提升每个单独cpu的ipc,不会有多大的进展了。可能我们增加缓存或者一些其他方式能够提升一些性能,然而这只是通过降低内存IO的延迟来获得的,并不能说CPU本身的性能提升。所以简单的指责intel挤牙膏是不对的。造成intel原地踏步的主要原因是他的制程工艺这几年一直没有什么突破,从性能提升的角度看,工艺的进步远比架构上提升要来得快得多。

下面是不同厂商的制程工艺的晶体管密度

制程节点 大致晶体管密度 Transistor Density (MTr/mm² 百万每平方毫米)
TSMC’s 5nm EUV 171.3
TSMC’s 7nm+ EUV 115.8
Intel’s 10nm 100.8*
TSMC’s 7nm (Mobile) 96.5
Samsung’s 7nm EUV 95.3
TSMC’s 7nm (HPC) 66.7
Samsung’s 8nm 61.2
TSMC’s 10nm 60.3
Samsung’s 10nm 51.8
Intel’s 14nm 43.5
GlobalFoundries 12nm 36.7
TSMC’s 12nm 33.8
Samsung / GlobalFoundries 14nm 32.5
TSMC’s 16nm 28.2

台积电在10纳米工艺的时候已经跟intel差不多了,intel的10nm一直没有大规模量产,甚至性能还不及14nm,所以上面intel的10nm工艺后面有一个*号的意思就是说是估计,不能作为大规模量产的工艺来看待。如果10nm只能算并驾齐驱的话,那么在7纳米的时候台积电已经是毫无疑问的领先了,特别是n7p和n7+,晶体管密度甚至比intel的未量产的10nm都高。如果今年5纳米工艺能够大规模使用的话,英特尔基本上是被甩开了。未来几年之内,按照现在英特尔整个公司的状态,实在是很难看到他能够有大的新工艺突破的可能。

所以,从未来上看,包括桌面的PC,使用arm芯片作为CPU是一个趋势。如果AMD能够能够很争气的话,也许在桌面上还能让x86架构在苟延残喘一段时间,英特尔已经没指望了。其实amd现在也是台积电代工的,他的晶圆厂GlobalFoundries也就是格罗方德早就跟不上技术进步了。正是靠tsmc的代工使它现在开始逆袭,这也说明了工艺进步对cpu性能提升的重要性,当然我们也不能忽略amd这几年在架构上的优化,他们的每瓦功耗性能已经开始比intel高了。

这几年手机芯片性能提升的速度还是很快的,我们只是下意识的认为,它跟PC的性能差距还是很大,实际上这个差距已经很小了,随着新工艺的提升以及intel工艺的固步不前,很快我们就会看到比桌面更快的手机芯片出现。

在桌面上使用arm芯片,其实已经开始几年了,高通之前就把好几款移动soc发布为pc版,在一些低端上网本上采用。最近这几个月,微软刚发布的Surface Pro X上已经采用了高通的芯片。win 10也支持了在arm上运行,虽然说只是通过jit的即时编译,实时把x86的指令集转化为arm指令,并不是原生的exe就是arm代码。可以理解为模拟执行吧,性能损失肯定是有的。但是要注意到,Surface Pro X上的这颗高通的soc里面的显卡部分,计算能力可以达到2000 gflops,这已经是桌面中端显卡的级别了,比macbook pro上的intel的显卡快了两三倍。

至少目前看来,arm取代PC的趋势势不可挡,虽然说这需要时间。过去,从2010年到2020年花了差不多10年,arm在手机上站稳了脚跟,并且一步一步提升性能,现在已经没有人抱怨手机发热了,这10年的时间智能手机开始崛起和普及的时间。而且arm的性能已经一步步的提升到了接近PC的程度,在未来的十年,也就是2020年到2030年,这10年之间,可能的趋势是arm逐渐逐渐渗透到桌面里,当然这个10年里边可能会是两种芯片并存的状态,如果再往前看10年就是从2030年往后,我们很有可能看到arm占统治地位。

因为arm有一个特点,它是开放的。arm这家公司是直接把芯片ip直接授权给各种厂商,基于他们的指令集授权来生产自己的CPU和SOC,它是一个开放的平台结构。英特尔的x86架构恰恰相反,它是一个封闭的指令架构,只有英特尔一家公司采用这个指令集,而且它是有专利的。加上他授权过的AMD,基本上就是两家。私有的就意味着如果英特尔自己出了问题,他不能再引领技术的发展,x86几乎不可避免的会没落下去。即便是AMD可以顶上来,但是他所发挥的作用顶多只是延缓一下x86的寿命而已。

而且同等功耗下arm的性能更出色,arm之所以在移动设备上被广泛采用,就是因为他的功耗控制要好得多。这也意味着更好的能效比,intel的cpu有很大的历史包袱,这导致他们的cpu花大量的精力在维护对之前的兼容性上面。比如,英特尔的指令集是可变长度的,而arm是固定长度的,虽然可变长度有更好的代码密度,但在今天的巨大内存和硬盘空间上来看这基本可以忽略,有一个数据,intel的atom CPU,在指令的解码上,就要多消耗20%的能耗,而arm完全没有这部分电路。

现在arm在PC上使用的主要原因还是,它的性能不够好,然而现在intel这么不争气,工艺上再没有突破的话,arm很快就会在性能上领先英特尔。甚至现在苹果的最新芯片,如果只是从geekbench的跑分上来看的话,已经比很多intel的cpu要快了,要是给他再加一个风扇,设置更高的时钟频率,相信一定比这些桌面cpu更出色。

据说明年苹果就会推出一款基于arm的MacBook,应该不是因为苹果非要跟英特尔对着干,而是CPU这几年根本没有太大的性能提升。而且,英特尔的CPU集成的显卡,性能上一直都是MacBook的软肋,如果能用自己的arm芯片,不只是CPU性能上的提升,显卡的速度也会有很大的提升,再加上功耗的降低,实在是没有理由怀疑苹果会用arm作为他们的选择,恐怕苹果也是对英特尔失望透了。加上arm再手机soc上的积累,比桌面拥有更高的集成度,更少的芯片,更低的功耗,以及未来的更高的性能。虽然目前下定论还早,但是等明年,苹果的新MacBook出来之后,我们就可以看看出一些对比了。

其实还有一个趋势,那就是,新的芯片不一定非要用在PC上,手机同样可以运行PC的操作系统,因为手机的CPU性能越来越强大,手机的图形处理器速度也越来越快,现在已经接近了入门级PC的水平,如果我们可以在手机上装一个桌面操作系统,在工作的时候可以直接连到手机上来进行,下班可以带回家接着工作,会很方便,因为你的一些各种各样的软件,以及偏好设置,包括一些资料东西,都放在一个地方,在家和工作环境来回切换的话,很多东西不需要来回麻烦的去找。既然手机的性能如此强大了,为什么不用它来作为桌面工作PC来用呢?如果我们不是用它来打游戏,不是用它来做一些特别很耗性能的工作,简单的办公应用,入门级的PC足够了,我们10年前用的电脑都够,更何况现在更快的处理器呢。

如何在手机上装一个桌面的操作系统?我们希望它是什么样子?这个系统除了支持手机上自己运行的小屏幕的系统,我们把它连接在外接显示器的时候,就可以直接运行桌面系统。就像是同一个系统带一个桌面端和一个手机端。

比如说我们手机的安卓系统,当他接到外接设备的时候我们可以让它运行一个桌面端,手机上显示的还是手机端的桌面,而在电脑上显示的是另外一个桌面端,它是在同时运行的,就是说你在桌面端上打开一些办公应用的时候,是不影响手机的接电话发短信等功能。这是很可行的,我们可以把桌面端当成一个应用程序,运行在安卓上的一个应用程序,只是说,安卓需要在系统层做一个支持,加一个模式。只是不知道这些厂商什么时候才会加进去,Google应该还没有支持安卓这样的计划。

那能不能自己动手呢?也许这是个机会。我仔细思考了一下,有好几种方式来实现,我们可以做一个类似于虚拟机的东西,通过一个APP来实现,这是在我们在windows和MAC上经常用的技术,装一个虚拟机,然后在虚拟机上装各种各样的系统。甚至不用模拟x86的指令,很多linux发行版直接都支持arm的。只需要虚拟出来一个环境。

不要忘了,安卓是运行在Linux内核上的,如果我们可以把Linux的一些权限开放出来,直接远程ssh上去,那么同样也可以在上面装各种各样的软件,用adb调试的时候有一个adb shell的命令就可以提供ssh访问,虽然adb的权限也不是root,但是已经可以执行大部分代码了,能不能在安卓上开放ssh呢?

我google了一下,很快就找到了解决方案,已经有人做了,而且还做得更好。比如Samsung DeX,Debian Noroot,Ubuntu Touch等。

我比较喜欢的是一个叫termux的app。它的大致的思路是,做一个安卓APP,这个APP实现一个简单的shell,或者说一个terminal。

简单的看了它的下代码,实现很简单,大部分都是一些Java层的UI,用来实现一个终端窗口输入和显示等交互,这没有什么好说的。他的c++实现很简单,只有一两百行,核心就是create process。先建一个伪终端,然后fork一下自己,然后exec调用命令行,把结果返回过去。这是很标准的一个,教科书般的,实现shell的方法。

你可能觉得这么简单的一个terminal并没有什么用,但是不要忘了安卓的内核是基于Linux的。基于这个terminal我们有了可以执行本地代码的能力,因为安卓下边本身就支持c++实现本地代码,我们只是没有root权限,事实上我们根本用不到root权限,只要能运行二进制代码,我们虚拟一个linux的运行环境就够了,而且这个环境的性能并不会降低,因为它运行的是原生代码,并没有模拟层的存在,你可以认为这个APP就是它的沙盒,可以运行本地代码。而且安卓可以使用ndk来编译c++程序。我们只要在本地把相应的基本运行时库编译了,并按照linux的目录结构摆放,设置一些变量把他们指到正确的位置,就可以编译和执行各种各样的程序了。这些工具甚至不需要大的改动,只需要重新编译一下。现在termux下面已经有各种各样的编译好的pkg了,比如clang,这是一个C/C++编译器,有了编译器我们可以编译各种程序。大部分的包都可以在下面找到,比如python,php,nginx等一些常用的工具在下面都有。有人已经把x11这些图形库给打包了,你甚至可以在上面装ubuntu或者debian等一些Linux发行版。

这些Linux的发行版,本身并不是一个操作系统,他们只是基于Linux内核,把一些常用的软件打包一下,做一些包管理器等等,仅此而已。实际上基于安卓,我们完全可以做一个新的Linux发行版本,我们可以把各种各样的软件打包进去,甚至是图形化的桌面,这一切都在安卓上的一个APP的沙盒环境里运行,其实也是在安卓上运行,他拥有CPU执行的一切,没有的仅仅是无法直接读取手机的其他功能,调用安卓的一些API,可以优化一下,这就是一个完美的环境。

随着手机的发展,存储也越来越大,我们现在看128g都是起步的配置,手机内存也到了主流的8g,这些都已经算是台式机的配置了,只要储存空间够大,我们就可以塞进去更多的东西,在安卓上再运行一个桌面环境,可以通过安卓的USB接口,连接外部设备,MacBook其实也就一个USB type-c接口,就可以连接所有的外设,安卓手机其实也是一样的。在未来我们只要兜里装一个手机,那么我们到处都可以连上显示器和键盘作为一个办公环境,当然如果觉得插线麻烦的话,通过ssh和vnc连接也是一样的。

等未来这一切都更清晰明朗一些的话,无论是谷歌还是苹果都是会看到这些趋势的,安卓和iOS都可能会加一个桌面版的模式,可以直接在系统级别实现,也有可能是基于一个APP上来运行,跟其他功能互不干涉,我觉得后者的可能性更大一些。

甚至可能会出现,直接安装在手机上的桌面操作系统,如果你的旧手机不用了,换新手机了,那么旧手机就可以刷上一个桌面系统,这样就不用再买单独的电脑。

其实PC的小型化也是一个趋势,除非你追求性能,更快的游戏速度。像手机大小的PC,没有噪音,速度又不是很慢的话,足够写程序,其实也就够了。甚至随着一些接口的速度提升,比如USB 4.0标准都出来了,接口速度甚至能达到40Gbps,这么快的速度足够将显卡外接了,就像移动硬盘一样,把显卡作为外接设备,这样打游戏也不会存在性能不够的问题了。

简单总结一下,arm将逐渐取代x86,PC的小型化,微型化,甚至可以在手机上运行的桌面环境。

这些只是我对过去的观察思考,以及对未来的预测,它不一定会发生,然而,总结过去和预测将来,尝试抓住一些机会是重要的。就像那位戴眼镜的长者说过的,人的一生,不止要靠自己努力,也要考虑历史行程的影响。

当然写在这里的东西都是一些空泛的思考了,真正觉得有价值可执行去做的事情,是不会公开的。

以前埋头苦干太多,现在则需要多思考,大部分时间战略比战术重要。