Linus Torvalds 曾在一家名为 Transmeta 的处理器公司工作。他们制造的处理器是核心中基于 RISC 的对象。如果我没记错的话,这个想法是核心运行一个任意且可升级的“处理器仿真层”(可能是 x86、powerpc 等),它将高级操作码转换为 RISC 核心指令集。
这个想法发生了什么,您认为这种方法可能具有优势(在编程方面)的优点、缺点和情况是什么?
Linus Torvalds 曾在一家名为 Transmeta 的处理器公司工作。他们制造的处理器是核心中基于 RISC 的对象。如果我没记错的话,这个想法是核心运行一个任意且可升级的“处理器仿真层”(可能是 x86、powerpc 等),它将高级操作码转换为 RISC 核心指令集。
这个想法发生了什么,您认为这种方法可能具有优势(在编程方面)的优点、缺点和情况是什么?
该公司的表现不如预期,最终被 Novafora 收购,因为它的节能技术。( http://www.novafora.com/pr01-28-09.html )
据我所知,这项技术根本无法与现有系统竞争。他们远远低于他们的业绩数字。此外,虽然可以在他们的 VLIW 设计之上放置另一个翻译器,但我不知道他们生产的任何产品都这样做了。我不记得 Crusoe 芯片能够接受替代的“翻译”微码下载。
我个人拥有一台使用 Crusoe 处理器的设备,虽然它确实提供了电池寿命,但该设备的性能令人沮丧。部分责任可能归咎于它使用的特殊版本的 Windows,但它仍然很慢。
充其量,它适用于便携式远程桌面。
恕我直言,该技术与 .Net 和 JVM 等软件 VM 具有相同的优势:
从某些角度来看,您可以将现代 x86 芯片视为代码变形,尽管是非常专业的芯片。他们将 x86 架构转换为更高效的类似 RISC 的子指令集,然后执行这些子指令集。
这种技术的另一个例子是 FPGA,它可以被编程以在电路级别上模拟各种处理器或原始电路。我相信一些 Cray 系统可以带有这种“加速器节点”。
一方面,大多数 CISC 处理器在内部将其操作码转换为类似于 RISC 操作的 uops 微操作。流水线和多核已经缩小了 RISC 处理器上的差距,以至于它们之间的差异非常小,如果有的话。如果您需要 C 源代码或其他程序集前端的交叉兼容性,您可以使用 LLVM。 http://llvm.org/
明显的优点:
明显的缺点:
我会说成本降低伴随着数量,因此像 Transmeta 芯片这样的产品必须大量销售才能在价格上与现有的大容量 x86 芯片竞争。
如果我记得,Transmeta 芯片的关键在于它是低功耗的。每个时钟周期来回翻转的硅门更少,可以节省能源。代码变形是为了让您可以在低功耗 RISC 芯片上运行复杂指令集 (CISC)。
Transmeta 的第一款处理器 Crusoe 由于运行基准软件的问题而表现不佳。他们的第二款处理器 Efficeon 确实比 Intel Atom 使用了更少的功率(在相同的性能类别中),并且在相同的功率范围内比 Centrino 表现更好。
现在,像您一样从软件和灵活性的角度来看,代码变形只是即时编译的一种形式,具有该技术的所有优点和缺点。您的 x86 代码本质上是在虚拟机上运行并由另一个处理器模拟。目前虚拟化的最大好处是能够在多个虚拟机之间共享单个处理器,这样您就可以减少空闲 CPU 周期,从而提高效率(硬件成本和能源成本)。
所以在我看来,代码变形,就像任何形式的虚拟化一样,都是为了更有效地利用资源。
有关硬件辅助 x86 ISA 虚拟化的另一种方法,您可能需要阅读有关龙芯 3 CPU 的信息。
大多数现代处理器实际上使用微码来实现它们的指令集。这有很多原因,包括兼容性问题,但也有其他原因。
实际上很难区分什么是“硬件”和什么是“软件”。现代虚拟机,如 JVM 或 CIL (.NET) 也可以在硬件中实现,但无论如何,这可能只是使用微码来完成。
在系统中具有多层抽象的原因之一是程序员/工程师在更高级别工作时不必考虑不相关的细节。
操作系统和系统库还提供了额外的抽象层。但是如果不需要它们提供的功能(即操作系统完成的线程调度),拥有这些层只会使系统“变慢”。让您自己的特定于程序的调度程序击败 Linux 内核中的调度程序并非易事。