众所周知,苹果正在进行将旗下的电脑从 Intel 处理器切换到自家的 Apple Silicon 处理器,首当其冲的就是新近推出的 Apple M1 笔电和 iMac mini,按照苹果的计划,整个切换工作大概需要一年半左右(时间基本上和当年 PowerPC to Intel 相当)。
处理器切换带来的主要问题是 M1 采用的是 ARMv8 指令集,现有的 Intel64 应用不能直接运行,为了尽量平滑化这个过渡,苹果推出了名为 Rosetta 2 的动态二进制转换器,可以先把 Intel64 的二进制代码先行转译为 ARMv8 指令,从而实现接近无缝的切换。
类似的技术其实在以往就有,例如当年 DEC 的 FX!32、Intel 的 IA-32 转 EPIC 等,此外还有像 NVIDIA Tegra K1 Denver 内置了 x86 转换 ARM 的硬件译码器(需要与软件转码器结合)。
华为这边也有自己的 x86 动态二进制翻译器——ExaGear。
ExaGear 是一个软件包,安装到华为自己的 ARM 系统(鲲鹏 920 硬件平台 + Linux)后,执行起来就会让主机看起来像一个 AMD64 环境。
按照华为自己的介绍,在 ExaGear 里跑 SPEC CPU 2006,相比直接跑 ARM 指令的性能损失大约为 20%,这有点类似与 Rosetta 2 的情况。
比较有意思的是,目前这个东西已经可以在非华为的 ARM 系统上运行,例如 NVIDIA 的 Tegra K1 64-bit 和 Tegra Xavie,但是需要设置一个参数 O_MODE=none。