近年来多核心CPU的发展势头非常迅猛,在消费级PC市场上4~8核心处理器产品已成为很常见的产品,同时再加上像超线程这类新技术的出现与帮助,使得普通用户就能享受到8~16 CPU线程同时运算的快感,处理器的多线程计算性能得到极大的提升。然而另一方面则是CPU单线程性能长时间的“毫无作为”,虽然CPU单线程性能也在进步,但与多线程性能的进步幅度相比则可谓不值一提。同时很多消费级软件对CPU单线程的依赖,如大量游戏、PhotoShop图片处理等也使得用户深感CPU单线程性能的不足。为此,广大用户非常渴求CPU的单线程性能也能获得大幅升级,甚至在去年很多人为Skylake处理器“幻想”出了一个可以联合多个CPU线程,用于执行单一任务的“逆向超线程”新技术。
而令人兴奋的是,从本刊在2015年10月下刊《解析CPU逆向超线程技术可行性》一文中的分析,可以看到要想大幅提升CPU单线程性能并非不可能,逆向超线程技术并非完全虚构,很多科技人员早就在从事这项研究。而近期一家名为Soft Machines的公司更拿出了切实的解决方案,号称能实现IPC倍增式的提高,接下来就让我们走进CPU单线程性能的提升利器一VISC CPU架构。
IPC倍增式的提高,这样的豪言壮语究竟出自何方神圣?可能很多人是头一次听说Soft Machines公司的大名。这是一家位于硅谷的创业公司,在2006、2007年左右成立。一般来说初创阶段的公司会刻意在相当长的一段时间里保持低调,也就是所谓的“秘密阶段”(Stealth mode),在具有一定成果了之后,突然释放出爆炸性消息来吸引关注,当年设计超长指令字结构+动态二进制翻译的全美达公司也曾玩过这个手段,其公司网站曾在两年半的时间里面只挂着一句话“网页还没建好”(This web page is not yet here.),然而私下里却签署了超过2000份保密协议来确保公司的技术和商业目标不被泄露。从这点上来说,Soft Machines选择了和当年全美达类似的路线,直到2014年才脱离“秘密创业阶段”(Stealth mode),走向前台。这家公司迄今为止收到了一亿多美元的投资,投资者包括三星、GlobalFoundries、AMD,拥有75项专利,大约250名雇员,包括前Intel、AMD、高通公司的工程师。Soft Machines试图通过推动CPU单线程性能的增长,使用全新的结构(被称为VISC)来达到IPC倍增。
Soft Machines公布的第一代VISC架构处理器产品原型照片
这一目标不可不谓宏大,加之先前的刻意保密形成的助推,Soft Machines公司刚刚走入公众视线就是大红大紫的状态,特别是IPC倍增的高调声明尤为吸引眼球。日前该公司召开了一次媒体发布会,公布了一些可供玩味的资料,使得我们可以窥探其结构内部的细节、初步分析该技术的前景。
因为每一条指令执行前都要经过翻译,但是自我修改代码(也就是代码会修改代码自身)的情况很少,所以可以把已经翻译完的代码保存在一个缓存里面,以供下次使用。除此之外,因为全美达的代码优化工作主要在软件上完成,因此对于总是执行、经常执行、不太执行、偶尔执行的代码,全美达设置了四种不同的优化阈值。对于总是执行的代码,花费多的时间做深的优化,虽然时间花费多,但是执行起来以后可以补回优化浪费的时间;对于执行很少的代码,就不做优化或者只花费少量时间做很浅的优化,以此来降低软件层面的开销。这两种优化技术都被NVIDIA吸收,应用在丹佛计划的自研核心上,往期的《微型计算机》也做过专门解析。
让我们先来分析一下Soft Machines提出VISC的技术背景,一个要让IPC倍增的结构应该长成什么样子?这是不是在吹牛?
无数历史经验表明,一个全新的结构如果想要获取软件层面的支持,修改指令集层面是需要慎之又慎的,指令集保持不变才能大限度地兼容现有的种种软件,包括操作系统和普通应用程序。所以在VISC的结构框架里,所有的软件线程需要原封不动地在整个系统栈中向下传递,这是Soft Machines唯一的选择,不出意外地,我们终看到Soft Machines设计的VISC也的确是原封不动地接受上层软件的代码。但是这样一来就限制了后继优化的发挥,如何从这些原封不动的软件线程中抽取指令级并行度呢?
VISC执行框架
VISC的软件架构,图中出现的Dynamic Optimization动态优化有可能是借鉴了全美达、NVIDIA丹佛的设计。
包括全美达在内的一批上世纪90年代的先驱者们已经探索出一条路线:指令翻译层。在VISC的执行框架中,既有指令集的指令会被一个中间翻译层翻译为VISC硬件特有的硬件指令格式。目前Soft Machines确认支持将两种上层指令集翻译成VISC专属的硬件格式,其中之一是ARMv8,另外一个坊间传闻可能是x86,但是Soft Machines未予确认。这个软件翻译层会带来多大的翻译开销是一个对性能至关重要的问题,但此次并未在公开资料中提及。