一台电脑里有几个电脑?你可能觉得这个问题脑袋尖尖的,但是答案并不是一台。
外设中使用协处理器的历史由来已久,Commodore 的 1541/1571 软盘驱动器就是一台使用 6502 处理器完整电脑,只不过它的系统任务是给主机提供磁盘数据。之后在游戏机中这种设计更是得到了发扬:很多老旧游戏机使用额外的处理器处理音频视频,Sega 的游戏机使用额外的 SuperH 提高性能,任天堂使用嵌入或独立的上代机器的处理器来卸载输入输出功能并提供对前一代游戏的兼容性。
很多时候,这些额外处理器只是为了弥补性能不足的主处理器,或者为输入输出设备提供一些额外的安全功能。但现代设备里,很多时候添加额外的处理器(甚至上面运行的还是完整的操作系统)只是因为这么做硬件和开发成本更低而已。
其中一个实例是苹果的闪电接口视频转换器,由于闪电接口设计上的缺陷,它不能直接输出任何一种视频信号,因此,聪明的苹果选择塞进去了一块有整整 256MB 内存的三星 Cortex-A5 芯片,并在上面运行了一个完整的 XNU 内核,只是为了运行一个把从闪电接口输入的数字视频流转换成 HDMI 或者 VGA 输出的程序。
不过相比于苹果的转接头,还是智能手机比较奢侈。紫光和高通的手机端处理器一般在基带上有额外的处理器芯片和内存,例如 X55 上面有几颗 Cortex A7,而 Google Pixel 4 的传感器核心(以及 Project Soli 雷达)更是占用了一颗额外的 512 MB LPDDR4x 内存。而华为 Mate 20 X 的基带,巴龙 5000,更是独享了一颗 3GB 的内存。另外高通的 WLAN 卡也有独立的系统。
接下来就是更神奇的智能网卡,智能网卡相比于上面的组件更是有了强大的进步:它们有高性能的 CPU,巨大的内存,并且运行着完整的操作系统,基本上就是插在你电脑里另一台独立的电脑。凯为半导体的 LiquidIO 是从主机通过驱动下载固件,而华为的 SD 100,迈络思/英伟达的 BlueField 等直接自带内存硬盘和自己的完整 Linux 操作系统。其中 BlueField 3 更是配备了 64G 内存和 16 核 Cortex-A78 的 CPU,绝对性能甚至超过了很多人的电脑,What can I say?而螃蟹的 RTL8111 网卡甚至有一颗运行 OpenWRT 的 CPU 负责提供几乎没人用到的管理功能。
现代的 x86 处理器和显卡也并非善类,Intel 较新的处理器中有一颗 Quark 小核运行 Management Engine,负责系统初始化以及在后台做一些妙妙操作,而且关机时也不会关闭。AMD 对应的则是一颗叫做平台安全处理器的 Cortex-A5。甚至大部分 ARM 服务器也有一颗不可见的小核做一些神秘的操作。而 Nividia 较新的显卡甚至有一颗 RISC-V 的全功能处理器负责 GPU 上任务的调度。
所以你再想想,你的电脑或者手机里有几台电脑?
本文标题致敬 牛奶袋内袋装牛奶,头图由 Google 哈基米 生成,文字由人类撰写。
