提起NVIDIA,可能99%+的朋友第一反应是“显卡”和“GPU”。世界上两大GPU巨头之一、GPU领域绝对的霸主嘛,地球人都知道,前些天还刚刚发布了全新的Turing架构和RTX 2080Ti/2080/2070显卡呢。
这其实也没什么毛病,不过近几年以来,人们在麻木于NVIDIA GPU强大的同时,似乎冥冥之中忽略了某件事情。NVIDIA的GPU强不?确实强,爆炸强,不管是PC端还是SoC上,有目共睹,人尽皆知……emmm,然后嘞?
直到前阵子看到了这样一张图:
显然,这是一张对目前市面上主流SoC的简要概括,生动形象简明易懂。不过看到最后一个的时候,我瞬间意识到了人们之前忽略了哪里:NVIDIA SoC的CPU怎么样,真的是像图上画的一样么?
实际上,NVIDIA对SoC的设计并不陌生,到目前为止他们已经发布了7代Tegra系列SoC。NVIDIA一直在Tegra SoC中使用自家的GPU架构,但前几代的CPU部分用的则是Arm公版CPU内核。与同时期的高通三星联发科处理器相比,除了“祖传”的GPU外并无其他出彩之处。倒也有不少手机和平板电脑使用了Tegra处理器,还算差强人意。
然而即便时间仅止于此,我们似乎也挑不出NVIDIA SoC中的CPU有什么毛病。非要说的话,不知NVIDIA黄教主是否为苹果乔帮主的铁杆拥趸,这几代Tegra均没有集成neon协处理器,flash播放能力欠佳。至于使用Arm公版CPU内核虽然不假,但是同时期的三星华为联发科德州仪器用的也都是公版内核。
更何况,NVIDIA在CPU上的野心和实力,远非人们的固有印象可以衡量。
在2011年的CES上,NVIDIA对外公布了Denver计划,宣布将要开发基于64位Arm v8指令集的自研架构,用于从移动设备到服务器等各种设备。短短三年后的2014年CES,NVIDIA便推出了使用自研Denver架构的Tegra K1上,并依此成为了继苹果之后第二个发布基于Arm v8指令集的消费级SoC的公司。
时间回退4个月,2013年9月,苹果在其A7处理器上出人意料地使用了基于Arm v8指令集的Cyclone 架构。此后的一年多时间里,市面上基于Arm v7指令集的Cortex A15公版架构和高通Krait自研架构,甚至包括同样基于Arm v8指令集的Cortex A57在内,所有其他同时期的CPU架构均被Cyclone横扫。
除了Denver。
据雷锋网了解,传统的CPU架构设计分为两种:顺序执行和乱序执行。恰如其名,顺序执行体系严格按照接收顺序执行微指令,而乱序执行体系允许在不改变指令运算结果的前提下调整执行顺序。
一直以来,乱序执行被认为是顺序执行发展到极限后的一次进化。CPU执行的任务纷繁复杂,某些情况下RAM等周边部件会阻塞指令的顺序执行,这时乱序执行便可以明显改善运算的灵活性,有效提高吞吐量。
在此前雷锋网介绍Arm Cortex A76和三星Exynos M3架构的文章中,乱序执行曾不止一次被提及,可见在这些高性能Arm内核中,乱序执行似乎已经成为了不二的选择。不过,换用乱序执行需要增设乱序执行窗口,有效识别可以重新排序的指令,确保指令可以安全的乱序执行,这显然会拉高架构的复杂性,芯片尺寸和功耗都会明显上升。
而NVIDIA在提升架构性能方面则另辟蹊径,认为乱序执行并不是解决问题的唯一方案。不光敢想,Denver真的放弃了Arm公版高性能架构中主流的乱序执行方式,转而采用了低功耗处理器上常见的顺序执行,并为其配以一套高效的二进制翻译和代码优化方案。
NVIDIA的思路很简单:顺序执行体系面临的基本问题很明确,无外乎内存停滞等硬件问题,以及指令排序不良等软件问题。那么这些问题一定要硬改架构体系么,能否在“软层面”中解决? 而这就是Denver的核心思想。
Denver一个不寻常的地方是,它内部的指令格式与ARMv7或ARMv8大相径庭。在具体的内部结构上,Denver使用了在GPU中颇为常见的VLIW(Very Long Instruction Word,超长指令字)格式执行指令(毕竟NVIDIA)。
而在架构前端,Denver的指令解码宽度达到了前无古人的7发射,比Cortex A15(3发射)、Cortex A57(4发射)和苹果Cyclone(6发射)都要更宽。NVIDIA官方称其为“7+”架构,其中的“+”指的是NVIDIA为Denver设计的DCO(动态代码优化器)。
DCO的任务是将Arm代码转换为Denver的原生格式,并优化此代码以使其在Denver上运行得更好。对于CPU整体而言,DCO是最关键的一个环节,因为它的性能将直接由DCO决定。
长期以来,一直有传言称Denver最初的设计意图瞄准的是x86,其底层设计和二进制翻译机制旨在不侵犯任何x86专利的前提下兼容x86指令的执行。不管这传言是不是真的,最终结果是NVIDIA在软层面上有了惊人的成果,打造出了一套可以将硬件设计和指令集分离的架构。
然而尽管DCO如此逆天,NVIDIA还是在其之外配备了一套Arm指令解码器。虽然官方表示这个Arm解码器并不是“备胎”,但实际来看显然是“口嫌体正直”,Denver的大部分指令都来自二进制翻译,这个Arm解码器只有区区2指令宽度(Cortex A8级别),只在二进制翻译无法高效处理时才会接手以直接解码Arm指令。
与此同时,由于NVIDIA选择了在“软层面”中解决问题的方式,Denver也拥有了其他架构都不具备的可升级性,如果DCO有改进的话,NVIDIA可以进一步部署新版本的DCO。
而最终Denver的实际性能也足以用技惊四座来形容,在SPECint2000测试中,Denver相比Cortex A15有了35%的平均提升,最高提升幅度甚至高达67%:
更为具体一点,使用Denver核心的Tegra K1性能完全压过了同时期Cyclone核心的苹果A7,相较于Intel Haswell核心的赛扬2955U也是互有来回。
看到这也许有朋友会疑惑,既然NVIDIA SoC的CPU不但不弱,反而也和GPU一样是爆炸强的存在,为什么NVIDIA在手机和平板领域却一直不得法,到最后干脆退出了呢?
很简单,因为人家根本没想争这块啊……
和我们这些看热闹不怕事大的普通用户不同,NVIDIA对自家SoC的情况再清楚不过了。作为刚入局的新人,在基带、底包、SDK、节能降耗等方面均处于后发劣势,和市面上这些位根深蒂固的老黄牛拼力气实为不智之举。
没见人家德州仪器都在2014年退出手机SoC领域了,Tegra出到第4代给小米3用用也算善始善终,交个朋友嘛……
很显然,NVIDIA看到了SoC更好的应用领域——AI等高性能移动计算平台,说白了就是自动驾驶和机器人。
经历了Tegra K1和Tegra X1的过渡,Tegra Parker(即NVIDIA Drive PX)终于带着改良版的Denver2架构成功登上了自动驾驶的舞台。而今年刚刚推出的NVIDIA Jetson Xavier平台则更是带来了强到没朋友的自研架构Carmel,其指令解码达到了惊为天人的10宽度,在Denver的基础上再次向前迈进了一大步。
据雷锋网了解,在眼下的AI芯片领域都在追求纯AI运算的精简设计时,NVIDIA是唯一没有放弃高性能CPU的一家,同时也是将CPU、GPU、AI三部分平衡做的最好的一家。
So,老铁们,别再说NVIDIA“CPU不行GPI带”了,NVIDIA真的不是CPU差,而是是在太强了,强到已经超出了我们所熟知的这个次元……